diff --git a/main/APP/app_task_display/app_task_display.c b/main/APP/app_task_display/app_task_display.c index b495797..7af3725 100644 --- a/main/APP/app_task_display/app_task_display.c +++ b/main/APP/app_task_display/app_task_display.c @@ -29,14 +29,29 @@ TFT_t dev; TickType_t FillTest(TFT_t* dev, int width, int height) { + lcdBacklightOn(dev); TickType_t startTick, endTick, diffTick; startTick = xTaskGetTickCount(); - lcdFillScreen(dev, RED); + // lcdFillScreen(dev, RED); + uint16_t data[1024] = {0}; + int i = 0; + for ( i = 0; i < 1024; i++) { + data[i] = RED; + } + lcdDrawFillRectData(dev, 11, 11, 220, 220, data); vTaskDelay(50); - lcdFillScreen(dev, GREEN); + // lcdFillScreen(dev, GREEN); + for ( i = 0; i < 1024; i++) { + data[i] = GREEN; + } + lcdDrawFillRectData(dev, 11, 11, 220, 220, data); vTaskDelay(50); - lcdFillScreen(dev, BLUE); + // lcdFillScreen(dev, BLUE); + for ( i = 0; i < 1024; i++) { + data[i] = BLUE; + } + lcdDrawFillRectData(dev, 11, 11, 220, 220, data); vTaskDelay(50); endTick = xTaskGetTickCount(); @@ -106,13 +121,15 @@ static void _display_thread_entry() uint8_t app_task_display_start() { cst816t_begin(34, 33, 35, 36); - xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY); + // xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY); spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO, CONFIG_BL_GPIO); // lcdBacklightOn(&dev); - // vTaskDelay(1000); lcdInit(&dev, CONFIG_WIDTH, CONFIG_HEIGHT, CONFIG_OFFSETX, CONFIG_OFFSETY); - // lcdBacklightOn(&dev); + lcdBacklightOff(&dev); + vTaskDelay(100); + lcdFillScreen(&dev, BLACK); + vTaskDelay(100); xTaskCreatePinnedToCore(_display_thread_entry, "dsp test", 4096, NULL, 4, NULL, tskNO_AFFINITY); #if CONFIG_INVERSION diff --git a/main/drivers/st7789/st7789.c b/main/drivers/st7789/st7789.c index b400750..da7bb2e 100644 --- a/main/drivers/st7789/st7789.c +++ b/main/drivers/st7789/st7789.c @@ -234,6 +234,7 @@ bool spi_master_write_color(TFT_t * dev, uint16_t color, uint16_t size) // Add 202001 bool spi_master_write_colors(TFT_t * dev, uint16_t * colors, uint16_t size) { +#if LCD_FLIP_16BIT static uint8_t Byte[1024]; int index = 0; for(int i=0;i_dc, SPI_Data_Mode ); - return spi_master_write_byte( dev->_SPIHandle, Byte, size*2); + return spi_master_write_byte( dev->_SPIHandle, Byte, size); +#else + gpio_set_level( dev->_dc, SPI_Data_Mode ); + return spi_master_write_byte( dev->_SPIHandle, colors, size); +#endif } void delayMS(int ms) { @@ -263,6 +268,7 @@ void lcdInit(TFT_t * dev, int width, int height, int offsetx, int offsety) dev->_font_underline = false; #if 1 + lcdBacklightOff(dev); spi_master_write_command(dev, 0x01); //Software Reset delayMS(150); @@ -416,9 +422,6 @@ void lcdInit(TFT_t * dev, int width, int height, int offsetx, int offsety) spi_master_write_command(dev, 0x2C); #endif - if(dev->_bl >= 0) { - gpio_set_level( dev->_bl, 0 ); - } } @@ -1110,3 +1113,35 @@ void lcdInversionOff(TFT_t * dev) { void lcdInversionOn(TFT_t * dev) { spi_master_write_command(dev, 0x21); //Display Inversion On } + + +void lcdDrawFillRectData(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *data) +{ + if (x1 >= dev->_width) return; + if (x2 >= dev->_width) x2=dev->_width-1; + if (y1 >= dev->_height) return; + if (y2 >= dev->_height) y2=dev->_height-1; + + ESP_LOGD(TAG,"offset(x)=%d offset(y)=%d",dev->_offsetx,dev->_offsety); + uint16_t _x1 = x1 + dev->_offsetx; + uint16_t _x2 = x2 + dev->_offsetx; + uint16_t _y1 = y1 + dev->_offsety; + uint16_t _y2 = y2 + dev->_offsety; + + bool ret = spi_master_write_command(dev, 0x2A); // set column(x) address + printf("ret = %d\r\n", ret); + spi_master_write_addr(dev, _x1, _x2); + spi_master_write_command(dev, 0x2B); // set Page(y) address + spi_master_write_addr(dev, _y1, _y2); + spi_master_write_command(dev, 0x2C); // Memory Write + for(int i=_x1;i<=_x2;i++){ + uint16_t size = _y2-_y1+1; + spi_master_write_colors(dev, data, size * 2); +#if 0 + for(j=y1;j<=y2;j++){ + //ESP_LOGD(TAG,"i=%d j=%d",i,j); + spi_master_write_data_word(dev, color); + } +#endif + } +} \ No newline at end of file diff --git a/main/drivers/st7789/st7789.h b/main/drivers/st7789/st7789.h index c2c5c1a..8253ade 100644 --- a/main/drivers/st7789/st7789.h +++ b/main/drivers/st7789/st7789.h @@ -20,6 +20,7 @@ #define DIRECTION180 2 #define DIRECTION270 3 +#define LCD_FLIP_16BIT 1 typedef struct { uint16_t _width; @@ -77,5 +78,7 @@ void lcdBacklightOff(TFT_t * dev); void lcdBacklightOn(TFT_t * dev); void lcdInversionOff(TFT_t * dev); void lcdInversionOn(TFT_t * dev); + +void lcdDrawFillRectData(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *data); #endif /* MAIN_ST7789_H_ */