Lepsi zakazovani preruseni pro ESP32.
This commit is contained in:
parent
69a5b37616
commit
44de7d5d15
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
MIT License Copyright (c) <year> <copyright holders>
|
||||
MIT License Copyright (c) 2019,2020 xPablo.cz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -1,3 +1,5 @@
|
||||
# WSLed
|
||||
|
||||
WS2812 signalizační LED pro platformu ESP8266/ESP32
|
||||
WS2812 signalizační LED pro platformu ESP8266/ESP32.
|
||||
|
||||
Dvojí možnost časování - starší provedení vývodové LED 5mm - `NEOPIXEL_OLD_TIMING`, nebo novější časování, např. pro diody v pouzdru 2020.
|
||||
|
@ -43,12 +43,15 @@ inline uint32_t _getCycleCount()
|
||||
return ccount;
|
||||
}
|
||||
|
||||
//#define CYCLES_800_T0H (F_CPU / 2500000) // 0.4us
|
||||
//#define CYCLES_800_T1H (F_CPU / 1250000) // 0.8us
|
||||
//#define CYCLES_800 (F_CPU / 800000) // 1.25us per bit
|
||||
#define CYCLES_800_T0H (F_CPU / 2600000) // 0.4us
|
||||
#define CYCLES_800_T1H (F_CPU / 1350000) // 0.8us
|
||||
#define CYCLES_800 (F_CPU / 900000) // 1.25us per bit
|
||||
#if defined(NEOPIXEL_OLD_TIMING)
|
||||
# define CYCLES_800_T0H (F_CPU / 2500000) // 0.4us
|
||||
# define CYCLES_800_T1H (F_CPU / 1250000) // 0.8us
|
||||
# define CYCLES_800 (F_CPU / 800000) // 1.25us per bit
|
||||
#else
|
||||
# define CYCLES_800_T0H (F_CPU / 2600000) // 0.4us
|
||||
# define CYCLES_800_T1H (F_CPU / 1350000) // 0.8us
|
||||
# define CYCLES_800 (F_CPU / 900000) // 1.25us per bit
|
||||
#endif
|
||||
|
||||
void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixels, size_t count, uint8_t pin)
|
||||
{
|
||||
|
@ -1,5 +1,8 @@
|
||||
// Ovladani signalizacni chytre LED diody
|
||||
#include "wsLED.h"
|
||||
//#if defined(ARDUINO_ARCH_ESP32)
|
||||
//# include "esp_task.h"
|
||||
//#endif
|
||||
// due to linker overriding the ICACHE_RAM_ATTR for cpp files, these methods are
|
||||
// moved into a C file so the attribute will be applied correctly
|
||||
extern "C" void ICACHE_RAM_ATTR send_pixels_800(uint8_t* pixel, size_t count, uint8_t pin);
|
||||
@ -17,7 +20,7 @@ static const uint16_t LB[] PROGMEM = {
|
||||
inline bool wsLED::canShow(void)
|
||||
{
|
||||
|
||||
return (micros() - _endtime) >= 50L;
|
||||
return (micros() - _endtime) >= 70L;
|
||||
}
|
||||
|
||||
void wsLED::show(void)
|
||||
@ -32,17 +35,17 @@ void wsLED::show(void)
|
||||
while (!canShow())
|
||||
__asm__ volatile ("nop");
|
||||
#if defined(ARDUINO_ARCH_ESP32)
|
||||
uint32_t volatile register ilevel = XTOS_DISABLE_ALL_INTERRUPTS;
|
||||
// uint32_t volatile register ilevel = XTOS_DISABLE_ALL_INTERRUPTS;
|
||||
portENTER_CRITICAL(&_mux);
|
||||
#else
|
||||
noInterrupts();
|
||||
//cli();
|
||||
#endif
|
||||
send_pixels_800(color, 1, _pin);
|
||||
#if defined(ARDUINO_ARCH_ESP32)
|
||||
XTOS_RESTORE_INTLEVEL(ilevel);
|
||||
// XTOS_RESTORE_INTLEVEL(ilevel);
|
||||
portEXIT_CRITICAL(&_mux);
|
||||
#else
|
||||
interrupts();
|
||||
//sei();
|
||||
#endif
|
||||
_endtime = micros();
|
||||
}
|
||||
|
@ -135,6 +135,9 @@ protected:
|
||||
bool canShow(void);
|
||||
void show(void);
|
||||
void setColor(LEDRGB &color);
|
||||
#if defined(ARDUINO_ARCH_ESP32)
|
||||
portMUX_TYPE _mux = portMUX_INITIALIZER_UNLOCKED;
|
||||
#endif
|
||||
|
||||
public:
|
||||
wsLED(int pin, int order = RGB);
|
||||
|
Loading…
Reference in New Issue
Block a user