]> oss.titaniummirror.com Git - rgblamp.git/blobdiff - isr.c
Aesthetic cleanups
[rgblamp.git] / isr.c
diff --git a/isr.c b/isr.c
index f466c554f0a20ada56a8a66702eb7d532bbbf502..9d80695df2e5f12808ae6091c0ee8f96c1e936b3 100644 (file)
--- a/isr.c
+++ b/isr.c
@@ -7,11 +7,42 @@
 
 #include <htc.h>
 #include "tmr.h"
+#include "tmr32.h"
+#include "btn.h"
+#include "task.h"
 
-bit isr_gie; /* Used to store the state of GIE for nested ndi()/nei() */
-unsigned char isr_di; /* Count of nested ndi() */
+bit _isr_gie; /* Used to store the state of GIE for nested ndi()/nei() */
+unsigned char _isr_di; /* Count of nested ndi() */
+
+void ndi()
+{
+  if (_isr_di++ == 0) {
+    _isr_gie = GIE;
+    di();
+  }
+}
+
+/* Nested enable interrupts inline function.  Should be OK even in ISR. */
+void nei()
+{
+  if (--_isr_di == 0 && _isr_gie)
+    ei();
+}
 
 void interrupt isr()
 {
   tmr_isr();
+  btn_isr();
+  tmr32_isr();
+
+  if (tmr_fired(TMR_BTN_PB_HELD))
+    task_post(TASK_BTN_PB_HELD);
+  if (tmr_fired(TMR_FADE))
+    task_post(TASK_FADE);
+  if (tmr_fired(TMR_INCOLOR))
+    task_post(TASK_INCOLOR);
+#if 0
+  if (tmr_fired(TMR_DIM))
+    task_post(TMR_DIM);
+#endif
 }