Add capacitive touch LCD driver

This commit is contained in:
2026-07-03 18:55:30 +08:00
parent 23bef680ed
commit 7961bcc920
20 changed files with 529 additions and 68 deletions

View File

@@ -1,4 +1,6 @@
#include "lcd_reg.h"
#include "lcd_reg.h"
#include "board_config.h"
#include "driver/gpio.h"
#include "driver/spi_master.h"
@@ -8,12 +10,6 @@
#define LCD_SPI_HOST SPI2_HOST
#define LCD_PIN_BL 1
#define LCD_PIN_CS 8
#define LCD_PIN_DC 9
#define LCD_PIN_RES 10
#define LCD_PIN_SDA 11
#define LCD_PIN_SCL 12
#define LCD_CMD_SWRESET 0x01
#define LCD_CMD_SLPOUT 0x11
@@ -27,6 +23,7 @@
static spi_device_handle_t lcd_spi;
static SemaphoreHandle_t lcd_mutex;
static bool lcd_spi_ready;
/* Timing */
@@ -83,7 +80,7 @@ void lcd_write_pixels(const void *data, uint32_t length)
static void lcd_gpio_init(void)
{
gpio_config_t gpio_config_data = {
.pin_bit_mask = (1ULL << LCD_PIN_BL) | (1ULL << LCD_PIN_DC) | (1ULL << LCD_PIN_RES),
.pin_bit_mask = (1ULL << LCD_PIN_BLK) | (1ULL << LCD_PIN_DC) | (1ULL << LCD_PIN_RES),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
@@ -91,17 +88,21 @@ static void lcd_gpio_init(void)
};
gpio_config(&gpio_config_data);
gpio_set_level(LCD_PIN_BL, 1);
gpio_set_level(LCD_PIN_BLK, 1);
gpio_set_level(LCD_PIN_DC, 0);
gpio_set_level(LCD_PIN_RES, 1);
}
static void lcd_spi_init(void)
{
if (lcd_spi_ready) {
return;
}
spi_bus_config_t bus_config = {
.mosi_io_num = LCD_PIN_SDA,
.mosi_io_num = LCD_PIN_MOSI,
.miso_io_num = -1,
.sclk_io_num = LCD_PIN_SCL,
.sclk_io_num = LCD_PIN_CLK,
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = LCD_WIDTH * 40 * 2,
@@ -117,6 +118,7 @@ static void lcd_spi_init(void)
};
spi_bus_add_device(LCD_SPI_HOST, &device_config, &lcd_spi);
lcd_spi_ready = true;
}
static void lcd_reset(void)
@@ -151,10 +153,21 @@ static void lcd_controller_init(void)
void lcd_reg_init(void)
{
lcd_mutex = xSemaphoreCreateMutex();
if (!lcd_mutex) {
lcd_mutex = xSemaphoreCreateMutex();
}
lcd_gpio_init();
lcd_spi_init();
lcd_reset();
lcd_controller_init();
}
void lcd_reg_restore(void)
{
lcd_gpio_init();
lcd_spi_init();
lcd_controller_init();
}