__interrupt void ButtonPortIsr(void) { unsigned char ButtonInterruptFlags = BUTTON_PORT_IFG; unsigned char StartDebouncing = 0; for (unsigned char i = 0; i < NUMBER_OF_BUTTONS; i++) { /* if the button bit position is one then determine * if the button should be masked */ unsigned char temp = (ButtonInterruptFlags & (1<<i)) & ~GetAbsoluteButtonMask(i); if ( temp ) { if ( ButtonData[i].BtnState == BUTTON_STATE_OFF ) { ButtonData[i].BtnState = BUTTON_STATE_DEBOUNCE; } StartDebouncing = 1; } } BUTTON_PORT_IFG = 0; if(StartDebouncing) { RouteCommandFromIsr(ButtonDebounce); EXIT_LPM_ISR(); } }
__interrupt void RTC_ISR(void) { unsigned char ExitLpm = 0; // compiler intrinsic, value must be even, and in the range of 0 to 10 switch(__even_in_range(RTCIV,0xa)) { case RTC_NO_INTERRUPT: break; case RTC_RDY_IFG: break; case RTC_EV_IFG: break; case RTC_A_IFG: break; case RTC_PRESCALE_ZERO_IFG: // 128Hz ExitLpm |= Timer_Interrupt(1); break; case RTC_PRESCALE_ONE_IFG: // 1Hz ExitLpm |= Timer_Interrupt(0); break; default: break; } if ( ExitLpm ) { EXIT_LPM_ISR(); } }
__interrupt void isrAnalogToDigital(void) { ADC12IV = 0; // We should only ever get an expected interrupt if (HandleResult(currentRequest)) { EXIT_LPM_ISR(); } currentRequest++; if (currentRequest >= MAX_REQUESTS) currentRequest = 0; Launch(currentRequest); }
__interrupt void DebugUartIsr(void) #endif { unsigned char ExitLpm = 0; // Vector 2 - RXIFG; Vector 4 - TXIFG switch (__even_in_range(UCA3IV, 4)) { case 2: ExitLpm = TermModeIsr(); default: break; } if (ExitLpm) EXIT_LPM_ISR(); }
__interrupt void RTC_ISR(void) { unsigned char ExitLpm = 0; tMessage Msg; // compiler intrinsic, value must be even, and in the range of 0 to 10 switch(__even_in_range(RTCIV,10)) { case RTC_NO_INTERRUPT: break; case RTC_RDY_IFG: break; case RTC_EV_IFG: break; case RTC_A_IFG: break; case RTC_PRESCALE_ZERO_IFG: // divide by four to get 32 Hz if (DivideByFour >= 4-1) { DivideByFour = 0; if (RtcInUseMask & RTC_TIMER_VIBRATION) VibrationMotorStateMachineIsr(); if (RtcInUseMask & RTC_TIMER_BUTTON) { SetupMessage(&Msg, ButtonStateMsg, MSG_OPT_NONE); SendMessageToQueueFromIsr(DISPLAY_QINDEX, &Msg); ExitLpm = 1; } } else { DivideByFour ++; } break; case RTC_PRESCALE_ONE_IFG: #ifdef DIGITAL ExitLpm |= LcdRtcUpdateHandlerIsr(); #endif ExitLpm |= OneSecondTimerHandlerIsr(); break; default: break; } if (ExitLpm) EXIT_LPM_ISR(); }
__interrupt void TIMER0_B0_ISR(void) { NumberOfFastPulses--; if(0 == NumberOfFastPulses) { // Disable timer B0 interupts TB0CCTL0 &=~ CCIE; // Restore normal divider TB0CCR0 = ( ANALOG_DISP_TIMER_DIVIDER - 1); } // Exit LPM3 on interrupt exit (RETI). EXIT_LPM_ISR(); }
__interrupt void TIMER0_A1_VECTOR_ISR(void) { unsigned char ExitLpm = 0; /* callback when timer expires */ switch(__even_in_range(TA0IV,0xE)) { case 0: break; case 2: ExitLpm = pCrystalCallback1(); RemoveUser(1); break; case 4: ExitLpm = pCrystalCallback2(); RemoveUser(2); break; case 6: ExitLpm = pCrystalCallback3(); RemoveUser(3); break; case 8: ExitLpm = pCrystalCallback4(); RemoveUser(4); break; default: break; } if ( ExitLpm ) { EXIT_LPM_ISR(); } }
__interrupt void DebugUartIsr(void) #endif { unsigned char ExitLpm = 0; switch(__even_in_range(UCA3IV,4)) { case 0:break; // Vector 0 - no interrupt case 2: // Vector 2 - RXIFG ExitLpm = RxTestModeCharacterIsr(UCA3RXBUF); break; case 4:break; // Vector 4 - TXIFG default: break; } if ( ExitLpm ) { EXIT_LPM_ISR(); } }
__interrupt void isrDMA(void) { int index; switch (__even_in_range(DMAIV, 16)) { case DMAIV_DMA0IFG: index = 0; break; case DMAIV_DMA1IFG: index = 1; break; case DMAIV_DMA2IFG: index = 2; break; default: return; // Don't continue } if (dmaCallbacks[index](index)) { EXIT_LPM_ISR(); } }
__interrupt void TIMER0_A1_VECTOR_ISR(void) { unsigned char ExitLpm = 0; /* callback when timer expires */ switch(__even_in_range(TA0IV,8)) { /* remove the user first in case the callback is re-enabling this user */ case 0: break; case 2: RemoveUser(1); ExitLpm = pCrystalCallback1(); break; case 4: RemoveUser(2); ExitLpm = pCrystalCallback2(); break; case 6: RemoveUser(3); ExitLpm = pCrystalCallback3(); break; case 8: RemoveUser(4); ExitLpm = pCrystalCallback4(); break; default: break; } if ( ExitLpm ) { EXIT_LPM_ISR(); } }