summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
Diffstat (limited to 'libcpu')
-rw-r--r--libcpu/arm/cortex-m4/cpuport.h37
-rw-r--r--libcpu/arm/cortex-m7/cpuport.h37
-rw-r--r--libcpu/arm/cortex-m85/cpuport.h37
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;