X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=isr.c;h=9d80695df2e5f12808ae6091c0ee8f96c1e936b3;hb=c8eb0534dfe5a1dd703621ead4baf56db6826d4f;hp=a1b9a491d3602259a8dc9396fcff7b793be95c10;hpb=be367d7f046a080f1575ac4e918a94dfad24fa73;p=rgblamp.git diff --git a/isr.c b/isr.c index a1b9a49..9d80695 100644 --- a/isr.c +++ b/isr.c @@ -7,19 +7,36 @@ #include #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() */ +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_AUTO_OFFON)) - task_post(TASK_AUTO_OFFON); + 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))