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:
Torsten Wagner 2016-06-30 11:11:56 +02:00 committed by Damien George
parent e4d6a10dc9
commit 69768c97c0
1 changed files with 2 additions and 0 deletions

View File

@ -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);
} }