diff --git a/src/SmartLeds.h b/src/SmartLeds.h index 262b071..d4c9571 100644 --- a/src/SmartLeds.h +++ b/src/SmartLeds.h @@ -194,8 +194,10 @@ class SmartLed { #if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) #define _SMARTLEDS_SPI_HOST SPI2_HOST +#define _SMARTLEDS_SPI_DMA_CHAN SPI_DMA_CH_AUTO #else #define _SMARTLEDS_SPI_HOST HSPI_HOST +#define _SMARTLEDS_SPI_DMA_CHAN 1 #endif class Apa102 { @@ -225,10 +227,11 @@ class Apa102 { static const int FINAL_FRAME_SIZE = 4; static const int TRANS_COUNT = 2 + 8; - Apa102(int count, int clkpin, int datapin, BufferType doubleBuffer = SingleBuffer) + Apa102(int count, int clkpin, int datapin, BufferType doubleBuffer = SingleBuffer, int clock_speed_hz = 1000000) : _count(count) , _firstBuffer(new ApaRgb[count]) , _secondBuffer(doubleBuffer ? new ApaRgb[count] : nullptr) + , _transCount(0) , _initFrame(0) { spi_bus_config_t buscfg; memset(&buscfg, 0, sizeof(buscfg)); @@ -241,13 +244,13 @@ class Apa102 { spi_device_interface_config_t devcfg; memset(&devcfg, 0, sizeof(devcfg)); - devcfg.clock_speed_hz = 1000000; + devcfg.clock_speed_hz = clock_speed_hz; devcfg.mode = 0; devcfg.spics_io_num = -1; devcfg.queue_size = TRANS_COUNT; devcfg.pre_cb = nullptr; - auto ret = spi_bus_initialize(_SMARTLEDS_SPI_HOST, &buscfg, 1); + auto ret = spi_bus_initialize(_SMARTLEDS_SPI_HOST, &buscfg, _SMARTLEDS_SPI_DMA_CHAN); assert(ret == ESP_OK); ret = spi_bus_add_device(_SMARTLEDS_SPI_HOST, &devcfg, &_spi); @@ -375,7 +378,7 @@ class LDP8806 { devcfg.queue_size = TRANS_COUNT_MAX; devcfg.pre_cb = nullptr; - auto ret = spi_bus_initialize(_SMARTLEDS_SPI_HOST, &buscfg, 1); + auto ret = spi_bus_initialize(_SMARTLEDS_SPI_HOST, &buscfg, _SMARTLEDS_SPI_DMA_CHAN); assert(ret == ESP_OK); ret = spi_bus_add_device(_SMARTLEDS_SPI_HOST, &devcfg, &_spi);