diff --git a/sys/xtimer/xtimer_core.c b/sys/xtimer/xtimer_core.c index 36879167ed..9bc739a098 100644 --- a/sys/xtimer/xtimer_core.c +++ b/sys/xtimer/xtimer_core.c @@ -26,6 +26,8 @@ #define ENABLE_DEBUG 0 #include "debug.h" +static volatile int _in_handler = 0; + static volatile uint32_t _long_cnt = 0; #if XTIMER_MASK volatile uint32_t _high_cnt = 0; @@ -146,6 +148,9 @@ static void _shoot(xtimer_t *timer) static inline void _lltimer_set(uint32_t target) { + if (_in_handler) { + return; + } DEBUG("__lltimer_set(): setting %" PRIu32 "\n", _mask(target)); #ifdef XTIMER_SHIFT target >>= XTIMER_SHIFT; @@ -420,6 +425,8 @@ static void _timer_callback(void) uint32_t next_target; uint32_t reference; + _in_handler = 1; + DEBUG("_timer_callback() now=%" PRIu32 " (%" PRIu32 ")pleft=%" PRIu32 "\n", xtimer_now(), _mask(xtimer_now()), _mask(0xffffffff-xtimer_now())); @@ -505,6 +512,8 @@ overflow: } } + _in_handler = 0; + /* set low level timer */ _lltimer_set(next_target); }