atmel-samd: Fix the neopixel delay method so it handles overflow better.

This commit is contained in:
Scott Shawcroft 2017-11-01 11:56:54 -07:00
parent 3b17980822
commit a8dae22ae9

View File

@ -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