diff --git a/tests/periph_timer_short_relative_set/Makefile b/tests/periph_timer_short_relative_set/Makefile index 6978deae0d..1068a95143 100644 --- a/tests/periph_timer_short_relative_set/Makefile +++ b/tests/periph_timer_short_relative_set/Makefile @@ -8,8 +8,9 @@ USEMODULE += core_thread_flags # TEST_TIMER_DEV takes a 0-based index to the periph_timer instance defined in # the board's periph_conf.h. TEST_TIMER_FREQ as an integer number which will # be used as "freq" parameter in the timer_init() call. +# TEST_TIMER_WIDTH defines the timer width in number of bits. # Note: not all implementations support arbitrary frequencies. -#CFLAGS += -DTEST_TIMER_DEV=foo -DTEST_TIMER_FREQ=bar +#CFLAGS += -DTEST_TIMER_DEV=foo -DTEST_TIMER_FREQ=bar -DTEST_TIMER_WIDTH=n # this test currently fails all CI boards and native TEST_ON_CI_BLACKLIST += all diff --git a/tests/periph_timer_short_relative_set/main.c b/tests/periph_timer_short_relative_set/main.c index a45d413b93..0c67999128 100644 --- a/tests/periph_timer_short_relative_set/main.c +++ b/tests/periph_timer_short_relative_set/main.c @@ -32,6 +32,7 @@ # include "xtimer.h" # define TEST_TIMER_DEV XTIMER_DEV # define TEST_TIMER_FREQ XTIMER_HZ +# define TEST_TIMER_WIDTH XTIMER_WIDTH #else # ifndef TEST_TIMER_FREQ # define TEST_TIMER_FREQ (1000000LU) @@ -42,6 +43,12 @@ #define TEST_MAX_DIFF (1000LU) #endif +#if TEST_TIMER_WIDTH == 32 +# define TEST_TIMER_MAX (0xFFFFFFFFLU) +#else +# define TEST_TIMER_MAX ((1UL << TEST_TIMER_WIDTH) - 1) +#endif + static void cb(void *arg, int chan) { (void)chan; @@ -65,7 +72,8 @@ int main(void) uint32_t before = timer_read(TEST_TIMER_DEV); timer_set(TEST_TIMER_DEV, 0, interval); while(!thread_flags_clear(1)) { - uint32_t diff = timer_read(TEST_TIMER_DEV) - before; + uint32_t diff = (timer_read(TEST_TIMER_DEV) - before) + & TEST_TIMER_MAX; if (diff > TEST_MAX_DIFF) { printf("ERROR: too long delay, aborted after %" PRIu32 " (TEST_MAX_DIFF=%lu)\n"