From 0d60b3370a444ada5b57253dcd25046a65cf6bbc Mon Sep 17 00:00:00 2001 From: Francisco Molina Date: Tue, 18 Aug 2020 13:41:23 +0200 Subject: [PATCH 1/2] cpu/stm32/f1/rtt: some fixes to rtt_set_alarm - disable alarm before setting a new one - save cb and argument context before enabling the ISR --- cpu/stm32/periph/rtt_f1.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cpu/stm32/periph/rtt_f1.c b/cpu/stm32/periph/rtt_f1.c index 36b24515d6..ddfd1a72bb 100644 --- a/cpu/stm32/periph/rtt_f1.c +++ b/cpu/stm32/periph/rtt_f1.c @@ -123,6 +123,12 @@ void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg) { _rtt_enter_config_mode(); + /* Disable alarm*/ + RTT_DEV->CRH &= ~RTC_CRH_ALRIE; + /* Save new cb and argument */ + alarm_cb = cb; + alarm_arg = arg; + /* Set the alarm MSB word */ RTT_DEV->ALRH = alarm >> 16; /* Set the alarm LSB word */ @@ -132,9 +138,6 @@ void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg) RTT_DEV->CRH |= RTC_CRH_ALRIE; _rtt_leave_config_mode(); - - alarm_cb = cb; - alarm_arg = arg; } void rtt_clear_alarm(void) From 14d4d2aacbbd64c3a4958d5f1207e0f426b186b1 Mon Sep 17 00:00:00 2001 From: Francisco Molina Date: Tue, 18 Aug 2020 13:42:51 +0200 Subject: [PATCH 2/2] cpu/stm32/f1/rtt: don't trigger callbacks if unset --- cpu/stm32/periph/rtt_f1.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cpu/stm32/periph/rtt_f1.c b/cpu/stm32/periph/rtt_f1.c index ddfd1a72bb..31cd563b69 100644 --- a/cpu/stm32/periph/rtt_f1.c +++ b/cpu/stm32/periph/rtt_f1.c @@ -192,11 +192,15 @@ void RTT_ISR(void) { if (RTT_DEV->CRL & RTC_CRL_ALRF) { RTT_DEV->CRL &= ~(RTC_CRL_ALRF); - alarm_cb(alarm_arg); + if (alarm_cb) { + alarm_cb(alarm_arg); + } } if (RTT_DEV->CRL & RTC_CRL_OWF) { RTT_DEV->CRL &= ~(RTC_CRL_OWF); - overflow_cb(overflow_arg); + if (overflow_cb) { + overflow_cb(overflow_arg); + } } cortexm_isr_end(); }