* \brief CPU-specific IRQ definitions.
*
* \author Giovanni Bajo <rasky@develer.com>
- * \author Bernardo Innocenti <bernie@develer.com>
+ * \author Bernie Innocenti <bernie@codewiz.org>
* \author Stefano Fedrigo <aleph@develer.com>
* \author Francesco Sacchi <batt@develer.com>
*/
#define IRQ_RESTORE(x) FIXME
#endif /* OS_EMBEDDED */
-#elif CPU_ARM
+#elif CPU_ARM
#ifdef __IAR_SYSTEMS_ICC__
#define IRQ_ENABLED() \
((bool)(get_CPSR() & 0xb0))
- #define BREAKPOINT /* asm("bkpt 0") DOES NOT WORK */
-
#else /* !__IAR_SYSTEMS_ICC__ */
#define IRQ_DISABLE \
#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 BREAKPOINT asm(debug)
#define IRQ_DISABLE do { asm(bfset #0x0200,SR); asm(nop); } while (0)
#define IRQ_ENABLE do { asm(bfclr #0x0200,SR); asm(nop); } while (0)
#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 IRQ_ASSERT_ENABLED() ASSERT(IRQ_ENABLED())
+
+ /// Ensure interrupts are not enabled
+ #define IRQ_ASSERT_DISABLED() ASSERT(!IRQ_ENABLED())
+#else
+ #define IRQ_ASSERT_ENABLED() do {} while(0)
+ #define IRQ_ASSERT_DISABLED() do {} while(0)
+#endif
/**
* Execute \a CODE atomically with respect to interrupts.
IRQ_RESTORE(__flags); \
} while (0)
-
-#ifndef BREAKPOINT
-#define BREAKPOINT /* nop */
-#endif
-
-
#endif /* CPU_IRQ_H */