diff --git a/ports/stm32/stm32_it.c b/ports/stm32/stm32_it.c index 88e7f5bfec..0f2be4c68d 100644 --- a/ports/stm32/stm32_it.c +++ b/ports/stm32/stm32_it.c @@ -509,8 +509,18 @@ void RTC_WKUP_IRQHandler(void) { void RTC_IRQHandler(void) { IRQ_ENTER(RTC_IRQn); - RTC->ISR &= ~RTC_ISR_WUTF; // clear wakeup interrupt flag - Handle_EXTI_Irq(EXTI_RTC_WAKEUP); // clear EXTI flag and execute optional callback + if (RTC->ISR & RTC_ISR_WUTF) { + RTC->ISR &= ~RTC_ISR_WUTF; // clear wakeup interrupt flag + Handle_EXTI_Irq(EXTI_RTC_WAKEUP); // clear EXTI flag and execute optional callback + } + if (RTC->ISR & RTC_ISR_ALRAF) { + RTC->ISR &= ~RTC_ISR_ALRAF; // clear Alarm A flag + Handle_EXTI_Irq(EXTI_RTC_ALARM); // clear EXTI flag and execute optional callback + } + if (RTC->ISR & RTC_ISR_TSF) { + RTC->ISR &= ~RTC_ISR_TSF; // clear timestamp flag + Handle_EXTI_Irq(EXTI_RTC_TIMESTAMP); // clear EXTI flag and execute optional callback + } IRQ_EXIT(RTC_IRQn); }