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)