Skip to content
Snippets Groups Projects
Commit e524d839 authored by schneider's avatar schneider
Browse files

fix(pycardium): Fix potential race when systick counts from 1 to 0

parent a80eb9a4
No related branches found
No related tags found
1 merge request!475change(pycardium): Switch systick to 32 kHz clock source
Pipeline #5252 passed
...@@ -166,13 +166,16 @@ void SysTick_Handler(void) ...@@ -166,13 +166,16 @@ void SysTick_Handler(void)
static uint64_t systick_get_us() static uint64_t systick_get_us()
{ {
uint32_t val, count; uint32_t val, count;
uint32_t irqsaved = __get_PRIMASK();
/* The asynchronous/slow clocking of the systick means that /* The asynchronous/slow clocking of the systick means that
* its value can jump to 0 before the interrupt is triggered. * its value can jump to 0 before the interrupt is triggered.
* Simply wait until it is not 0 and then read the count. */ * Simply wait until it is not 0 and then read the count. */
do { do {
__set_PRIMASK(0);
val = SysTick->VAL; val = SysTick->VAL;
count = systick_count; count = systick_count;
__set_PRIMASK(irqsaved);
} while (val == 0); } while (val == 0);
uint64_t us = count * SYSTICK_INTERVAL_US + uint64_t us = count * SYSTICK_INTERVAL_US +
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment