162 lines
3.2 KiB
C
162 lines
3.2 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 0x0
|
||
|
||
#define GUI_SCREEN_OFS_X 0
|
||
#define GUI_SCREEN_OFS_Y 12
|
||
|
||
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();
|
||
}
|
||
|
||
void st7789_display_point(uint16_t x1, uint16_t y1, uint16_t color)
|
||
{
|
||
TFT_SPI_DATA_EN();
|
||
delay_5ms(200);
|
||
tft_gui_set_window(0, 0, x1, y1);
|
||
tft_frame_start();
|
||
for (int x = 0; x <= x1; x++) {
|
||
for (int y = 0; y <= y1; y++)
|
||
{
|
||
WDT_CLR();
|
||
WriteData(color >> 8);
|
||
WriteData(color);
|
||
}
|
||
}
|
||
tft_write_end();
|
||
}
|
||
|
||
static void tft_240_st7789_init(void)
|
||
{
|
||
printf("tft_st7789_init\n");
|
||
|
||
tft_hw_reset();
|
||
|
||
delay_ms(120);
|
||
|
||
WriteComm(0x11);
|
||
|
||
delay_ms(120);
|
||
|
||
WriteComm(0x36);
|
||
WriteData(0x00);
|
||
|
||
WriteComm(0x3A);
|
||
WriteData(0x05);
|
||
|
||
WriteComm(0x35);
|
||
WriteData(0x00);
|
||
|
||
WriteComm(0xB2);
|
||
WriteData(0x5C);
|
||
WriteData(0x5C);
|
||
WriteData(0x00);
|
||
WriteData(0x33);
|
||
WriteData(0x33);
|
||
|
||
WriteComm(0xB7);
|
||
WriteData(0x57);
|
||
|
||
WriteComm(0xBB);
|
||
WriteData(0x15);
|
||
|
||
WriteComm(0xC0);
|
||
WriteData(0x2C);
|
||
|
||
WriteComm(0xC2);
|
||
WriteData(0x01);
|
||
|
||
WriteComm(0xC3);
|
||
WriteData(0x14);
|
||
|
||
WriteComm(0xC6);
|
||
WriteData(0x16);
|
||
|
||
WriteComm(0xD0);
|
||
WriteData(0xA7);
|
||
|
||
WriteComm(0xD0);
|
||
WriteData(0xA4);
|
||
WriteData(0xA1);
|
||
|
||
WriteComm(0xD6);
|
||
WriteData(0xA1); //sleep in后,gate输出为GND
|
||
|
||
WriteComm(0xE0);
|
||
WriteData(0x70);
|
||
WriteData(0x03);
|
||
WriteData(0x0A);
|
||
WriteData(0x09);
|
||
WriteData(0x09);
|
||
WriteData(0x14);
|
||
WriteData(0x36);
|
||
WriteData(0x54);
|
||
WriteData(0x4C);
|
||
WriteData(0x3C);
|
||
WriteData(0x17);
|
||
WriteData(0x18);
|
||
WriteData(0x2E);
|
||
WriteData(0x2E);
|
||
|
||
WriteComm(0xE1);
|
||
WriteData(0x70);
|
||
WriteData(0x08);
|
||
WriteData(0x0E);
|
||
WriteData(0x0A);
|
||
WriteData(0x0A);
|
||
WriteData(0x35);
|
||
WriteData(0x35);
|
||
WriteData(0x44);
|
||
WriteData(0x4C);
|
||
WriteData(0x3A);
|
||
WriteData(0x18);
|
||
WriteData(0x1A);
|
||
WriteData(0x2C);
|
||
WriteData(0x2F);
|
||
WriteComm(0x21);
|
||
WriteComm(0x29);
|
||
WriteComm(0x2C);
|
||
}
|
||
|
||
tft_driver_t tft_driver_240_st7789 = {
|
||
.id = GUI_TFT_SCREEN_ID,
|
||
.init = tft_240_st7789_init,
|
||
.read_id = tft_read_id,
|
||
.set_window = tft_gui_set_window,
|
||
}; |