diff --git a/pycardium/mphalport.c b/pycardium/mphalport.c index c4ba6bdb1874a890350ccc8b7df57f6167d55f83..ab3e0857c7d132f67c4c9b5f08530f06563d9a3d 100644 --- a/pycardium/mphalport.c +++ b/pycardium/mphalport.c @@ -166,13 +166,16 @@ void SysTick_Handler(void) static uint64_t systick_get_us() { uint32_t val, count; + uint32_t irqsaved = __get_PRIMASK(); /* The asynchronous/slow clocking of the systick means that * its value can jump to 0 before the interrupt is triggered. * Simply wait until it is not 0 and then read the count. */ do { + __set_PRIMASK(0); val = SysTick->VAL; count = systick_count; + __set_PRIMASK(irqsaved); } while (val == 0); uint64_t us = count * SYSTICK_INTERVAL_US +