esp8266/espneopixel: Disable IRQs during eps.neopixel_write.
Interrupts during neopixel_write causes timing problems and therefore wrong light patterns. Switching off IRQs should help to keep the strict timing schedule.
This commit is contained in:
parent
e4d6a10dc9
commit
69768c97c0
|
@ -41,6 +41,7 @@ void /*ICACHE_RAM_ATTR*/ esp_neopixel_write(uint8_t pin, uint8_t *pixels, uint32
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
uint32_t irq_state = mp_hal_quiet_timing_enter();
|
||||||
for(t = time0;; t = time0) {
|
for(t = time0;; t = time0) {
|
||||||
if(pix & mask) t = time1; // Bit high duration
|
if(pix & mask) t = time1; // Bit high duration
|
||||||
while(((c = mp_hal_ticks_cpu()) - startTime) < period); // Wait for bit start
|
while(((c = mp_hal_ticks_cpu()) - startTime) < period); // Wait for bit start
|
||||||
|
@ -55,4 +56,5 @@ void /*ICACHE_RAM_ATTR*/ esp_neopixel_write(uint8_t pin, uint8_t *pixels, uint32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while((mp_hal_ticks_cpu() - startTime) < period); // Wait for last bit
|
while((mp_hal_ticks_cpu() - startTime) < period); // Wait for last bit
|
||||||
|
mp_hal_quiet_timing_exit(irq_state);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue