#include "include.h" #include "tft.h" #define CommEnd() tft_write_end() #define WriteData(v) tft_write_data(v) #define WriteComm(v) tft_write_cmd(v) #define GUI_TFT_SCREEN_ID 0x98 #define GUI_SCREEN_OFS_X 0 #define GUI_SCREEN_OFS_Y 5 static void tft_gui_set_window(u16 x0, u16 y0, u16 x1, u16 y1) { x0 += GUI_SCREEN_OFS_X; x1 += GUI_SCREEN_OFS_X; y0 += GUI_SCREEN_OFS_Y; y1 += GUI_SCREEN_OFS_Y; WriteComm(0x2A); // TFT_CASET WriteData(BYTE1(x0)); WriteData(BYTE0(x0)); WriteData(BYTE1(x1)); WriteData(BYTE0(x1)); WriteComm(0x2B); // TFT_PASET WriteData(BYTE1(y0)); WriteData(BYTE0(y0)); WriteData(BYTE1(y1)); WriteData(BYTE0(y1)); tft_write_end(); } static void tft_read_id(uint8_t *buf) { tft_read_id_cmd(0x04); /* dummy clock cycle */ tft_dummy_clock(); buf[0] = tft_spi_getbyte(); buf[1] = tft_spi_getbyte(); buf[2] = tft_spi_getbyte(); tft_write_end(); } static void tft_240_JD9853a_init(void) { printf("tft_240_JD9853a_init\n"); tft_hw_reset(); delay_ms(50); WriteComm(0xDF); WriteData(0x98); WriteData(0x53); WriteComm(0xDE); WriteData(0x00); WriteComm(0xB2); WriteData(0x32); WriteComm(0xB7); WriteData(0x00); WriteData(0x35); WriteData(0x00); WriteData(0x5D); WriteComm(0xBB); WriteData(0x6C); WriteData(0x2F); WriteData(0x55); WriteData(0x73); WriteData(0x6F); WriteData(0xF0); WriteComm(0xC0); WriteData(0x22); WriteData(0xA2); WriteComm(0xC1); WriteData(0x12); // BACKSCAN=0A WriteComm(0xC3); WriteData(0x7D); WriteData(0x04); WriteData(0x04); WriteData(0x08); WriteData(0xC2); WriteData(0x72); WriteData(0x22); WriteData(0x77); WriteComm(0xC4); WriteData(0x00); WriteData(0x00); WriteData(0x99); // LN=296+10=306Line WriteData(0x79); WriteData(0x1B); WriteData(0x0B); WriteData(0x16); WriteData(0x79); WriteData(0x1B); WriteData(0x0B); WriteData(0x16); WriteData(0x82); WriteComm(0xC8); WriteData(0x3F); WriteData(0x29); WriteData(0x20); WriteData(0x14); WriteData(0x1B); WriteData(0x1E); WriteData(0x1A); WriteData(0x1A); WriteData(0x19); WriteData(0x19); WriteData(0x0E); WriteData(0x0E); WriteData(0x0B); WriteData(0x07); WriteData(0x03); WriteData(0x02); WriteData(0x3F); WriteData(0x29); WriteData(0x20); WriteData(0x14); WriteData(0x1B); WriteData(0x1E); WriteData(0x1A); WriteData(0x1A); WriteData(0x19); WriteData(0x19); WriteData(0x1E); WriteData(0x0E); WriteData(0x0B); WriteData(0x07); WriteData(0x03); WriteData(0x02); WriteComm(0xD0); WriteData(0x04); WriteData(0x04); WriteData(0x6C); WriteData(0x1C); WriteData(0x03); WriteComm(0xD7); WriteData(0x00); WriteData(0x30); WriteComm(0xE6); WriteData(0x10); WriteComm(0xDE); WriteData(0x01); WriteComm(0xBB); WriteData(0x04); // TE_SEL WriteComm(0xD7); WriteData(0x12); // INH_CHKSUM_SEL WriteComm(0xB7); WriteData(0x03); WriteData(0x13); WriteData(0xE5); WriteData(0x38); WriteData(0x38); WriteComm(0xC1); WriteData(0x14); WriteData(0x15); WriteData(0xC0); WriteComm(0xC2); WriteData(0x06); WriteData(0x3A); WriteComm(0xC4); WriteData(0x72); WriteData(0x12); WriteComm(0xBE); WriteData(0x00); WriteComm(0xDE); WriteData(0x00); WriteComm(0x35); WriteData(0x00); WriteComm(0x36); WriteData(0x00); WriteComm(0x3A); WriteData(0x05); WriteComm(0x2A); WriteData(0x00); WriteData(0x00); WriteData(0x00); WriteData(0xEF); WriteComm(0x2B); WriteData(0x00); WriteData(0x05); WriteData(0x01); WriteData(0x2C); WriteComm(0x11); delay_ms(120); WriteComm(0x29); delay_ms(10); } tft_driver_t tft_driver_240_JD9853a = { .id = GUI_TFT_SCREEN_ID, .init = tft_240_JD9853a_init, .read_id = tft_read_id, .set_window = tft_gui_set_window, };