altos: Rework packet receive for cc1120
[fw/altos] / src / lpc / ao_arch_funcs.h
index 0891903ea5f00cb2adae5dbf57506fcdcb81a5c5..21a7a8e5702f779fd2ddce6e164e89a8bf77ab9e 100644 (file)
@@ -161,16 +161,17 @@ static inline void ao_arch_restore_stack(void) {
 
 #endif /* HAS_TASK */
 
 
 #endif /* HAS_TASK */
 
-#define ao_arch_wait_interrupt() do {                  \
-               asm(".global ao_idle_loc\n\twfi\nao_idle_loc:");        \
-               ao_arch_release_interrupts();                           \
-               ao_arch_block_interrupts();                             \
+#define ao_arch_wait_interrupt() do {                          \
+               asm("\twfi\n");                                 \
+               ao_arch_release_interrupts();                   \
+               asm(".global ao_idle_loc\n\nao_idle_loc:");     \
+               ao_arch_block_interrupts();                     \
        } while (0)
 
        } while (0)
 
-#define ao_arch_critical(b) do {                               \
-               ao_arch_block_interrupts();                     \
-               do { b } while (0);                             \
-               ao_arch_release_interrupts();                   \
+#define ao_arch_critical(b) do {                       \
+               uint32_t __mask = ao_arch_irqsave();    \
+               do { b } while (0);                     \
+               ao_arch_irqrestore(__mask);             \
        } while (0)
 
 /*
        } while (0)
 
 /*