#include "include.h" // 320 * 385 //#define Delay(ms) bsp_spide_cs(1);delay_ms(ms) #if (GUI_SELECT == GUI_TFT_320_ST77916) #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() { 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) //0x03: 2bit AT(.com_text.tft_spi) void tft_read_id_cmd(u8 cmd) { TFT_SPI_CS_DIS(); delay_us(1); TFT_SPI_CS_EN(); DESPICON = (DESPICON & ~(0x03<<2)) | (0x00<<2); //1data in 1data out tft_spi_sendbyte(0x03); tft_spi_sendbyte(0x00); tft_spi_sendbyte(cmd); tft_spi_sendbyte(0x00); } uint32_t tft_read_id(void) { u32 despicon = DESPICON; uint32_t id = 0; tft_read_id_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(); DESPICON = despicon; return id; } void tft_320_st77916_init(void) { printf("tft_st77916_init\n"); WriteComm(0xF0); WriteData(0x08); WriteComm(0xF2); WriteData(0x08); WriteComm(0x9B); WriteData(0x51); WriteComm(0x86); WriteData(0x53); WriteComm(0xF2); WriteData(0x80); WriteComm(0xF0); WriteData(0x00); WriteComm(0xF0); WriteData(0x01); WriteComm(0xF1); WriteData(0x01); WriteComm(0xB0); WriteData(0x56); WriteComm(0xB1); WriteData(0x4D); WriteComm(0xB2); WriteData(0x24); WriteComm(0xB4); WriteData(0x66); WriteComm(0xB5); WriteData(0x44); WriteComm(0xB6); WriteData(0x8B); WriteComm(0xB7); WriteData(0x40); WriteComm(0xB8); WriteData(0x05); WriteComm(0xBA); WriteData(0x00); WriteComm(0xBB); WriteData(0x08); WriteComm(0xBC); WriteData(0x08); WriteComm(0xBD); WriteData(0x00); WriteComm(0xC0); WriteData(0x80); WriteComm(0xC1); WriteData(0x08); WriteComm(0xC2); WriteData(0x35); WriteComm(0xC3); WriteData(0x80); WriteComm(0xC4); WriteData(0x08); WriteComm(0xC5); WriteData(0x35); WriteComm(0xC6); WriteData(0xA9); WriteComm(0xC7); WriteData(0x41); WriteComm(0xC8); WriteData(0x51); WriteComm(0xC9); WriteData(0xA9); WriteComm(0xCA); WriteData(0x41); WriteComm(0xCB); WriteData(0x51); WriteComm(0xD0); WriteData(0xD1); WriteComm(0xD1); WriteData(0x40); WriteComm(0xD2); WriteData(0x82); WriteComm(0xF5); WriteData(0x00); WriteData(0xA5); WriteComm(0xDD); WriteData(0x49); WriteComm(0xDE); WriteData(0x49); WriteComm(0xF1); WriteData(0x10); WriteComm(0xF0); WriteData(0x00); WriteComm(0xF0); WriteData(0x02); WriteComm(0xE0); WriteData(0xf0); WriteData(0x0a); WriteData(0x11); WriteData(0x0c); WriteData(0x0b); WriteData(0x08); WriteData(0x3a); WriteData(0x54); WriteData(0x51); WriteData(0x29); WriteData(0x16); WriteData(0x15); WriteData(0x31); WriteData(0x34); WriteComm(0xE1); WriteData(0xf0); WriteData(0x0a); WriteData(0x11); WriteData(0x0b); WriteData(0x0a); WriteData(0x07); WriteData(0x39); WriteData(0x43); WriteData(0x4e); WriteData(0x09); WriteData(0x15); WriteData(0x15); WriteData(0x2e); WriteData(0x34); WriteComm(0xF0); WriteData(0x10); WriteComm(0xF3); WriteData(0x10); WriteComm(0xE0); WriteData(0x08); WriteComm(0xE1); WriteData(0x00); WriteComm(0xE2); WriteData(0x0B); WriteComm(0xE3); WriteData(0x00); WriteComm(0xE4); WriteData(0xE0); WriteComm(0xE5); WriteData(0x06); WriteComm(0xE6); WriteData(0x21); WriteComm(0xE7); WriteData(0x10); WriteComm(0xE8); WriteData(0x8A); WriteComm(0xE9); WriteData(0x82); WriteComm(0xEA); WriteData(0xE4); WriteComm(0xEB); WriteData(0x00); WriteComm(0xEC); WriteData(0x00); WriteComm(0xED); WriteData(0x14); WriteComm(0xEE); WriteData(0xFF); WriteComm(0xEF); WriteData(0x00); WriteComm(0xF8); WriteData(0xFF); WriteComm(0xF9); WriteData(0x00); WriteComm(0xFA); WriteData(0x00); WriteComm(0xFB); WriteData(0x30); WriteComm(0xFC); WriteData(0x00); WriteComm(0xFD); WriteData(0x00); WriteComm(0xFE); WriteData(0x00); WriteComm(0xFF); WriteData(0x00); WriteComm(0x60); WriteData(0x50); WriteComm(0x61); WriteData(0x02); WriteComm(0x62); WriteData(0x0B); WriteComm(0x63); WriteData(0x50); WriteComm(0x64); WriteData(0x04); WriteComm(0x65); WriteData(0x0B); WriteComm(0x66); WriteData(0x53); WriteComm(0x67); WriteData(0x08); WriteComm(0x68); WriteData(0x0B); WriteComm(0x69); WriteData(0x53); WriteComm(0x6A); WriteData(0x0A); WriteComm(0x6B); WriteData(0x0B); WriteComm(0x70); WriteData(0x50); WriteComm(0x71); WriteData(0x01); WriteComm(0x72); WriteData(0x0B); WriteComm(0x73); WriteData(0x50); WriteComm(0x74); WriteData(0x03); WriteComm(0x75); WriteData(0x0B); WriteComm(0x76); WriteData(0x53); WriteComm(0x77); WriteData(0x07); WriteComm(0x78); WriteData(0x0B); WriteComm(0x79); WriteData(0x53); WriteComm(0x7A); WriteData(0x09); WriteComm(0x7B); WriteData(0x0B); WriteComm(0x80); WriteData(0x58); WriteComm(0x81); WriteData(0x00); WriteComm(0x82); WriteData(0x04); WriteComm(0x83); WriteData(0x03); WriteComm(0x84); WriteData(0x0C); WriteComm(0x85); WriteData(0x00); WriteComm(0x86); WriteData(0x00); WriteComm(0x87); WriteData(0x00); WriteComm(0x88); WriteData(0x58); WriteComm(0x89); WriteData(0x00); WriteComm(0x8A); WriteData(0x06); WriteComm(0x8B); WriteData(0x03); WriteComm(0x8C); WriteData(0x0E); WriteComm(0x8D); WriteData(0x00); WriteComm(0x8E); WriteData(0x00); WriteComm(0x8F); WriteData(0x00); WriteComm(0x90); WriteData(0x58); WriteComm(0x91); WriteData(0x00); WriteComm(0x92); WriteData(0x08); WriteComm(0x93); WriteData(0x03); WriteComm(0x94); WriteData(0x10); WriteComm(0x95); WriteData(0x00); WriteComm(0x96); WriteData(0x00); WriteComm(0x97); WriteData(0x00); WriteComm(0x98); WriteData(0x58); WriteComm(0x99); WriteData(0x00); WriteComm(0x9A); WriteData(0x0A); WriteComm(0x9B); WriteData(0x03); WriteComm(0x9C); WriteData(0x12); WriteComm(0x9D); WriteData(0x00); WriteComm(0x9E); WriteData(0x00); WriteComm(0x9F); WriteData(0x00); WriteComm(0xA0); WriteData(0x58); WriteComm(0xA1); WriteData(0x00); WriteComm(0xA2); WriteData(0x03); WriteComm(0xA3); WriteData(0x03); WriteComm(0xA4); WriteData(0x0B); WriteComm(0xA5); WriteData(0x00); WriteComm(0xA6); WriteData(0x00); WriteComm(0xA7); WriteData(0x00); WriteComm(0xA8); WriteData(0x58); WriteComm(0xA9); WriteData(0x00); WriteComm(0xAA); WriteData(0x05); WriteComm(0xAB); WriteData(0x03); WriteComm(0xAC); WriteData(0x0D); WriteComm(0xAD); WriteData(0x00); WriteComm(0xAE); WriteData(0x00); WriteComm(0xAF); WriteData(0x00); WriteComm(0xB0); WriteData(0x58); WriteComm(0xB1); WriteData(0x00); WriteComm(0xB2); WriteData(0x07); WriteComm(0xB3); WriteData(0x03); WriteComm(0xB4); WriteData(0x0F); WriteComm(0xB5); WriteData(0x00); WriteComm(0xB6); WriteData(0x00); WriteComm(0xB7); WriteData(0x00); WriteComm(0xB8); WriteData(0x58); WriteComm(0xB9); WriteData(0x00); WriteComm(0xBA); WriteData(0x09); WriteComm(0xBB); WriteData(0x03); WriteComm(0xBC); WriteData(0x11); WriteComm(0xBD); WriteData(0x00); WriteComm(0xBE); WriteData(0x00); WriteComm(0xBF); WriteData(0x00); WriteComm(0xC0); WriteData(0x03); WriteComm(0xC1); WriteData(0x12); WriteComm(0xC2); WriteData(0xAA); WriteComm(0xC3); WriteData(0x30); WriteComm(0xC4); WriteData(0x21); WriteComm(0xC5); WriteData(0xBB); WriteComm(0xC6); WriteData(0x64); WriteComm(0xC7); WriteData(0x55); WriteComm(0xC8); WriteData(0x46); WriteComm(0xC9); WriteData(0x77); WriteComm(0xD0); WriteData(0x03); WriteComm(0xD1); WriteData(0x12); WriteComm(0xD2); WriteData(0xAA); WriteComm(0xD3); WriteData(0x30); WriteComm(0xD4); WriteData(0x21); WriteComm(0xD5); WriteData(0xBB); WriteComm(0xD6); WriteData(0x64); WriteComm(0xD7); WriteData(0x55); WriteComm(0xD8); WriteData(0x46); WriteComm(0xD9); WriteData(0x77); WriteComm(0xF3); WriteData(0x01); WriteComm(0xF0); WriteData(0x00); WriteComm(0xF0); WriteData(0x01); WriteComm(0xF1); WriteData(0x01); WriteComm(0xA0); WriteData(0x0B); WriteComm(0xA3); WriteData(0x2A); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x2B); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x2C); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x2D); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x2E); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x2F); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x30); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x31); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x32); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA3); WriteData(0x33); WriteComm(0xA5); WriteData(0xC3); delay_ms(1); WriteComm(0xA0); WriteData(0x09); WriteComm(0xF1); WriteData(0x10); WriteComm(0xF0); WriteData(0x00); // WriteComm(0x2A); WriteData(0x00); WriteData(0x00); WriteData(0x01); WriteData(0x3F); WriteComm(0x2B); WriteData(0x01); WriteData(0x81); WriteData(0x01); WriteData(0x81); WriteComm(0x4D); WriteData(0x00); WriteComm(0x4E); WriteData(0x00); WriteComm(0x4F); WriteData(0x00); WriteComm(0x4C); WriteData(0x01); delay_ms(10); WriteComm(0x4C); WriteData(0x00); WriteComm(0x2A); WriteData(0x00); WriteData(0x00); WriteData(0x01); WriteData(0x3F); WriteComm(0x2B); WriteData(0x00); WriteData(0x00); WriteData(0x01); WriteData(0x80); WriteComm(0x21); WriteComm(0x35); WriteComm(0x3A); WriteData(0x55); WriteComm(0x11); CommEnd(); delay_ms(120); WriteComm(0x29); // WriteComm(0x2C); CommEnd(); } #endif