rp2040/driver/inc/common.h

58 lines
1.4 KiB
C
Raw Normal View History

2024-03-24 20:52:55 +08:00
#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__ */