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

395 lines
7.5 KiB
C

#include "include.h"
// 360 * 360
//#define Delay(ms) bsp_spide_cs(1);delay_ms(ms)
#if (GUI_SELECT == GUI_TFT_360_GC9C01)
#define WriteData(v) tft_write_data(v)
#define CommEnd() tft_write_end()
// cmd 12h 1:cmd 4:addr/data
// cmd 32h 1:cmd/addr 4:data
// cmd 02h 1:cmd 1:addr/data
#define WriteComm12(v) \
({ \
bsp_spide_cs(1); \
bsp_spide_cs(0); \
bsp_spide_bus_mode(SPIDE_1IO); \
bsp_spide_snd_byte(0x12);\
bsp_spide_bus_mode(SPIDE_4IO); \
bsp_spide_snd_byte(0x00);\
bsp_spide_snd_byte(v); \
bsp_spide_snd_byte(0x00);\
})
#define WriteComm32(v) \
({ \
bsp_spide_cs(1); \
bsp_spide_cs(0); \
bsp_spide_bus_mode(SPIDE_1IO); \
bsp_spide_snd_byte(0x32);\
bsp_spide_snd_byte(0x00);\
bsp_spide_snd_byte(v); \
bsp_spide_snd_byte(0x00);\
bsp_spide_bus_mode(SPIDE_4IO); \
})
#define WriteComm02(v) \
({ \
bsp_spide_cs(1); \
bsp_spide_cs(0); \
bsp_spide_bus_mode(SPIDE_1IO); \
bsp_spide_snd_byte(0x02);\
bsp_spide_snd_byte(0x00);\
bsp_spide_snd_byte(v); \
bsp_spide_snd_byte(0x00);\
})
#define ReadComm03(v) \
({ \
bsp_spide_cs(1); \
bsp_spide_cs(0); \
bsp_spide_bus_mode(SPIDE_1IO); \
bsp_spide_snd_byte(0x03);\
bsp_spide_snd_byte(0x00);\
bsp_spide_snd_byte(v); \
bsp_spide_snd_byte(0x00);\
})
//0x02: 1CMD 1ADDR 1DATA
AT(.com_text.tft_spi)
void tft_write_cmd(u8 cmd)
{
TFT_SPI_CS_DIS();
delay_us(1);
TFT_SPI_CS_EN();
DESPICON &= ~BIT(3); //1BIT
tft_spi_sendbyte(0x02);
tft_spi_sendbyte(0x00);
tft_spi_sendbyte(cmd);
tft_spi_sendbyte(0x00);
}
//0x12: 1CMD 4ADDR 4DATA
AT(.com_text.tft_spi)
void tft_write_cmd12(u8 cmd)
{
TFT_SPI_CS_DIS();
delay_us(1);
TFT_SPI_CS_EN();
DESPICON &= ~BIT(3); //1BIT
tft_spi_sendbyte(0x12);
DESPICON |= BIT(3); //4BIT
tft_spi_sendbyte(0x00);
tft_spi_sendbyte(cmd);
tft_spi_sendbyte(0x00);
}
//0x03: 1CMD 1ADDR 1DATA
AT(.com_text.tft_spi)
void tft_read_cmd(u8 cmd)
{
TFT_SPI_CS_DIS();
delay_us(1);
TFT_SPI_CS_EN();
DESPICON &= ~BIT(3); //1BIT
tft_spi_sendbyte(0x03);
tft_spi_sendbyte(0x00);
tft_spi_sendbyte(cmd);
tft_spi_sendbyte(0x00);
}
AT(.com_text.tft_spi)
void tft_write_data(u8 data)
{
tft_spi_sendbyte(data);
}
AT(.com_text.tft_spi)
void tft_write_end(void)
{
TFT_SPI_CS_DIS();
}
AT(.com_text.tft_spi)
void tft_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;
tft_write_cmd(0x2A); //TFT_CASET
tft_write_data(BYTE1(x0));
tft_write_data(BYTE0(x0));
tft_write_data(BYTE1(x1));
tft_write_data(BYTE0(x1));
tft_write_cmd(0x2B); //TFT_PASET
tft_write_data(BYTE1(y0));
tft_write_data(BYTE0(y0));
tft_write_data(BYTE1(y1));
tft_write_data(BYTE0(y1));
tft_write_end();
}
AT(.com_text.tft_spi)
void tft_write_data_start(void)
{
tft_write_cmd12(0x2C); //TFT_RAMWR
}
void tft_write_cmd(u8 cmd);
void tft_write_data(u8 data);
void tft_write_end(void);
#define WriteComm(v) tft_write_cmd(v)
#define ReadComm(v) ReadComm03(v)
uint32_t tft_read_id(void)
{
uint32_t id = 0;
tft_read_cmd(0x04);
id = tft_spi_getbyte();
id = (id << 8) + tft_spi_getbyte();
id = (id << 8) + tft_spi_getbyte();
id = (id << 8) + tft_spi_getbyte();
tft_write_end();
return id;
}
void tft_360_gc9c01_init(void)
{
printf("tft_gc9c01_init\n");
WriteComm(0xfe);// internal reg enable
WriteComm(0xef);// internal reg enable
WriteComm(0x80);
WriteData(0x11);
WriteComm(0x81);
WriteData(0x70);
WriteComm(0x82);
WriteData(0x09);
WriteComm(0x83);
WriteData(0x03);
WriteComm(0x84);
WriteData(0x20);
WriteComm(0x89);
WriteData(0x10);
WriteComm(0x8A);
WriteData(0x4f);
WriteComm(0x8C);
WriteData(0x59);
WriteComm(0x8D);
WriteData(0x51);
WriteComm(0xA9); // Unknown register, Denoise
WriteData(0x88);
WriteComm(0x36);
WriteData(0x00);
WriteComm(0x3a);
WriteData(0x55); //COLMOD: RGB565
WriteComm(0xEC);
WriteData(0x77);
WriteComm(0x74);
WriteData(0x01);
WriteData(0x80);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteComm(0x98);
WriteData(0x3E);
WriteComm(0x99);
WriteData(0x3E);
WriteComm(0xC3);
WriteData(0x3A);
WriteComm(0xC4);
WriteData(0x16);
WriteComm(0xA1);
WriteData(0x01);
WriteData(0x04);
WriteComm(0xA2);
WriteData(0x01);
WriteData(0x04);
WriteComm(0xCB);
WriteData(0x02);
WriteComm(0x7C);
WriteData(0xB6);
WriteData(0x26);
WriteComm(0xAC);
WriteData(0x24);
WriteComm(0xF6);
WriteData(0x80);
WriteComm(0xB5);
WriteData(0x09);
WriteData(0x09);
WriteComm(0x60);
WriteData(0x38);
WriteData(0x0B);
WriteData(0x5B);
WriteData(0x56);
WriteComm(0x63);
WriteData(0x3A);
WriteData(0xE0);
WriteData(0x5B);
WriteData(0x56);
WriteComm(0x64);
WriteData(0x38);
WriteData(0x0D);
WriteData(0x72);
WriteData(0xDD);
WriteData(0x5B);
WriteData(0x56);
WriteComm(0x66);
WriteData(0x38);
WriteData(0x11);
WriteData(0x72);
WriteData(0xE1);
WriteData(0x5B);
WriteData(0x56);
WriteComm(0x68);
WriteData(0x3B);
WriteData(0x08);
WriteData(0x08);
WriteData(0x00);
WriteData(0x08);
WriteData(0x29);
WriteData(0x5B);
WriteComm(0x6E);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x07);
WriteData(0x01);
WriteData(0x13);
WriteData(0x11);
WriteData(0x0B);
WriteData(0x09);
WriteData(0x16);
WriteData(0x15);
WriteData(0x1D);
WriteData(0x1E);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteData(0x1E);
WriteData(0x1D);
WriteData(0x15);
WriteData(0x16);
WriteData(0x0A);
WriteData(0x0C);
WriteData(0x12);
WriteData(0x14);
WriteData(0x02);
WriteData(0x08);
WriteData(0x00);
WriteData(0x00);
WriteData(0x00);
WriteComm(0xBE);
WriteData(0x11);
WriteComm(0x6C);
WriteData(0xCC);
WriteData(0x0C);
WriteData(0xCC);
WriteData(0x84);
WriteData(0xCC);
WriteData(0x04);
WriteData(0x50);
WriteComm(0x7D);
WriteData(0x72);
WriteComm(0x7E);
WriteData(0x38);
WriteComm(0x70);
WriteData(0x02);
WriteData(0x03);
WriteData(0x09);
WriteData(0x05);
WriteData(0x0C);
WriteData(0x06);
WriteData(0x09);
WriteData(0x05);
WriteData(0x0C);
WriteData(0x06);
WriteComm(0x90);
WriteData(0x06);
WriteData(0x06);
WriteData(0x05);
WriteData(0x06);
WriteComm(0x93);
WriteData(0x45);
WriteData(0xFF);
WriteData(0x00);
WriteComm(0xF0);
WriteData(0x46);
WriteData(0x0B);
WriteData(0x0F);
WriteData(0x0A);
WriteData(0x10);
WriteData(0x3F);
WriteComm(0xF1);
WriteData(0x52);
WriteData(0x9A);
WriteData(0x4F);
WriteData(0x36);
WriteData(0x37);
WriteData(0xFF);
WriteComm(0xF2);
WriteData(0x46);
WriteData(0x0B);
WriteData(0x0F);
WriteData(0x0A);
WriteData(0x10);
WriteData(0x3F);
WriteComm(0xF3);
WriteData(0x52);
WriteData(0x9A);
WriteData(0x4F);
WriteData(0x36);
WriteData(0x37);
WriteData(0xFF);
WriteComm(0x35); //TE On
WriteData(0x00);
WriteComm(0x11);
CommEnd();
delay_ms(120);
WriteComm(0x29);
// WriteComm(0x2C);
CommEnd();
}
#endif