/* Private RTC IRQ handlers */ void RTC_WKUP_IRQHandler(void) { /* Check for RTC interrupt */ if (__HAL_RTC_WAKEUPTIMER_GET_IT(&hRTC, RTC_IT_WUT) != RESET) { /* Call user function */ TM_RTC_WakeupHandler(); /* Clear interrupt flags */ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hRTC, RTC_FLAG_WUTF); } /* Clear EXTI line 22 bit */ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); }
TM_RTC_Result_t TM_RTC_Interrupts(TM_RTC_Int_t int_value) { uint32_t int_val; /* Disable wakeup interrupt */ __HAL_RTC_WAKEUPTIMER_DISABLE(&hRTC); /* Disable RTC interrupt flag */ __HAL_RTC_WAKEUPTIMER_DISABLE_IT(&hRTC, RTC_IT_WUT); /* Clear pending bit */ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /* Clear flag */ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hRTC, RTC_FLAG_WUTF); /* If enable again */ if (int_value != TM_RTC_Int_Disable) { if (int_value == TM_RTC_Int_60s) { int_val = 0x3BFFF; /* 60 seconds = 60 * 4096 / 1 = 245760 */ } else if (int_value == TM_RTC_Int_30s) { int_val = 0x1DFFF; /* 30 seconds */ } else if (int_value == TM_RTC_Int_15s) { int_val = 0xEFFF; /* 15 seconds */ } else if (int_value == TM_RTC_Int_10s) { int_val = 0x9FFF; /* 10 seconds */ } else if (int_value == TM_RTC_Int_5s) { int_val = 0x4FFF; /* 5 seconds */ } else if (int_value == TM_RTC_Int_2s) { int_val = 0x1FFF; /* 2 seconds */ } else if (int_value == TM_RTC_Int_1s) { int_val = 0x0FFF; /* 1 second */ } else if (int_value == TM_RTC_Int_500ms) { int_val = 0x7FF; /* 500 ms */ } else if (int_value == TM_RTC_Int_250ms) { int_val = 0x3FF; /* 250 ms */ } else if (int_value == TM_RTC_Int_125ms) { int_val = 0x1FF; /* 125 ms */ } /* Clock divided by 8, 32768 / 8 = 4096 */ /* 4096 ticks for 1second interrupt */ HAL_RTCEx_SetWakeUpTimer_IT(&hRTC, int_val, RTC_WAKEUPCLOCK_RTCCLK_DIV8); /* Set NVIC */ HAL_NVIC_SetPriority(RTC_WKUP_IRQn, RTC_NVIC_PRIORITY, RTC_NVIC_WAKEUP_SUBPRIORITY); HAL_NVIC_EnableIRQ(RTC_WKUP_IRQn); } /* Return OK */ return TM_RTC_Result_Ok; }
/** * @brief This function handles Wake Up Timer interrupt request. * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains * the configuration information for RTC. * @retval None */ void HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc) { if(__HAL_RTC_WAKEUPTIMER_GET_IT(hrtc, RTC_IT_WUT)) { /* Get the status of the Interrupt */ if((uint32_t)(hrtc->Instance->CR & RTC_IT_WUT) != (uint32_t)RESET) { /* WAKEUPTIMER callback */ HAL_RTCEx_WakeUpTimerEventCallback(hrtc); /* Clear the WAKEUPTIMER interrupt pending bit */ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF); } } /* Clear the EXTI's line Flag for RTC WakeUpTimer */ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /* Change RTC state */ hrtc->State = HAL_RTC_STATE_READY; }
/** * @brief Handle Wake Up Timer interrupt request. * @param hrtc: RTC handle * @retval None */ void HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc) { /* Get the WAKEUPTIMER interrupt source enable status */ if(__HAL_RTC_WAKEUPTIMER_GET_IT_SOURCE(hrtc, RTC_IT_WUT) != RESET) { /* Get the pending status of the WAKEUPTIMER Interrupt */ if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTF) != RESET) { /* WAKEUPTIMER callback */ HAL_RTCEx_WakeUpTimerEventCallback(hrtc); /* Clear the WAKEUPTIMER interrupt pending bit */ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF); } } /* Clear the EXTI's line Flag for RTC WakeUpTimer */ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /* Change RTC state */ hrtc->State = HAL_RTC_STATE_READY; }