58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
#ifndef __HARDWARE_COMMON_H__
|
|
#define __HARDWARE_COMMON_H__
|
|
|
|
#include "reg.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __sev(void) {
|
|
__asm__ volatile ("sev");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __wfe(void) {
|
|
__asm__ volatile ("wfe");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __wfi(void) {
|
|
__asm__ volatile ("wfi");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __dmb(void) {
|
|
__asm__ volatile ("dmb" : : : "memory");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __dsb(void) {
|
|
__asm__ volatile ("dsb" : : : "memory");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void __isb(void) {
|
|
__asm__ volatile ("isb");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void enable_interrupt(void) {
|
|
__asm__ volatile ("cpsie i");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void disable_interrupt(void) {
|
|
__asm__ volatile ("cpsid i");
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline uint32_t save_and_disable_interrupt(void) {
|
|
uint32_t status;
|
|
__asm__ volatile ("mrs %0, PRIMASK" : "=r" (status)::);
|
|
__asm__ volatile ("cpsid i");
|
|
return status;
|
|
}
|
|
|
|
__attribute__ ((__always_inline__)) static inline void restore_interrupt(uint32_t status) {
|
|
__asm volatile ("msr PRIMASK, %0"::"r" (status) : );
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __HARDWARE_COMMON_H__ */
|