#elif CPU_ARM
-
#ifdef __IAR_SYSTEMS_ICC__
#include <inarm.h>
#endif /* !__IAR_SYSTEMS_ICC_ */
#elif CPU_PPC
- #define IRQ_DISABLE FIXME
- #define IRQ_ENABLE FIXME
- #define IRQ_SAVE_DISABLE(x) FIXME
- #define IRQ_RESTORE(x) FIXME
- #define IRQ_ENABLED() FIXME
+
+ /* Get IRQ_* definitions from the hosting environment. */
+ #include <cfg/os.h>
+ #if OS_EMBEDDED
+ #define IRQ_DISABLE FIXME
+ #define IRQ_ENABLE FIXME
+ #define IRQ_SAVE_DISABLE(x) FIXME
+ #define IRQ_RESTORE(x) FIXME
+ #define IRQ_ENABLED() FIXME
+ #endif /* OS_EMBEDDED */
#elif CPU_DSP56K
#define IRQ_EXIT() /* NOP */
#endif
+#ifdef IRQ_RUNNING
+ /// Ensure callee is running within an interrupt
+ #define ASSERT_IRQ_CONTEXT() ASSERT(IRQ_RUNNING())
+
+ /// Ensure callee is not running within an interrupt
+ #define ASSERT_USER_CONTEXT() ASSERT(!IRQ_RUNNING())
+#else
+ #define ASSERT_USER_CONTEXT() do {} while(0)
+ #define ASSERT_IRQ_CONTEXT() do {} while(0)
+#endif
+
+#ifdef IRQ_ENABLED
+ /// Ensure interrupts are enabled
+ #define ASSERT_IRQ_ENABLED() ASSERT(IRQ_ENABLED())
+
+ /// Ensure interrupts are not enabled
+ #define ASSERT_IRQ_DISABLED() ASSERT(IRQ_ENABLED())
+#else
+ #define ASSERT_IRQ_ENABLED() do {} while(0)
+ #define ASSERT_IRQ_DISABLED() do {} while(0)
+#endif
/**
* Execute \a CODE atomically with respect to interrupts.