cortex-m3: add basic support for the lm3s1968 board.
[bertos.git] / bertos / cpu / irq.h
index 466b524da2959f637f495be8121a3ef7ab63f624..462034fe669e700099ec2c93f37830dae5f34a77 100644 (file)
                #define IRQ_RESTORE(x)          FIXME
        #endif /* OS_EMBEDDED */
 
+#elif CPU_ARM_LM3S1968
+
+       #define IRQ_DISABLE asm volatile ("cpsid i" : : : "memory", "cc")
+       #define IRQ_ENABLE asm volatile ("cpsie i" : : : "memory", "cc")
+
+       #define IRQ_SAVE_DISABLE(x)                                     \
+       ({                                                              \
+               asm volatile (                                          \
+                       "mrs %0, PRIMASK\n"                             \
+                       "cpsid i"                                       \
+                       : "=r" (x) : : "memory", "cc");                 \
+       })
+
+       #define IRQ_RESTORE(x)                                          \
+       ({                                                              \
+               if (x)                                                  \
+                       IRQ_DISABLE;                                    \
+               else                                                    \
+                       IRQ_ENABLE;                                     \
+       })
+
+       #define CPU_READ_FLAGS()                                        \
+       ({                                                              \
+               cpu_flags_t sreg;                                       \
+               asm volatile (                                          \
+                       "mrs %0, PRIMASK\n\t"                           \
+                       : "=r" (sreg) : : "memory", "cc");              \
+               sreg;                                                   \
+       })
+
+       #define IRQ_ENABLED() (!CPU_READ_FLAGS())
 
 #elif CPU_ARM