diff --git a/cpu/kinetis_common/periph/rtt.c b/cpu/kinetis_common/periph/rtt.c index 80e1a2ea0a04b6f19f4f2937c3d9635a8c9a97b8..5fdbed8df69987831f2015bbc3fd4aa5ebba701b 100644 --- a/cpu/kinetis_common/periph/rtt.c +++ b/cpu/kinetis_common/periph/rtt.c @@ -126,12 +126,15 @@ void rtt_set_counter(uint32_t counter) void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg) { + /* The alarm is triggered when TSR matches TAR, and TSR increments. This + * seem counterintuitive as most users expect the alarm to trigger + * immediately when the counter becomes equal to the alarm time. */ RTC_Type *rtt = RTT_DEV; /* Disable Timer Alarm Interrupt */ rtt->IER &= ~(RTC_IER_TAIE_MASK); - rtt->TAR = alarm; + rtt->TAR = alarm - 1; rtt_callback.alarm_cb = cb; rtt_callback.alarm_arg = arg; @@ -147,7 +150,7 @@ void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg) uint32_t rtt_get_alarm(void) { RTC_Type *rtt = RTT_DEV; - return rtt->TAR; + return rtt->TAR + 1; } void rtt_clear_alarm(void)