Merge pull request #394 from tannewt/neopixel_delay_fix
atmel-samd: Fix the neopixel delay method so it handles overflow better.
This commit is contained in:
commit
dcede575ff
|
@ -37,8 +37,12 @@ static inline void delay_cycles(uint8_t cycles) {
|
||||||
uint32_t stop = start - cycles;
|
uint32_t stop = start - cycles;
|
||||||
if (start < cycles) {
|
if (start < cycles) {
|
||||||
stop = 0xffffff + 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
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue