Skip to content

Commit 830a22e

Browse files
nordic-krchkartben
authored andcommitted
tests: drivers: timer: nrf_grtc: Fix test_get_ticks
Test was occasionally failing when two types of current time reading occurred at different system tick. In that case they were of by one system tick and test was failing. Signed-off-by: Krzysztof Chruściński <[email protected]>
1 parent d5d4d57 commit 830a22e

File tree

1 file changed

+23
-4
lines changed
  • tests/drivers/timer/nrf_grtc_timer/src

1 file changed

+23
-4
lines changed

tests/drivers/timer/nrf_grtc_timer/src/main.c

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,37 @@ ZTEST(nrf_grtc_timer, test_get_ticks)
4040

4141
for (uint32_t i = 0; i < NUMBER_OF_TRIES; i++) {
4242
/* Absolute timeout 1ms in the past */
43-
t = Z_TIMEOUT_TICKS(Z_TICK_ABS(sys_clock_tick_get() - K_MSEC(1).ticks));
43+
uint64_t curr_tick;
44+
uint64_t curr_grtc_tick;
45+
uint64_t curr_tick2;
4446

45-
exp_ticks = z_nrf_grtc_timer_read() - K_MSEC(1).ticks * CYC_PER_TICK;
47+
do {
48+
/* GRTC and system tick must be read during single system tick. */
49+
curr_tick = sys_clock_tick_get();
50+
curr_grtc_tick = z_nrf_grtc_timer_read();
51+
curr_tick2 = sys_clock_tick_get();
52+
} while (curr_tick != curr_tick2);
53+
54+
t = Z_TIMEOUT_TICKS(Z_TICK_ABS(curr_tick - K_MSEC(1).ticks));
55+
56+
exp_ticks = curr_grtc_tick - K_MSEC(1).ticks * CYC_PER_TICK;
4657
ticks = z_nrf_grtc_timer_get_ticks(t);
58+
4759
zassert_true((ticks >= (exp_ticks - CYC_PER_TICK + 1)) &&
4860
(ticks <= (exp_ticks + GRTC_SLEW_TICKS)),
4961
"Unexpected result %" PRId64 " (expected: %" PRId64 ")", ticks,
5062
exp_ticks);
5163

5264
/* Absolute timeout 10ms in the future */
53-
t = Z_TIMEOUT_TICKS(Z_TICK_ABS(sys_clock_tick_get() + K_MSEC(10).ticks));
54-
exp_ticks = z_nrf_grtc_timer_read() + K_MSEC(10).ticks * CYC_PER_TICK;
65+
do {
66+
/* GRTC and system tick must be read during single system tick. */
67+
curr_tick = sys_clock_tick_get();
68+
curr_grtc_tick = z_nrf_grtc_timer_read();
69+
curr_tick2 = sys_clock_tick_get();
70+
} while (curr_tick != curr_tick2);
71+
72+
t = Z_TIMEOUT_TICKS(Z_TICK_ABS(curr_tick + K_MSEC(10).ticks));
73+
exp_ticks = curr_grtc_tick + K_MSEC(10).ticks * CYC_PER_TICK;
5574
ticks = z_nrf_grtc_timer_get_ticks(t);
5675
zassert_true((ticks >= (exp_ticks - CYC_PER_TICK + 1)) &&
5776
(ticks <= (exp_ticks + GRTC_SLEW_TICKS)),

0 commit comments

Comments
 (0)