Skip to content
Permalink
Browse files

drivers: timer: nrf_rtc_timer: Fix set_comparator corner case

Update the logic in a corner case, when the target comparator value is
one cycle ahead of the counter value.

Experiments have shown, that `set_comparator(cyc + 1);` might be not
enough in that case, and we still may (rarely) miss the interrupt.
This could happen when the counter incremented its value after the `dt`
variable was set. As we should set the comparator value two cycles
ahead to be on the safe side, increment the target comparator value
by 2 instead of 1.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
  • Loading branch information...
rlubos authored and carlescufi committed Jul 29, 2019
1 parent e9cdcc2 commit 9f34d17cc1547c18494802e112b1f9146a18ca14
Showing with 1 addition and 1 deletion.
  1. +1 −1 drivers/timer/nrf_rtc_timer.c
@@ -166,7 +166,7 @@ void z_clock_set_timeout(s32_t ticks, bool idle)
}
} else if (dt == 1) {
/* Too soon, interrupt won't arrive. */
set_comparator(cyc + 1);
set_comparator(cyc + 2);
}
/* Otherwise it was two cycles out, we're fine */
}

0 comments on commit 9f34d17

Please sign in to comment.
You can’t perform that action at this time.