Beispiel #1
0
void TIMER_ISR(void) {
	uint16_t itEnable = TIMER_TIM->DIER;
    uint16_t itStatus = TIMER_TIM->SR;

    if ((itEnable & TIM_IT_CC1) != RESET && (itStatus & TIM_IT_CC1) != RESET) {
		TIMER_TIM->SR = (uint16_t)~TIM_IT_CC1;

		// Disable the Interrupt
		TIMER_TIM->DIER &= (uint16_t)~TIM_IT_CC1;

		timerData.alarm1Callback(timerData.alarm1Parameter);
    }
    else if ((itEnable & TIM_IT_CC2) != RESET && (itStatus & TIM_IT_CC2) != RESET) {
		TIMER_TIM->SR = (uint16_t)~TIM_IT_CC2;

		// Disable the Interrupt
		TIMER_TIM->DIER &= (uint16_t)~TIM_IT_CC2;

		timerData.alarm2Callback(timerData.alarm2Parameter);
    }
    else if ((itEnable & TIM_IT_CC3) != RESET && (itStatus & TIM_IT_CC3) != RESET) {
		TIMER_TIM->SR = (uint16_t)~TIM_IT_CC3;

		// Disable the Interrupt
		TIMER_TIM->DIER &= (uint16_t)~TIM_IT_CC3;

		timerData.alarm3Callback(timerData.alarm3Parameter);
	}
    // CC4 is used for RTC calibration at startup
    else if ((itEnable & TIM_IT_CC4) != RESET && (itStatus & TIM_IT_CC4) != RESET) {
		TIMER_TIM->SR = (uint16_t)~TIM_IT_CC4;

        if (timerData.alarm4Callback) {
			// Disable the Interrupt
			TIMER_TIM->DIER &= (uint16_t)~TIM_IT_CC4;

			timerData.alarm4Callback(timerData.alarm4Parameter);
		}
        else {
            // Get the Input Capture value
            rtcData.captureLSI[rtcData.captureNumber++] = TIM_GetCapture4(TIMER_TIM);
		}
    }
}