diff options
Diffstat (limited to 'libcpu')
| -rw-r--r-- | libcpu/arm/cortex-m4/cpuport.h | 37 | ||||
| -rw-r--r-- | libcpu/arm/cortex-m7/cpuport.h | 37 | ||||
| -rw-r--r-- | libcpu/arm/cortex-m85/cpuport.h | 37 |
3 files changed, 111 insertions, 0 deletions
diff --git a/libcpu/arm/cortex-m4/cpuport.h b/libcpu/arm/cortex-m4/cpuport.h index 05bb12cf2f..9bf02e57af 100644 --- a/libcpu/arm/cortex-m4/cpuport.h +++ b/libcpu/arm/cortex-m4/cpuport.h @@ -10,6 +10,43 @@ #ifndef CPUPORT_H__ #define CPUPORT_H__ +#include <rtdef.h> + +#ifdef rt_hw_isb +#undef rt_hw_isb +#endif +#ifdef rt_hw_dsb +#undef rt_hw_dsb +#endif + +rt_inline void rt_hw_isb(void) +{ +#if defined(__CC_ARM) + __asm + { + ISB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("isb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("ISB"); +#endif +} + +rt_inline void rt_hw_dsb(void) +{ +#if defined(__CC_ARM) + __asm + { + DSB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("dsb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("DSB"); +#endif +} + #ifdef RT_USING_SMP typedef union { unsigned long slock; diff --git a/libcpu/arm/cortex-m7/cpuport.h b/libcpu/arm/cortex-m7/cpuport.h index 05bb12cf2f..9bf02e57af 100644 --- a/libcpu/arm/cortex-m7/cpuport.h +++ b/libcpu/arm/cortex-m7/cpuport.h @@ -10,6 +10,43 @@ #ifndef CPUPORT_H__ #define CPUPORT_H__ +#include <rtdef.h> + +#ifdef rt_hw_isb +#undef rt_hw_isb +#endif +#ifdef rt_hw_dsb +#undef rt_hw_dsb +#endif + +rt_inline void rt_hw_isb(void) +{ +#if defined(__CC_ARM) + __asm + { + ISB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("isb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("ISB"); +#endif +} + +rt_inline void rt_hw_dsb(void) +{ +#if defined(__CC_ARM) + __asm + { + DSB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("dsb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("DSB"); +#endif +} + #ifdef RT_USING_SMP typedef union { unsigned long slock; diff --git a/libcpu/arm/cortex-m85/cpuport.h b/libcpu/arm/cortex-m85/cpuport.h index 05bb12cf2f..9bf02e57af 100644 --- a/libcpu/arm/cortex-m85/cpuport.h +++ b/libcpu/arm/cortex-m85/cpuport.h @@ -10,6 +10,43 @@ #ifndef CPUPORT_H__ #define CPUPORT_H__ +#include <rtdef.h> + +#ifdef rt_hw_isb +#undef rt_hw_isb +#endif +#ifdef rt_hw_dsb +#undef rt_hw_dsb +#endif + +rt_inline void rt_hw_isb(void) +{ +#if defined(__CC_ARM) + __asm + { + ISB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("isb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("ISB"); +#endif +} + +rt_inline void rt_hw_dsb(void) +{ +#if defined(__CC_ARM) + __asm + { + DSB + } +#elif defined(__clang__) || defined(__CLANG_ARM) || defined(__GNUC__) + __asm volatile("dsb 0xf" ::: "memory"); +#elif defined(__IAR_SYSTEMS_ICC__) + __asm("DSB"); +#endif +} + #ifdef RT_USING_SMP typedef union { unsigned long slock; |
