From 22ba4161b5dae6bcd88427b7f555e9ed2e7d9574 Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Thu, 16 Dec 2021 13:36:23 +0100 Subject: [PATCH 1/6] fix spi names --- .gitignore | 4 ++++ lvgl_helpers.c | 37 +++++++------------------------------ lvgl_spi_conf.h | 16 ++++++---------- lvgl_tft/Kconfig | 5 +---- lvgl_touch/Kconfig | 27 ++++++++++++--------------- 5 files changed, 30 insertions(+), 59 deletions(-) diff --git a/.gitignore b/.gitignore index 38eeab7..c2ff946 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,7 @@ dkms.conf # ESP-IDF build dir build + +# Kconfig files +sdkconfig +sdkconfig.old diff --git a/lvgl_helpers.c b/lvgl_helpers.c index edc522f..f65cce5 100644 --- a/lvgl_helpers.c +++ b/lvgl_helpers.c @@ -154,34 +154,12 @@ bool lvgl_spi_driver_init(int host, int dma_channel, int quadwp_pin, int quadhd_pin) { - int dma_chan = 0 /* SPI_DMA_DISABLED */; - -#if defined (CONFIG_IDF_TARGET_ESP32) - assert((SPI_HOST <= host) && (VSPI_HOST >= host)); - const char *spi_names[] = { - "SPI_HOST", "HSPI_HOST", "VSPI_HOST" - }; - - dma_chan = dma_channel; -#elif defined (CONFIG_IDF_TARGET_ESP32S2) - assert((SPI_HOST <= host) && (HSPI_HOST >= host)); - const char *spi_names[] = { - "SPI_HOST", "", "" - }; - - dma_chan = dma_channel; -#elif defined (CONFIG_IDF_TARGET_ESP32C3) - assert((SPI1_HOST <= host) && (SPI3_HOST >= host)); + assert((0 <= host) && (SPI_HOST_MAX > host)); const char *spi_names[] = { "SPI1_HOST", "SPI2_HOST", "SPI3_HOST" }; - dma_chan = 3 /* SPI_DMA_CH_AUTO */; -#else -#error "Target chip not selected" -#endif - - ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host); + ESP_LOGI(TAG, "Configuring SPI host %s", spi_names[host]); ESP_LOGI(TAG, "MISO pin: %d, MOSI pin: %d, SCLK pin: %d, IO2/WP pin: %d, IO3/HD pin: %d", miso_pin, mosi_pin, sclk_pin, quadwp_pin, quadhd_pin); @@ -189,17 +167,16 @@ bool lvgl_spi_driver_init(int host, spi_bus_config_t buscfg = { .miso_io_num = miso_pin, - .mosi_io_num = mosi_pin, - .sclk_io_num = sclk_pin, - .quadwp_io_num = quadwp_pin, - .quadhd_io_num = quadhd_pin, + .mosi_io_num = mosi_pin, + .sclk_io_num = sclk_pin, + .quadwp_io_num = quadwp_pin, + .quadhd_io_num = quadhd_pin, .max_transfer_sz = max_transfer_sz }; ESP_LOGI(TAG, "Initializing SPI bus..."); - esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_chan); + esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)dma_channel); assert(ret == ESP_OK); return ESP_OK != ret; } - diff --git a/lvgl_spi_conf.h b/lvgl_spi_conf.h index cab94d7..662be98 100644 --- a/lvgl_spi_conf.h +++ b/lvgl_spi_conf.h @@ -64,9 +64,7 @@ extern "C" { #define ENABLE_TOUCH_INPUT CONFIG_LV_ENABLE_TOUCH -#if defined (CONFIG_LV_TFT_DISPLAY_SPI1_HOST) -#define TFT_SPI_HOST SPI1_HOST -#elif defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) +#if defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) #define TFT_SPI_HOST SPI2_HOST #elif defined (CONFIG_LV_TFT_DISPLAY_SPI3_HOST) #define TFT_SPI_HOST SPI3_HOST @@ -86,12 +84,10 @@ extern "C" { #define DISP_SPI_TRANS_MODE_SIO #endif -#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_HSPI) -#define TOUCH_SPI_HOST HSPI_HOST -#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_VSPI) -#define TOUCH_SPI_HOST VSPI_HOST -#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_FSPI) -#define TOUCH_SPI_HOST FSPI_HOST +#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI2_HOST) +#define TOUCH_SPI_HOST SPI2_HOST +#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI3_HOST) +#define TOUCH_SPI_HOST SPI3_HOST #endif /* Handle the FT81X Special case */ @@ -107,7 +103,7 @@ extern "C" { // Detect the use of a shared SPI Bus and verify the user specified the same SPI bus for both touch and tft #if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI) && TP_SPI_MOSI == DISP_SPI_MOSI && TP_SPI_CLK == DISP_SPI_CLK #if TFT_SPI_HOST != TOUCH_SPI_HOST -#error You must specify the same SPI host (HSPI, VSPI or FSPI) for both display and touch driver +#error You must specify the same SPI host (SPIx_HOST) for both display and touch driver #endif #define SHARED_SPI_BUS diff --git a/lvgl_tft/Kconfig b/lvgl_tft/Kconfig index b55f1f1..7bfde78 100644 --- a/lvgl_tft/Kconfig +++ b/lvgl_tft/Kconfig @@ -469,13 +469,10 @@ menu "LVGL TFT Display controller" choice prompt "TFT SPI Bus." if LV_TFT_DISPLAY_PROTOCOL_SPI - default LV_TFT_DISPLAY_SPI3_HOST if LV_PREDEFINED_DISPLAY_TTGO && \ - !IDF_TARGET_ESP32S2 + default LV_TFT_DISPLAY_SPI2_HOST help Select the SPI Bus the TFT Display is attached to. - config LV_TFT_DISPLAY_SPI1_HOST - bool "SPI1_HOST" config LV_TFT_DISPLAY_SPI2_HOST bool "SPI2_HOST" config LV_TFT_DISPLAY_SPI3_HOST diff --git a/lvgl_touch/Kconfig b/lvgl_touch/Kconfig index b9908aa..5b6eeb1 100644 --- a/lvgl_touch/Kconfig +++ b/lvgl_touch/Kconfig @@ -67,17 +67,14 @@ menu "LVGL Touch controller" prompt "Touch Controller SPI Bus." depends on LV_TOUCH_DRIVER_PROTOCOL_SPI - default LV_TOUCH_CONTROLLER_SPI_VSPI if !IDF_TARGET_ESP32S2 - default LV_TOUCH_CONTROLLER_SPI_FSPI if IDF_TARGET_ESP32S2 + default LV_TOUCH_CONTROLLER_SPI2_HOST help - Select the SPI Bus the TFT Display is attached to. + Select the SPI Bus the touch controller is attached to. - config LV_TOUCH_CONTROLLER_SPI_HSPI - bool "HSPI" - config LV_TOUCH_CONTROLLER_SPI_VSPI - bool "VSPI" if !IDF_TARGET_ESP32S2 - config LV_TOUCH_CONTROLLER_SPI_FSPI - bool "FSPI" if IDF_TARGET_ESP32S2 + config LV_TOUCH_CONTROLLER_SPI2_HOST + bool "SPI2_HOST" + config LV_TOUCH_CONTROLLER_SPI3_HOST + bool "SPI3_HOST" endchoice menu "Touchpanel (XPT2046) Pin Assignments" @@ -86,7 +83,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 help @@ -103,7 +100,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_CLK int "GPIO for CLK (SCK / Serial Clock)" - + default 26 if LV_PREDEFINED_PINS_38V1 default 18 help @@ -119,7 +116,7 @@ menu "LVGL Touch controller" config LV_TOUCH_PIN_IRQ int "GPIO for IRQ (Interrupt Request)" - + default 27 if LV_PREDEFINED_PINS_38V4 default 25 help @@ -216,7 +213,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING default 19 @@ -472,14 +469,14 @@ menu "LVGL Touch controller" config LV_I2C_TOUCH_PORT_0 bool prompt "I2C port 0" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. config LV_I2C_TOUCH_PORT_1 bool prompt "I2C port 1" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. From d44b7e808abcf102bf5fc78f79abf7399f0d69ce Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Fri, 17 Dec 2021 19:18:05 +0100 Subject: [PATCH 2/6] Revert "fix spi names" --- .gitignore | 4 ---- lvgl_helpers.c | 37 ++++++++++++++++++++++++++++++------- lvgl_spi_conf.h | 16 ++++++++++------ lvgl_tft/Kconfig | 5 ++++- lvgl_touch/Kconfig | 27 +++++++++++++++------------ 5 files changed, 59 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index c2ff946..38eeab7 100644 --- a/.gitignore +++ b/.gitignore @@ -56,7 +56,3 @@ dkms.conf # ESP-IDF build dir build - -# Kconfig files -sdkconfig -sdkconfig.old diff --git a/lvgl_helpers.c b/lvgl_helpers.c index f65cce5..edc522f 100644 --- a/lvgl_helpers.c +++ b/lvgl_helpers.c @@ -154,12 +154,34 @@ bool lvgl_spi_driver_init(int host, int dma_channel, int quadwp_pin, int quadhd_pin) { - assert((0 <= host) && (SPI_HOST_MAX > host)); + int dma_chan = 0 /* SPI_DMA_DISABLED */; + +#if defined (CONFIG_IDF_TARGET_ESP32) + assert((SPI_HOST <= host) && (VSPI_HOST >= host)); + const char *spi_names[] = { + "SPI_HOST", "HSPI_HOST", "VSPI_HOST" + }; + + dma_chan = dma_channel; +#elif defined (CONFIG_IDF_TARGET_ESP32S2) + assert((SPI_HOST <= host) && (HSPI_HOST >= host)); + const char *spi_names[] = { + "SPI_HOST", "", "" + }; + + dma_chan = dma_channel; +#elif defined (CONFIG_IDF_TARGET_ESP32C3) + assert((SPI1_HOST <= host) && (SPI3_HOST >= host)); const char *spi_names[] = { "SPI1_HOST", "SPI2_HOST", "SPI3_HOST" }; - ESP_LOGI(TAG, "Configuring SPI host %s", spi_names[host]); + dma_chan = 3 /* SPI_DMA_CH_AUTO */; +#else +#error "Target chip not selected" +#endif + + ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host); ESP_LOGI(TAG, "MISO pin: %d, MOSI pin: %d, SCLK pin: %d, IO2/WP pin: %d, IO3/HD pin: %d", miso_pin, mosi_pin, sclk_pin, quadwp_pin, quadhd_pin); @@ -167,16 +189,17 @@ bool lvgl_spi_driver_init(int host, spi_bus_config_t buscfg = { .miso_io_num = miso_pin, - .mosi_io_num = mosi_pin, - .sclk_io_num = sclk_pin, - .quadwp_io_num = quadwp_pin, - .quadhd_io_num = quadhd_pin, + .mosi_io_num = mosi_pin, + .sclk_io_num = sclk_pin, + .quadwp_io_num = quadwp_pin, + .quadhd_io_num = quadhd_pin, .max_transfer_sz = max_transfer_sz }; ESP_LOGI(TAG, "Initializing SPI bus..."); - esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)dma_channel); + esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_chan); assert(ret == ESP_OK); return ESP_OK != ret; } + diff --git a/lvgl_spi_conf.h b/lvgl_spi_conf.h index 662be98..cab94d7 100644 --- a/lvgl_spi_conf.h +++ b/lvgl_spi_conf.h @@ -64,7 +64,9 @@ extern "C" { #define ENABLE_TOUCH_INPUT CONFIG_LV_ENABLE_TOUCH -#if defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) +#if defined (CONFIG_LV_TFT_DISPLAY_SPI1_HOST) +#define TFT_SPI_HOST SPI1_HOST +#elif defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) #define TFT_SPI_HOST SPI2_HOST #elif defined (CONFIG_LV_TFT_DISPLAY_SPI3_HOST) #define TFT_SPI_HOST SPI3_HOST @@ -84,10 +86,12 @@ extern "C" { #define DISP_SPI_TRANS_MODE_SIO #endif -#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI2_HOST) -#define TOUCH_SPI_HOST SPI2_HOST -#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI3_HOST) -#define TOUCH_SPI_HOST SPI3_HOST +#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_HSPI) +#define TOUCH_SPI_HOST HSPI_HOST +#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_VSPI) +#define TOUCH_SPI_HOST VSPI_HOST +#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_FSPI) +#define TOUCH_SPI_HOST FSPI_HOST #endif /* Handle the FT81X Special case */ @@ -103,7 +107,7 @@ extern "C" { // Detect the use of a shared SPI Bus and verify the user specified the same SPI bus for both touch and tft #if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI) && TP_SPI_MOSI == DISP_SPI_MOSI && TP_SPI_CLK == DISP_SPI_CLK #if TFT_SPI_HOST != TOUCH_SPI_HOST -#error You must specify the same SPI host (SPIx_HOST) for both display and touch driver +#error You must specify the same SPI host (HSPI, VSPI or FSPI) for both display and touch driver #endif #define SHARED_SPI_BUS diff --git a/lvgl_tft/Kconfig b/lvgl_tft/Kconfig index 7bfde78..b55f1f1 100644 --- a/lvgl_tft/Kconfig +++ b/lvgl_tft/Kconfig @@ -469,10 +469,13 @@ menu "LVGL TFT Display controller" choice prompt "TFT SPI Bus." if LV_TFT_DISPLAY_PROTOCOL_SPI - default LV_TFT_DISPLAY_SPI2_HOST + default LV_TFT_DISPLAY_SPI3_HOST if LV_PREDEFINED_DISPLAY_TTGO && \ + !IDF_TARGET_ESP32S2 help Select the SPI Bus the TFT Display is attached to. + config LV_TFT_DISPLAY_SPI1_HOST + bool "SPI1_HOST" config LV_TFT_DISPLAY_SPI2_HOST bool "SPI2_HOST" config LV_TFT_DISPLAY_SPI3_HOST diff --git a/lvgl_touch/Kconfig b/lvgl_touch/Kconfig index 5b6eeb1..b9908aa 100644 --- a/lvgl_touch/Kconfig +++ b/lvgl_touch/Kconfig @@ -67,14 +67,17 @@ menu "LVGL Touch controller" prompt "Touch Controller SPI Bus." depends on LV_TOUCH_DRIVER_PROTOCOL_SPI - default LV_TOUCH_CONTROLLER_SPI2_HOST + default LV_TOUCH_CONTROLLER_SPI_VSPI if !IDF_TARGET_ESP32S2 + default LV_TOUCH_CONTROLLER_SPI_FSPI if IDF_TARGET_ESP32S2 help - Select the SPI Bus the touch controller is attached to. + Select the SPI Bus the TFT Display is attached to. - config LV_TOUCH_CONTROLLER_SPI2_HOST - bool "SPI2_HOST" - config LV_TOUCH_CONTROLLER_SPI3_HOST - bool "SPI3_HOST" + config LV_TOUCH_CONTROLLER_SPI_HSPI + bool "HSPI" + config LV_TOUCH_CONTROLLER_SPI_VSPI + bool "VSPI" if !IDF_TARGET_ESP32S2 + config LV_TOUCH_CONTROLLER_SPI_FSPI + bool "FSPI" if IDF_TARGET_ESP32S2 endchoice menu "Touchpanel (XPT2046) Pin Assignments" @@ -83,7 +86,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 help @@ -100,7 +103,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_CLK int "GPIO for CLK (SCK / Serial Clock)" - + default 26 if LV_PREDEFINED_PINS_38V1 default 18 help @@ -116,7 +119,7 @@ menu "LVGL Touch controller" config LV_TOUCH_PIN_IRQ int "GPIO for IRQ (Interrupt Request)" - + default 27 if LV_PREDEFINED_PINS_38V4 default 25 help @@ -213,7 +216,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING default 19 @@ -469,14 +472,14 @@ menu "LVGL Touch controller" config LV_I2C_TOUCH_PORT_0 bool prompt "I2C port 0" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. config LV_I2C_TOUCH_PORT_1 bool prompt "I2C port 1" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. From 8cbbc299e9b63b69b5de0771cef943ef2203029d Mon Sep 17 00:00:00 2001 From: arktrin Date: Sat, 18 Dec 2021 20:54:50 +0300 Subject: [PATCH 3/6] fix SPI names for touch with ESP32-C3 specific auto-dma proper selection --- .gitignore | 4 +++ lvgl_helpers.c | 40 ++++++--------------- lvgl_spi_conf.h | 16 ++++----- lvgl_tft/Kconfig | 10 ++---- lvgl_touch/Kconfig | 89 ++++++++++++++++++++++------------------------ 5 files changed, 65 insertions(+), 94 deletions(-) diff --git a/.gitignore b/.gitignore index 38eeab7..3c4910f 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,7 @@ dkms.conf # ESP-IDF build dir build + +# Kconfig files +sdkconfig +sdkconfig.old \ No newline at end of file diff --git a/lvgl_helpers.c b/lvgl_helpers.c index edc522f..76a0ccf 100644 --- a/lvgl_helpers.c +++ b/lvgl_helpers.c @@ -154,34 +154,12 @@ bool lvgl_spi_driver_init(int host, int dma_channel, int quadwp_pin, int quadhd_pin) { - int dma_chan = 0 /* SPI_DMA_DISABLED */; - -#if defined (CONFIG_IDF_TARGET_ESP32) - assert((SPI_HOST <= host) && (VSPI_HOST >= host)); - const char *spi_names[] = { - "SPI_HOST", "HSPI_HOST", "VSPI_HOST" - }; - - dma_chan = dma_channel; -#elif defined (CONFIG_IDF_TARGET_ESP32S2) - assert((SPI_HOST <= host) && (HSPI_HOST >= host)); - const char *spi_names[] = { - "SPI_HOST", "", "" - }; - - dma_chan = dma_channel; -#elif defined (CONFIG_IDF_TARGET_ESP32C3) - assert((SPI1_HOST <= host) && (SPI3_HOST >= host)); + assert((0 <= host) && (SPI_HOST_MAX > host)); const char *spi_names[] = { "SPI1_HOST", "SPI2_HOST", "SPI3_HOST" }; - dma_chan = 3 /* SPI_DMA_CH_AUTO */; -#else -#error "Target chip not selected" -#endif - - ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host); + ESP_LOGI(TAG, "Configuring SPI host %s", spi_names[host]); ESP_LOGI(TAG, "MISO pin: %d, MOSI pin: %d, SCLK pin: %d, IO2/WP pin: %d, IO3/HD pin: %d", miso_pin, mosi_pin, sclk_pin, quadwp_pin, quadhd_pin); @@ -189,17 +167,19 @@ bool lvgl_spi_driver_init(int host, spi_bus_config_t buscfg = { .miso_io_num = miso_pin, - .mosi_io_num = mosi_pin, - .sclk_io_num = sclk_pin, - .quadwp_io_num = quadwp_pin, - .quadhd_io_num = quadhd_pin, + .mosi_io_num = mosi_pin, + .sclk_io_num = sclk_pin, + .quadwp_io_num = quadwp_pin, + .quadhd_io_num = quadhd_pin, .max_transfer_sz = max_transfer_sz }; ESP_LOGI(TAG, "Initializing SPI bus..."); - esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_chan); + #if defined (CONFIG_IDF_TARGET_ESP32C3) + dma_channel = 3; + #endif + esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)dma_channel); assert(ret == ESP_OK); return ESP_OK != ret; } - diff --git a/lvgl_spi_conf.h b/lvgl_spi_conf.h index cab94d7..662be98 100644 --- a/lvgl_spi_conf.h +++ b/lvgl_spi_conf.h @@ -64,9 +64,7 @@ extern "C" { #define ENABLE_TOUCH_INPUT CONFIG_LV_ENABLE_TOUCH -#if defined (CONFIG_LV_TFT_DISPLAY_SPI1_HOST) -#define TFT_SPI_HOST SPI1_HOST -#elif defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) +#if defined (CONFIG_LV_TFT_DISPLAY_SPI2_HOST) #define TFT_SPI_HOST SPI2_HOST #elif defined (CONFIG_LV_TFT_DISPLAY_SPI3_HOST) #define TFT_SPI_HOST SPI3_HOST @@ -86,12 +84,10 @@ extern "C" { #define DISP_SPI_TRANS_MODE_SIO #endif -#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_HSPI) -#define TOUCH_SPI_HOST HSPI_HOST -#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_VSPI) -#define TOUCH_SPI_HOST VSPI_HOST -#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_FSPI) -#define TOUCH_SPI_HOST FSPI_HOST +#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI2_HOST) +#define TOUCH_SPI_HOST SPI2_HOST +#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI3_HOST) +#define TOUCH_SPI_HOST SPI3_HOST #endif /* Handle the FT81X Special case */ @@ -107,7 +103,7 @@ extern "C" { // Detect the use of a shared SPI Bus and verify the user specified the same SPI bus for both touch and tft #if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI) && TP_SPI_MOSI == DISP_SPI_MOSI && TP_SPI_CLK == DISP_SPI_CLK #if TFT_SPI_HOST != TOUCH_SPI_HOST -#error You must specify the same SPI host (HSPI, VSPI or FSPI) for both display and touch driver +#error You must specify the same SPI host (SPIx_HOST) for both display and touch driver #endif #define SHARED_SPI_BUS diff --git a/lvgl_tft/Kconfig b/lvgl_tft/Kconfig index b55f1f1..4a74ad2 100644 --- a/lvgl_tft/Kconfig +++ b/lvgl_tft/Kconfig @@ -22,7 +22,7 @@ menu "LVGL TFT Display controller" select LV_TFT_DISPLAY_CONTROLLER_ILI9341 select LV_TFT_DISPLAY_PROTOCOL_SPI config LV_PREDEFINED_DISPLAY_M5CORE2 - bool "M5Core2" + bool "M5Core2" select LV_TFT_DISPLAY_CONTROLLER_ILI9341 select LV_TFT_DISPLAY_PROTOCOL_SPI config LV_PREDEFINED_DISPLAY_M5STICK @@ -469,13 +469,10 @@ menu "LVGL TFT Display controller" choice prompt "TFT SPI Bus." if LV_TFT_DISPLAY_PROTOCOL_SPI - default LV_TFT_DISPLAY_SPI3_HOST if LV_PREDEFINED_DISPLAY_TTGO && \ - !IDF_TARGET_ESP32S2 + default LV_TFT_DISPLAY_SPI2_HOST help Select the SPI Bus the TFT Display is attached to. - config LV_TFT_DISPLAY_SPI1_HOST - bool "SPI1_HOST" config LV_TFT_DISPLAY_SPI2_HOST bool "SPI2_HOST" config LV_TFT_DISPLAY_SPI3_HOST @@ -1011,6 +1008,3 @@ menu "LVGL TFT Display controller" default 0 endmenu - - - diff --git a/lvgl_touch/Kconfig b/lvgl_touch/Kconfig index b9908aa..b793adb 100644 --- a/lvgl_touch/Kconfig +++ b/lvgl_touch/Kconfig @@ -1,28 +1,28 @@ menu "LVGL Touch controller" config LV_TOUCH_CONTROLLER - int - default 0 if LV_TOUCH_CONTROLLER_NONE - default 1 if LV_TOUCH_CONTROLLER_XPT2046 - default 2 if LV_TOUCH_CONTROLLER_FT6X06 - default 3 if LV_TOUCH_CONTROLLER_STMPE610 + int + default 0 if LV_TOUCH_CONTROLLER_NONE + default 1 if LV_TOUCH_CONTROLLER_XPT2046 + default 2 if LV_TOUCH_CONTROLLER_FT6X06 + default 3 if LV_TOUCH_CONTROLLER_STMPE610 default 4 if LV_TOUCH_CONTROLLER_ADCRAW default 5 if LV_TOUCH_CONTROLLER_FT81X default 6 if LV_TOUCH_CONTROLLER_RA8875 default 7 if LV_TOUCH_CONTROLLER_GT911 choice - prompt "Select a touch panel controller model." - default LV_TOUCH_CONTROLLER_NONE - help - Select the controller for your touch panel. + prompt "Select a touch panel controller model." + default LV_TOUCH_CONTROLLER_NONE + help + Select the controller for your touch panel. - config LV_TOUCH_CONTROLLER_NONE - bool "None" - config LV_TOUCH_CONTROLLER_XPT2046 + config LV_TOUCH_CONTROLLER_NONE + bool "None" + config LV_TOUCH_CONTROLLER_XPT2046 select LV_TOUCH_DRIVER_PROTOCOL_SPI bool "XPT2046" - config LV_TOUCH_CONTROLLER_FT6X06 + config LV_TOUCH_CONTROLLER_FT6X06 select LV_I2C_TOUCH bool "FT6X06" config LV_TOUCH_CONTROLLER_STMPE610 @@ -61,23 +61,20 @@ menu "LVGL Touch controller" bool help Touch controller uses same interface/device as display - (Note: Display must be initialized before touch) + (Note: Display must be initialized before touch) choice prompt "Touch Controller SPI Bus." depends on LV_TOUCH_DRIVER_PROTOCOL_SPI - default LV_TOUCH_CONTROLLER_SPI_VSPI if !IDF_TARGET_ESP32S2 - default LV_TOUCH_CONTROLLER_SPI_FSPI if IDF_TARGET_ESP32S2 + default LV_TOUCH_CONTROLLER_SPI2_HOST help - Select the SPI Bus the TFT Display is attached to. + Select the SPI Bus the touch controller is attached to. - config LV_TOUCH_CONTROLLER_SPI_HSPI - bool "HSPI" - config LV_TOUCH_CONTROLLER_SPI_VSPI - bool "VSPI" if !IDF_TARGET_ESP32S2 - config LV_TOUCH_CONTROLLER_SPI_FSPI - bool "FSPI" if IDF_TARGET_ESP32S2 + config LV_TOUCH_CONTROLLER_SPI2_HOST + bool "SPI2_HOST" + config LV_TOUCH_CONTROLLER_SPI3_HOST + bool "SPI3_HOST" endchoice menu "Touchpanel (XPT2046) Pin Assignments" @@ -86,7 +83,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 help @@ -103,7 +100,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_CLK int "GPIO for CLK (SCK / Serial Clock)" - + default 26 if LV_PREDEFINED_PINS_38V1 default 18 help @@ -119,7 +116,7 @@ menu "LVGL Touch controller" config LV_TOUCH_PIN_IRQ int "GPIO for IRQ (Interrupt Request)" - + default 27 if LV_PREDEFINED_PINS_38V4 default 25 help @@ -153,10 +150,10 @@ menu "LVGL Touch controller" default 4095 if LV_PREDEFINED_PINS_38V4 default 1900 - config LV_TOUCH_XY_SWAP - bool - prompt "Swap XY." - default y + config LV_TOUCH_XY_SWAP + bool + prompt "Swap XY." + default y config LV_TOUCH_INVERT_X bool @@ -216,7 +213,7 @@ menu "LVGL Touch controller" config LV_TOUCH_SPI_MISO int prompt "GPIO for MISO (Master In Slave Out)" - + default 35 if LV_PREDEFINED_PINS_38V1 default 19 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING default 19 @@ -278,9 +275,9 @@ menu "LVGL Touch controller" default 3800 config LV_TOUCH_XY_SWAP - bool - prompt "Swap XY." - default n + bool + prompt "Swap XY." + default n config LV_TOUCH_INVERT_X bool @@ -379,25 +376,25 @@ menu "LVGL Touch controller" config LV_TOUCH_X_MIN int prompt "Minimum X coordinate ADC value" - range 0 1023 + range 0 1023 default 0 config LV_TOUCH_Y_MIN int prompt "Minimum Y coordinate ADC value" - range 0 1023 + range 0 1023 default 0 config LV_TOUCH_X_MAX int prompt "Maximum X coordinate ADC value" - range 0 1023 + range 0 1023 default 1023 config LV_TOUCH_Y_MAX int prompt "Maximum Y coordinate ADC value" - range 0 1023 + range 0 1023 default 1023 config LV_TOUCH_XY_SWAP @@ -418,13 +415,13 @@ menu "LVGL Touch controller" config LV_TOUCH_RA8875_SAMPLE_TIME int prompt "TP Sample Time Adjusting" - range 0 7 + range 0 7 default 0 config LV_TOUCH_RA8875_ADC_CLOCK int prompt "ADC Clock Setting" - range 0 7 + range 0 7 default 0 config LV_TOUCH_RA8875_WAKEUP_ENABLE @@ -447,10 +444,10 @@ menu "LVGL Touch controller" menu "Touchpanel Configuration (GT911)" depends on LV_TOUCH_CONTROLLER_GT911 - config LV_GT911_SWAPXY - bool - prompt "Swap X with Y coordinate." - default y + config LV_GT911_SWAPXY + bool + prompt "Swap X with Y coordinate." + default y config LV_GT911_INVERT_X bool @@ -472,14 +469,14 @@ menu "LVGL Touch controller" config LV_I2C_TOUCH_PORT_0 bool prompt "I2C port 0" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. config LV_I2C_TOUCH_PORT_1 bool prompt "I2C port 1" - help + help I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu Component config->I2C Port Settings. From 8d1fbcf5c4cf4762cdf7b1d488dda5f672c2b2b0 Mon Sep 17 00:00:00 2001 From: arktrin Date: Mon, 20 Dec 2021 12:38:42 +0300 Subject: [PATCH 4/6] replace hardcoded SPI DMA parameter --- lvgl_helpers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lvgl_helpers.c b/lvgl_helpers.c index 76a0ccf..57ab7dd 100644 --- a/lvgl_helpers.c +++ b/lvgl_helpers.c @@ -176,7 +176,7 @@ bool lvgl_spi_driver_init(int host, ESP_LOGI(TAG, "Initializing SPI bus..."); #if defined (CONFIG_IDF_TARGET_ESP32C3) - dma_channel = 3; + dma_channel = SPI_DMA_CH_AUTO; #endif esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)dma_channel); assert(ret == ESP_OK); From c4cd5244870331cf865915ac2ae1ab00bdf7d643 Mon Sep 17 00:00:00 2001 From: arktrin Date: Wed, 22 Dec 2021 18:55:54 +0300 Subject: [PATCH 5/6] add offset for 240x135 displays based on ST7789 --- lvgl_tft/st7789.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/lvgl_tft/st7789.c b/lvgl_tft/st7789.c index 3e47a59..b4e6de8 100644 --- a/lvgl_tft/st7789.c +++ b/lvgl_tft/st7789.c @@ -120,9 +120,9 @@ void st7789_init(void) st7789_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION); } -/* The ST7789 display controller can drive 320*240 displays, when using a 240*240 - * display there's a gap of 80px, we need to edit the coordinates to take into - * account that gap, this is not necessary in all orientations. */ +/* The ST7789 display controller can drive up to 320*240 displays, when using a 240*240 + * or 240*135 displays there's a gap of 80px or 40/52/53px respectivly, we need to edit + * the coordinates to take into account those gaps, this is not necessary in all orientations. */ void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map) { uint8_t data[4] = {0}; @@ -139,13 +139,29 @@ void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * colo offsety2 += CONFIG_LV_TFT_DISPLAY_Y_OFFSET; #elif (LV_HOR_RES_MAX == 240) && (LV_VER_RES_MAX == 240) -#if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT) - offsetx1 += 80; - offsetx2 += 80; -#elif (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED) - offsety1 += 80; - offsety2 += 80; -#endif + #if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT) + offsetx1 += 80; + offsetx2 += 80; + #elif (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED) + offsety1 += 80; + offsety2 += 80; + #endif +#elif (LV_HOR_RES_MAX == 240) && (LV_VER_RES_MAX == 135) + #if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT) || \ + (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED) + offsetx1 += 40; + offsetx2 += 40; + offsety1 += 53; + offsety2 += 53; + #endif +#elif (LV_HOR_RES_MAX == 135) && (LV_VER_RES_MAX == 240) + #if (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE) || \ + (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED) + offsetx1 += 52; + offsetx2 += 52; + offsety1 += 40; + offsety2 += 40; + #endif #endif /*Column addresses*/ From 26fe6e7703162ac9b0ee82405e858dc37b885d1f Mon Sep 17 00:00:00 2001 From: arktrin Date: Thu, 23 Dec 2021 22:32:23 +0300 Subject: [PATCH 6/6] clarify the 52/53 px offset oddity --- lvgl_tft/st7789.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lvgl_tft/st7789.c b/lvgl_tft/st7789.c index b4e6de8..de7b35a 100644 --- a/lvgl_tft/st7789.c +++ b/lvgl_tft/st7789.c @@ -120,9 +120,9 @@ void st7789_init(void) st7789_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION); } -/* The ST7789 display controller can drive up to 320*240 displays, when using a 240*240 - * or 240*135 displays there's a gap of 80px or 40/52/53px respectivly, we need to edit - * the coordinates to take into account those gaps, this is not necessary in all orientations. */ +/* The ST7789 display controller can drive up to 320*240 displays, when using a 240*240 or 240*135 + * displays there's a gap of 80px or 40/52/53px respectively. 52px or 53x offset depends on display orientation. + * We need to edit the coordinates to take into account those gaps, this is not necessary in all orientations. */ void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map) { uint8_t data[4] = {0};