From 8a4663e3e3b6dfc42f1bcf1b2ac28d46f3559d88 Mon Sep 17 00:00:00 2001 From: Vojtech Bocek Date: Mon, 25 Nov 2024 19:37:17 +0100 Subject: [PATCH 1/3] fix: DMA channel picking on S3 --- src/SmartLeds.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/SmartLeds.h b/src/SmartLeds.h index 262b071..d7294fd 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 { @@ -247,7 +249,7 @@ class Apa102 { 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 +377,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); From 4c21e758bab39261ff9f5d97ba9354dc705a9a31 Mon Sep 17 00:00:00 2001 From: Vojtech Bocek Date: Mon, 25 Nov 2024 20:37:22 +0100 Subject: [PATCH 2/3] fix: make Apa102 clock speed configurable --- src/SmartLeds.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SmartLeds.h b/src/SmartLeds.h index d7294fd..f8cf3ce 100644 --- a/src/SmartLeds.h +++ b/src/SmartLeds.h @@ -227,7 +227,7 @@ 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) @@ -243,7 +243,7 @@ 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; From 088fcb987014128a42da180cf625657228f038f0 Mon Sep 17 00:00:00 2001 From: Vojtech Bocek Date: Mon, 25 Nov 2024 22:08:02 +0100 Subject: [PATCH 3/3] fix: init _transCount in Apa102 --- src/SmartLeds.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SmartLeds.h b/src/SmartLeds.h index f8cf3ce..d4c9571 100644 --- a/src/SmartLeds.h +++ b/src/SmartLeds.h @@ -231,6 +231,7 @@ class Apa102 { : _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));