diff --git a/cpu/sam0_common/periph/rtc.c b/cpu/sam0_common/periph/rtc.c index ca316d6db2..a407c32969 100644 --- a/cpu/sam0_common/periph/rtc.c +++ b/cpu/sam0_common/periph/rtc.c @@ -52,6 +52,14 @@ static void _wait_syncbusy(void) #endif } +static void _rtt_read_req(void) +{ +#ifdef RTC_READREQ_RREQ + RTC->MODE0.READREQ.reg = RTC_READREQ_RREQ; + _wait_syncbusy(); +#endif +} + static inline void _rtc_set_enabled(bool on) { #ifdef REG_RTC_MODE2_CTRLA @@ -145,6 +153,7 @@ int rtc_get_time(struct tm *time) RTC_MODE2_CLOCK_Type clock; /* Read register in one time */ + _rtt_read_req(); clock.reg = RTC->MODE2.CLOCK.reg; time->tm_year = clock.bit.YEAR + reference_year; diff --git a/cpu/sam0_common/periph/rtt.c b/cpu/sam0_common/periph/rtt.c index 9b32eca4bd..43783d5caf 100644 --- a/cpu/sam0_common/periph/rtt.c +++ b/cpu/sam0_common/periph/rtt.c @@ -61,6 +61,14 @@ static void _wait_syncbusy(void) #endif } +static void _rtt_read_req(void) +{ +#ifdef RTC_READREQ_RREQ + RTC->MODE0.READREQ.reg = RTC_READREQ_RREQ; + _wait_syncbusy(); +#endif +} + static inline void _rtt_reset(void) { #ifdef RTC_MODE0_CTRL_SWRST @@ -150,6 +158,7 @@ void rtt_clear_overflow_cb(void) uint32_t rtt_get_counter(void) { _wait_syncbusy(); + _rtt_read_req(); return RTC->MODE0.COUNT.reg; }