diff options
| author | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-11-01 11:56:54 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-11-01 11:56:54 -0700 |
| commit | a8dae22ae9373c3d026a6b1bc953dec201c7185d (patch) | |
| tree | b418f8ea2334604a2ec88611451b9a6075b236b2 | |
| parent | 3b179808224bceaf40ffd1da0a6295c2d0f3e970 (diff) | |
atmel-samd: Fix the neopixel delay method so it handles overflow better.
| -rw-r--r-- | ports/atmel-samd/common-hal/neopixel_write/__init__.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/ports/atmel-samd/common-hal/neopixel_write/__init__.c b/ports/atmel-samd/common-hal/neopixel_write/__init__.c index fbe7a2ff6..d9f7da6a8 100644 --- a/ports/atmel-samd/common-hal/neopixel_write/__init__.c +++ b/ports/atmel-samd/common-hal/neopixel_write/__init__.c @@ -37,8 +37,12 @@ static inline void delay_cycles(uint8_t cycles) { uint32_t stop = start - cycles; if (start < cycles) { stop = 0xffffff + start - cycles; + while (SysTick->VAL < start || SysTick->VAL > stop) {} + } else { + // Make sure the systick value is between start and stop in case it + // wraps around before we read its value less than stop. + while (SysTick->VAL > stop && SysTick->VAL <= start) {} } - while (SysTick->VAL > stop) {} } #endif |
