Skip to content

Commit aff7d1f

Browse files
authored
Merge pull request #69 from lvgl/feature/esp32c3_support
Feature/esp32c3 support
2 parents cccb932 + b9cccc3 commit aff7d1f

File tree

9 files changed

+387
-7
lines changed

9 files changed

+387
-7
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ if(CONFIG_LV_TOUCH_CONTROLLER)
7070
list(APPEND SOURCES "lvgl_touch/FT81x.c")
7171
elseif(CONFIG_LV_TOUCH_CONTROLLER_RA8875)
7272
list(APPEND SOURCES "lvgl_touch/ra8875_touch.c")
73+
elseif(CONFIG_LV_TOUCH_CONTROLLER_GT911)
74+
list(APPEND SOURCES "lvgl_touch/gt911.c")
7375
endif()
7476

7577
if(CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI)

lvgl_helpers.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
#include "driver/i2c.h"
2020

2121
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
22-
#include "src/lv_core/lv_refr.h"
22+
#include "lvgl.h"
2323
#else
24-
#include "lvgl/src/lv_core/lv_refr.h"
24+
#include "lvgl/lvgl.h"
2525
#endif
2626

2727
/*********************
@@ -53,7 +53,12 @@
5353
/* Interface and driver initialization */
5454
void lvgl_driver_init(void)
5555
{
56+
/* Since LVGL v8 LV_HOR_RES_MAX and LV_VER_RES_MAX are not defined, so
57+
* print it only if they are defined. */
58+
#if (LVGL_VERSION_MAJOR < 8)
5659
ESP_LOGI(TAG, "Display hor size: %d, ver size: %d", LV_HOR_RES_MAX, LV_VER_RES_MAX);
60+
#endif
61+
5762
ESP_LOGI(TAG, "Display buffer size: %d", DISP_BUF_SIZE);
5863

5964
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
@@ -204,16 +209,31 @@ bool lvgl_spi_driver_init(int host,
204209
int dma_channel,
205210
int quadwp_pin, int quadhd_pin)
206211
{
212+
spi_dma_chan_t dma_chan = SPI_DMA_DISABLED;
213+
207214
#if defined (CONFIG_IDF_TARGET_ESP32)
208215
assert((SPI_HOST <= host) && (VSPI_HOST >= host));
209216
const char *spi_names[] = {
210217
"SPI_HOST", "HSPI_HOST", "VSPI_HOST"
211218
};
219+
220+
dma_chan = dma_channel;
212221
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
213222
assert((SPI_HOST <= host) && (HSPI_HOST >= host));
214223
const char *spi_names[] = {
215224
"SPI_HOST", "", ""
216225
};
226+
227+
dma_chan = dma_channel;
228+
#elif defined (CONFIG_IDF_TARGET_ESP32C3)
229+
assert((SPI1_HOST <= host) && (SPI3_HOST >= host));
230+
const char *spi_names[] = {
231+
"SPI1_HOST", "SPI2_HOST", "SPI3_HOST"
232+
};
233+
234+
dma_chan = SPI_DMA_CH_AUTO;
235+
#else
236+
#error "Target chip not selected"
217237
#endif
218238

219239
ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host);
@@ -232,7 +252,7 @@ bool lvgl_spi_driver_init(int host,
232252
};
233253

234254
ESP_LOGI(TAG, "Initializing SPI bus...");
235-
esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_channel);
255+
esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_chan);
236256
assert(ret == ESP_OK);
237257

238258
return ESP_OK != ret;

lvgl_spi_conf.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,15 @@ extern "C" {
6565
#define ENABLE_TOUCH_INPUT CONFIG_LV_ENABLE_TOUCH
6666

6767
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HSPI)
68-
#define TFT_SPI_HOST HSPI_HOST
68+
#if defined (CONFIG_IDF_TARGET_ESP32C3)
69+
#define TFT_SPI_HOST SPI2_HOST
70+
#else
71+
#define TFT_SPI_HOST HSPI_HOST
72+
#endif
6973
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_VSPI)
70-
#define TFT_SPI_HOST VSPI_HOST
74+
#define TFT_SPI_HOST VSPI_HOST
7175
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_FSPI)
72-
#define TFT_SPI_HOST FSPI_HOST
76+
#define TFT_SPI_HOST FSPI_HOST
7377
#endif
7478

7579
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HALF_DUPLEX)

lvgl_tft/Kconfig

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,7 @@ menu "LVGL TFT Display controller"
772772
int "GPIO for MOSI (Master Out Slave In)" if LV_TFT_DISPLAY_PROTOCOL_SPI
773773
range 0 39 if IDF_TARGET_ESP32
774774
range 0 43 if IDF_TARGET_ESP32S2
775+
range 0 21 if IDF_TARGET_ESP32C3
775776

776777
default 23 if LV_PREDEFINED_DISPLAY_WROVER4
777778
default 23 if LV_PREDEFINED_DISPLAY_ATAG
@@ -801,6 +802,7 @@ menu "LVGL TFT Display controller"
801802
depends on LV_DISPLAY_USE_SPI_MISO
802803
range 0 39 if IDF_TARGET_ESP32
803804
range 0 43 if IDF_TARGET_ESP32S2
805+
range 0 21 if IDF_TARGET_ESP32C3
804806

805807
default 19 if LV_PREDEFINED_PINS_TKOALA
806808
default 38 if LV_PREDEFINED_DISPLAY_M5CORE2
@@ -823,6 +825,7 @@ menu "LVGL TFT Display controller"
823825
depends on LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
824826
range -1 39 if IDF_TARGET_ESP32
825827
range -1 43 if IDF_TARGET_ESP32S2
828+
range 0 21 if IDF_TARGET_ESP32C3
826829

827830
default 22 if LV_PREDEFINED_PINS_TKOALA && LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
828831
default -1
@@ -834,6 +837,7 @@ menu "LVGL TFT Display controller"
834837
depends on LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
835838
range -1 39 if IDF_TARGET_ESP32
836839
range -1 43 if IDF_TARGET_ESP32S2
840+
range 0 21 if IDF_TARGET_ESP32C3
837841

838842
default 21 if LV_PREDEFINED_PINS_TKOALA && LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
839843
default -1
@@ -844,6 +848,7 @@ menu "LVGL TFT Display controller"
844848
int "GPIO for CLK (SCK / Serial Clock)" if LV_TFT_DISPLAY_PROTOCOL_SPI
845849
range 0 39 if IDF_TARGET_ESP32
846850
range 0 43 if IDF_TARGET_ESP32S2
851+
range 0 21 if IDF_TARGET_ESP32C3
847852

848853
default 18 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
849854
default 18 if LV_PREDEFINED_DISPLAY_M5CORE2
@@ -872,6 +877,7 @@ menu "LVGL TFT Display controller"
872877
depends on LV_DISPLAY_USE_SPI_CS
873878
range 0 39 if IDF_TARGET_ESP32
874879
range 0 43 if IDF_TARGET_ESP32S2
880+
range 0 21 if IDF_TARGET_ESP32C3
875881

876882
default 5 if LV_PREDEFINED_PINS_38V1
877883
default 14 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
@@ -900,6 +906,7 @@ menu "LVGL TFT Display controller"
900906
int "GPIO for DC (Data / Command)" if LV_TFT_DISPLAY_PROTOCOL_SPI
901907
range 0 39 if IDF_TARGET_ESP32
902908
range 0 43 if IDF_TARGET_ESP32S2
909+
range 0 21 if IDF_TARGET_ESP32C3
903910

904911
depends on LV_DISPLAY_USE_DC
905912
default 19 if LV_PREDEFINED_PINS_38V1
@@ -937,6 +944,7 @@ menu "LVGL TFT Display controller"
937944
depends on LV_DISP_USE_RST
938945
range 0 39 if IDF_TARGET_ESP32
939946
range 0 43 if IDF_TARGET_ESP32S2
947+
range 0 21 if IDF_TARGET_ESP32C3
940948

941949
default 18 if LV_PREDEFINED_PINS_38V1
942950
default 25 if LV_PREDEFINED_PINS_38V4
@@ -958,9 +966,11 @@ menu "LVGL TFT Display controller"
958966
int "GPIO for Busy" if LV_TFT_DISPLAY_CONTROLLER_IL3820 || LV_TFT_DISPLAY_CONTROLLER_JD79653A || LV_TFT_DISPLAY_CONTROLLER_UC8151D
959967
range 0 39 if IDF_TARGET_ESP32
960968
range 0 43 if IDF_TARGET_ESP32S2
969+
range 0 21 if IDF_TARGET_ESP32C3
961970

962971
default 35 if LV_TFT_DISPLAY_CONTROLLER_IL3820 || LV_TFT_DISPLAY_CONTROLLER_JD79653A || LV_TFT_DISPLAY_CONTROLLER_UC8151D
963-
default 35
972+
default 35 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2
973+
default 21 if IDF_TARGET_ESP32C3
964974

965975
help
966976
Configure the display Busy pin here.
@@ -997,6 +1007,7 @@ menu "LVGL TFT Display controller"
9971007
depends on LV_ENABLE_BACKLIGHT_CONTROL
9981008
range 0 39 if IDF_TARGET_ESP32
9991009
range 0 43 if IDF_TARGET_ESP32S2
1010+
range 0 21 if IDF_TARGET_ESP32C3
10001011

10011012
default 23 if LV_PREDEFINED_PINS_38V1
10021013
default 26 if LV_PREDEFINED_PINS_38V4
@@ -1017,6 +1028,7 @@ menu "LVGL TFT Display controller"
10171028
int "GPIO for I2C SDA" if LV_TFT_DISPLAY_PROTOCOL_I2C
10181029
range 0 39 if IDF_TARGET_ESP32
10191030
range 0 43 if IDF_TARGET_ESP32S2
1031+
range 0 21 if IDF_TARGET_ESP32C3
10201032

10211033
default 5 if LV_PREDEFINED_DISPLAY_WEMOS_LOLIN
10221034
default 5
@@ -1028,6 +1040,7 @@ menu "LVGL TFT Display controller"
10281040
int "GPIO for I2C SCL" if LV_TFT_DISPLAY_PROTOCOL_I2C
10291041
range 0 39 if IDF_TARGET_ESP32
10301042
range 0 43 if IDF_TARGET_ESP32S2
1043+
range 0 21 if IDF_TARGET_ESP32C3
10311044

10321045
default 4 if LV_PREDEFINED_DISPLAY_WEMOS_LOLIN
10331046
default 4

lvgl_touch/Kconfig

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ menu "LVGL Touch controller"
99
default 4 if LV_TOUCH_CONTROLLER_ADCRAW
1010
default 5 if LV_TOUCH_CONTROLLER_FT81X
1111
default 6 if LV_TOUCH_CONTROLLER_RA8875
12+
default 7 if LV_TOUCH_CONTROLLER_GT911
1213

1314
choice
1415
prompt "Select a touch panel controller model."
@@ -36,6 +37,9 @@ menu "LVGL Touch controller"
3637
config LV_TOUCH_CONTROLLER_RA8875
3738
select LV_TOUCH_DRIVER_DISPLAY
3839
bool "RA8875"
40+
config LV_TOUCH_CONTROLLER_GT911
41+
select LV_TOUCH_DRIVER_PROTOCOL_I2C
42+
bool "GT911"
3943
endchoice
4044

4145
config LV_TOUCH_DRIVER_PROTOCOL_SPI
@@ -98,6 +102,7 @@ menu "LVGL Touch controller"
98102
prompt "GPIO for MISO (Master In Slave Out)"
99103
range 0 39 if IDF_TARGET_ESP32
100104
range 0 43 if IDF_TARGET_ESP32S2
105+
range 0 21 if IDF_TARGET_ESP32C3
101106

102107
default 35 if LV_PREDEFINED_PINS_38V1
103108
default 19
@@ -109,6 +114,7 @@ menu "LVGL Touch controller"
109114
prompt "GPIO for MOSI (Master Out Slave In)"
110115
range 0 39 if IDF_TARGET_ESP32
111116
range 0 43 if IDF_TARGET_ESP32S2
117+
range 0 21 if IDF_TARGET_ESP32C3
112118

113119
default 32 if LV_PREDEFINED_PINS_38V1
114120
default 23
@@ -119,6 +125,7 @@ menu "LVGL Touch controller"
119125
int "GPIO for CLK (SCK / Serial Clock)"
120126
range 0 39 if IDF_TARGET_ESP32
121127
range 0 43 if IDF_TARGET_ESP32S2
128+
range 0 21 if IDF_TARGET_ESP32C3
122129

123130
default 26 if LV_PREDEFINED_PINS_38V1
124131
default 18
@@ -139,6 +146,7 @@ menu "LVGL Touch controller"
139146
int "GPIO for IRQ (Interrupt Request)"
140147
range 0 39 if IDF_TARGET_ESP32
141148
range 0 43 if IDF_TARGET_ESP32S2
149+
range 0 21 if IDF_TARGET_ESP32C3
142150

143151
default 27 if LV_PREDEFINED_PINS_38V4
144152
default 25
@@ -211,6 +219,7 @@ menu "LVGL Touch controller"
211219
prompt "GPIO for SDA (I2C)"
212220
range 0 39 if IDF_TARGET_ESP32
213221
range 0 43 if IDF_TARGET_ESP32S2
222+
range 0 21 if IDF_TARGET_ESP32C3
214223

215224
default 21
216225
help
@@ -220,6 +229,7 @@ menu "LVGL Touch controller"
220229
int "GPIO for clock signal SCL (I2C)"
221230
range 0 39 if IDF_TARGET_ESP32
222231
range 0 43 if IDF_TARGET_ESP32S2
232+
range 0 21 if IDF_TARGET_ESP32C3
223233

224234
default 22
225235
help
@@ -254,6 +264,7 @@ menu "LVGL Touch controller"
254264
prompt "GPIO for MISO (Master In Slave Out)"
255265
range 0 39 if IDF_TARGET_ESP32
256266
range 0 43 if IDF_TARGET_ESP32S2
267+
range 0 21 if IDF_TARGET_ESP32C3
257268

258269
default 35 if LV_PREDEFINED_PINS_38V1
259270
default 19 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
@@ -263,10 +274,12 @@ menu "LVGL Touch controller"
263274
Configure the touchpanel MISO pin here.
264275

265276
config LV_TOUCH_SPI_MOSI
277+
# TODO Fix default for ESP32C3
266278
int
267279
prompt "GPIO for MOSI (Master Out Slave In)"
268280
range 0 39 if IDF_TARGET_ESP32
269281
range 0 43 if IDF_TARGET_ESP32S2
282+
range 0 21 if IDF_TARGET_ESP32C3
270283

271284
default 32 if LV_PREDEFINED_PINS_38V1
272285
default 18 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
@@ -279,6 +292,7 @@ menu "LVGL Touch controller"
279292
int "GPIO for CLK (SCK / Serial Clock)"
280293
range 0 39 if IDF_TARGET_ESP32
281294
range 0 43 if IDF_TARGET_ESP32S2
295+
range 0 21 if IDF_TARGET_ESP32C3
282296

283297
default 26 if LV_PREDEFINED_PINS_38V1
284298
default 5 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
@@ -290,6 +304,7 @@ menu "LVGL Touch controller"
290304
int "GPIO for CS (Slave Select)"
291305
range 0 39 if IDF_TARGET_ESP32
292306
range 0 43 if IDF_TARGET_ESP32S2
307+
range 0 21 if IDF_TARGET_ESP32C3
293308

294309
default 33 if LV_PREDEFINED_PINS_38V1
295310
default 32 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
@@ -487,5 +502,50 @@ menu "LVGL Touch controller"
487502
default y
488503

489504
endmenu
505+
506+
menu "Touchpanel (GT911) Pin Assignments"
507+
depends on LV_TOUCH_CONTROLLER_GT911
508+
509+
config LV_TOUCH_I2C_SDA
510+
int
511+
prompt "GPIO for SDA (I2C)"
512+
range 0 39 if IDF_TARGET_ESP32
513+
range 0 43 if IDF_TARGET_ESP32S2
514+
range 0 21 if IDF_TARGET_ESP32C3
515+
516+
default 2
517+
help
518+
Configure the I2C touchpanel SDA pin here.
519+
520+
config LV_TOUCH_I2C_SCL
521+
int "GPIO for clock signal SCL (I2C)"
522+
range 0 39 if IDF_TARGET_ESP32
523+
range 0 43 if IDF_TARGET_ESP32S2
524+
range 0 21 if IDF_TARGET_ESP32C3
525+
526+
default 3
527+
help
528+
Configure the I2C touchpanel SCL pin here.
529+
endmenu
530+
531+
menu "Touchpanel Configuration (GT911)"
532+
depends on LV_TOUCH_CONTROLLER_GT911
533+
534+
config LV_GT911_SWAPXY
535+
bool
536+
prompt "Swap X with Y coordinate."
537+
default y
538+
539+
config LV_GT911_INVERT_X
540+
bool
541+
prompt "Invert X coordinate value."
542+
default n
543+
544+
config LV_GT911_INVERT_Y
545+
bool
546+
prompt "Invert Y coordinate value."
547+
default y
548+
549+
endmenu
490550

491551
endmenu

0 commit comments

Comments
 (0)