From 69768c97c060d1b6160e2abcd2fda9c63ce65a2d Mon Sep 17 00:00:00 2001 From: Torsten Wagner Date: Thu, 30 Jun 2016 11:11:56 +0200 Subject: [PATCH] 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. --- esp8266/espneopixel.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esp8266/espneopixel.c b/esp8266/espneopixel.c index 0f12f4c820..e16c874f23 100644 --- a/esp8266/espneopixel.c +++ b/esp8266/espneopixel.c @@ -41,6 +41,7 @@ void /*ICACHE_RAM_ATTR*/ esp_neopixel_write(uint8_t pin, uint8_t *pixels, uint32 } #endif + uint32_t irq_state = mp_hal_quiet_timing_enter(); for(t = time0;; t = time0) { if(pix & mask) t = time1; // Bit high duration 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 + mp_hal_quiet_timing_exit(irq_state); }