X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=Hal%2FHal.c;h=f7b801c4aed7174759f08fc616f26a4ade4f54d9;hp=00b8c6b07202727f6cc402d3f9aed6e9da7a5cf5;hb=62d25e937392e215935ad07e554ef9b18dba18fe;hpb=b0aee467c6cb053f9ad754e93b349e4e45cc0860 diff --git a/Hal/Hal.c b/Hal/Hal.c index 00b8c6b..f7b801c 100644 --- a/Hal/Hal.c +++ b/Hal/Hal.c @@ -24,6 +24,8 @@ #define BUTTON_CONFIG() (P1DIR &= ~BIT3, P1REN |= BIT3, P1OUT |= BIT3, P1IES |= BIT3); #define BUTTON_ENABLE() (P1IFG &= ~BIT3, P1IE |= BIT3) +#define BUTTON_DISABLE() (P1IE &= ~BIT3, P1IFG &= ~BIT3) +#define BUTTON_FIRED() (P1IFG & BIT3) #define BUTTON_PRESSED() (!(P1IN & BIT3)) #define BUTTON_DEBOUNCE_MSECS 100 @@ -84,15 +86,15 @@ #define WAKEUP() (__bic_SR_register_on_exit(LPM3_bits)) #endif -#define NUM_HANDLERS 3 +#define NUM_HANDLERS 5 #define BUTTON_HANDLER_ID 0 -#define TICK_HANDLER_ID 1 -#define DISPATCH_HANDLER_ID 2 +#define EVENT4_HANDLER_ID 1 +#define EVENT5_HANDLER_ID 2 +#define TICK_HANDLER_ID 3 +#define DISPATCH_HANDLER_ID 4 -int32_t buttonCnt = 0; - -static void buttonHandler(void); +static void buttonHandler(uint8_t id); static void postEvent(uint8_t handlerId); static Hal_Handler appButtonHandler; @@ -226,7 +228,7 @@ void Hal_idleLoop(void) { uint8_t id; for (id = 0, mask = 0x1; id < NUM_HANDLERS; id++, mask <<= 1) { if ((events & mask) && handlerTab[id]) { - handlerTab[id](); + handlerTab[id](id); } } } @@ -326,11 +328,12 @@ void Em_Hal_watchOn(void) { /* -------- INTERNAL FUNCTIONS -------- */ -static void buttonHandler(void) { - Hal_delay(100); +static void buttonHandler(uint8_t id) { + Hal_delay(BUTTON_DEBOUNCE_MSECS); if (BUTTON_PRESSED() && appButtonHandler) { - appButtonHandler(); + appButtonHandler(id); } + BUTTON_ENABLE(); } static void postEvent(uint8_t handlerId) { @@ -348,9 +351,9 @@ static void postEvent(uint8_t handlerId) { #pragma vector=PORT1_VECTOR #endif INTERRUPT void buttonIsr(void) { - buttonCnt++; - postEvent(BUTTON_HANDLER_ID); - BUTTON_ENABLE(); + if (BUTTON_FIRED()) + postEvent(BUTTON_HANDLER_ID); + BUTTON_DISABLE(); WAKEUP(); }