X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=Hal%2FHal.c;h=ef498ba6f3d0b36a463b8b23e6666815b925b979;hp=bb05cd4e1113913c4231649cabc5d6548dd4bbaf;hb=13db6cae32995a2f76fb4b4f1c5f40cea2470a55;hpb=ca5bd37eed3f758a3ecbf24f482c403b69a0141f diff --git a/Hal/Hal.c b/Hal/Hal.c index bb05cd4..ef498ba 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 @@ -90,8 +92,6 @@ #define TICK_HANDLER_ID 1 #define DISPATCH_HANDLER_ID 2 -int32_t buttonCnt = 0; - static void buttonHandler(void); static void postEvent(uint8_t handlerId); @@ -275,6 +275,11 @@ void Hal_tickStart(uint16_t msecs, Hal_Handler handler) { TA1CCTL0 = CCIE; // Enable the CCR0 interrupt } +void Hal_tickStop(void) { + handlerTab[TICK_HANDLER_ID] = 0; + TA1CCR0 = 0; + TA1CCTL0 = 0; +} /* -------- SRT-HAL INTERFACE -------- */ @@ -322,10 +327,11 @@ void Em_Hal_watchOn(void) { /* -------- INTERNAL FUNCTIONS -------- */ static void buttonHandler(void) { - Hal_delay(100); + Hal_delay(BUTTON_DEBOUNCE_MSECS); if (BUTTON_PRESSED() && appButtonHandler) { appButtonHandler(); } + BUTTON_ENABLE(); } static void postEvent(uint8_t handlerId) { @@ -343,9 +349,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(); }