mcu_ab568x/app/platform/gui/tft/tft_240_jd9853.c
2025-05-30 18:03:10 +08:00

225 lines
4.4 KiB
C

#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 0x980000
#define GUI_SCREEN_OFS_X 0
#define GUI_SCREEN_OFS_Y 0
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_JD9853_init(void)
{
printf("tft_240_JD9853_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_JD9853 = {
.id = GUI_TFT_SCREEN_ID,
.init = tft_240_JD9853_init,
.read_id = tft_read_id,
.set_window = tft_gui_set_window,
};