Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources

This commit is contained in:
2026-07-06 11:30:13 +08:00
commit e76462eeb7
3451 changed files with 1415300 additions and 0 deletions

View File

@@ -0,0 +1,309 @@
#include "lib/lcd/lcd.h"
#if LCD_ILI9881C_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
const uint8_t ili9881c_register_init_tab[][2] = {
CMD(0XFF),DAT(0X98),DAT(0X81),DAT(0X03),
CMD(0X01),DAT(0X00),
CMD(0X02),DAT(0X00),
CMD(0X03),DAT(0X72),
CMD(0X04),DAT(0X00),
CMD(0X05),DAT(0X00),
CMD(0X06),DAT(0X09),
CMD(0X07),DAT(0X00),
CMD(0X08),DAT(0X00),
CMD(0X09),DAT(0X01),
CMD(0X0A),DAT(0X00),
CMD(0X0B),DAT(0X00),
CMD(0X0C),DAT(0X01),
CMD(0X0D),DAT(0X00),
CMD(0X0E),DAT(0X00),
CMD(0X0F),DAT(0X00),
CMD(0X10),DAT(0X00),
CMD(0X11),DAT(0X00),
CMD(0X12),DAT(0X00),
CMD(0X13),DAT(0X00),
CMD(0X14),DAT(0X00),
CMD(0X15),DAT(0X00),
CMD(0X16),DAT(0X00),
CMD(0X17),DAT(0X00),
CMD(0X18),DAT(0X00),
CMD(0X19),DAT(0X00),
CMD(0X1A),DAT(0X00),
CMD(0X1B),DAT(0X00),
CMD(0X1C),DAT(0X00),
CMD(0X1D),DAT(0X00),
CMD(0X1E),DAT(0X40),
CMD(0X1F),DAT(0X80),
CMD(0X20),DAT(0X05),
CMD(0X21),DAT(0X02),
CMD(0X22),DAT(0X00),
CMD(0X23),DAT(0X00),
CMD(0X24),DAT(0X00),
CMD(0X25),DAT(0X00),
CMD(0X26),DAT(0X00),
CMD(0X27),DAT(0X00),
CMD(0X28),DAT(0X33),
CMD(0X29),DAT(0X02),
CMD(0X2A),DAT(0X00),
CMD(0X2B),DAT(0X00),
CMD(0X2C),DAT(0X00),
CMD(0X2D),DAT(0X00),
CMD(0X2E),DAT(0X00),
CMD(0X2F),DAT(0X00),
CMD(0X30),DAT(0X00),
CMD(0X31),DAT(0X00),
CMD(0X32),DAT(0X00),
CMD(0X33),DAT(0X00),
CMD(0X34),DAT(0X04),
CMD(0X35),DAT(0X00),
CMD(0X36),DAT(0X00),
CMD(0X37),DAT(0X00),
CMD(0X38),DAT(0X3c),
CMD(0X39),DAT(0X00),
CMD(0X3A),DAT(0X40),
CMD(0X3B),DAT(0X40),
CMD(0X3C),DAT(0X00),
CMD(0X3D),DAT(0X00),
CMD(0X3E),DAT(0X00),
CMD(0X3F),DAT(0X00),
CMD(0X40),DAT(0X00),
CMD(0X41),DAT(0X00),
CMD(0X42),DAT(0X00),
CMD(0X43),DAT(0X00),
CMD(0X44),DAT(0X00),
CMD(0X50),DAT(0X01),
CMD(0X51),DAT(0X23),
CMD(0X52),DAT(0X45),
CMD(0X53),DAT(0X67),
CMD(0X54),DAT(0X89),
CMD(0X55),DAT(0XAB),
CMD(0X56),DAT(0X01),
CMD(0X57),DAT(0X23),
CMD(0X58),DAT(0X45),
CMD(0X59),DAT(0X67),
CMD(0X5A),DAT(0X89),
CMD(0X5B),DAT(0XAB),
CMD(0X5C),DAT(0XCD),
CMD(0X5D),DAT(0XEF),
CMD(0X5E),DAT(0X11),
CMD(0X5F),DAT(0X01),
CMD(0X60),DAT(0X00),
CMD(0X61),DAT(0X15),
CMD(0X62),DAT(0X14),
CMD(0X63),DAT(0X0E),
CMD(0X64),DAT(0X0F),
CMD(0X65),DAT(0X0C),
CMD(0X66),DAT(0X0D),
CMD(0X67),DAT(0X06),
CMD(0X68),DAT(0X02),
CMD(0X69),DAT(0X07),
CMD(0X6A),DAT(0X02),
CMD(0X6B),DAT(0X02),
CMD(0X6C),DAT(0X02),
CMD(0X6D),DAT(0X02),
CMD(0X6E),DAT(0X02),
CMD(0X6F),DAT(0X02),
CMD(0X70),DAT(0X02),
CMD(0X71),DAT(0X02),
CMD(0X72),DAT(0X02),
CMD(0X73),DAT(0X02),
CMD(0X74),DAT(0X02),
CMD(0X75),DAT(0X01),
CMD(0X76),DAT(0X00),
CMD(0X77),DAT(0X14),
CMD(0X78),DAT(0X15),
CMD(0X79),DAT(0X0E),
CMD(0X7A),DAT(0X0F),
CMD(0X7B),DAT(0X0C),
CMD(0X7C),DAT(0X0D),
CMD(0X7D),DAT(0X06),
CMD(0X7E),DAT(0X02),
CMD(0X7F),DAT(0X07),
CMD(0X80),DAT(0X02),
CMD(0X81),DAT(0X02),
CMD(0X82),DAT(0X02),
CMD(0X83),DAT(0X02),
CMD(0X84),DAT(0X02),
CMD(0X85),DAT(0X02),
CMD(0X86),DAT(0X02),
CMD(0X87),DAT(0X02),
CMD(0X88),DAT(0X02),
CMD(0X89),DAT(0X02),
CMD(0X8A),DAT(0X02),
CMD(0XFF),DAT(0X98),DAT(0X81),DAT(0X04),
//CMD(0X00),DAT(0X00), //3 lane
CMD(0X6C),DAT(0X15),
CMD(0X6E),DAT(0X2A),
CMD(0X6F),DAT(0X35),
CMD(0X3A),DAT(0X94),
CMD(0X8D),DAT(0X15),
CMD(0X87),DAT(0XBA),
CMD(0X26),DAT(0X76),
CMD(0XB2),DAT(0XD1),
CMD(0XB5),DAT(0X06),
//CMD(0X),DAT(0X1),DAT(0X01 ),
CMD(0XFF),DAT(0X98),DAT(0X81),DAT(0X01),
CMD(0X22),DAT(0X0A),
CMD(0X31),DAT(0X00),
CMD(0X53),DAT(0Xa5),
CMD(0X55),DAT(0XA5),
CMD(0X50),DAT(0X9A),
CMD(0X51),DAT(0X9A),
CMD(0X60),DAT(0X22),
CMD(0X61),DAT(0X00),
CMD(0X62),DAT(0X19),
CMD(0X63),DAT(0X10),
CMD(0XA0),DAT(0X08),
CMD(0XA1),DAT(0X18),
CMD(0XA2),DAT(0X1f),
CMD(0XA3),DAT(0X0f),
CMD(0XA4),DAT(0X14),
CMD(0XA5),DAT(0X24),
CMD(0XA6),DAT(0X1B),
CMD(0XA7),DAT(0X1B),
CMD(0XA8),DAT(0X5a),
CMD(0XA9),DAT(0X1c),
CMD(0XAA),DAT(0X29),
CMD(0XAB),DAT(0X4e),
CMD(0XAC),DAT(0X19),
CMD(0XAD),DAT(0X16),
CMD(0XAE),DAT(0X4c),
CMD(0XAF),DAT(0X21),
CMD(0XB0),DAT(0X2a),
CMD(0XB1),DAT(0X48),
CMD(0XB2),DAT(0X62),
CMD(0XB3),DAT(0X39),
//CMD(0XB6),DAT(0Xa0),
CMD(0XB7),DAT(0X02), //03:2 lane 2: 4 lane
CMD(0XC0),DAT(0X08),
CMD(0XC1),DAT(0X0d),
CMD(0XC2),DAT(0X18),
CMD(0XC3),DAT(0X10),
CMD(0XC4),DAT(0X0c),
CMD(0XC5),DAT(0X1d),
CMD(0XC6),DAT(0X10),
CMD(0XC7),DAT(0X16),
CMD(0XC8),DAT(0X61),
CMD(0XC9),DAT(0X1b),
CMD(0XCA),DAT(0X27),
CMD(0XCB),DAT(0X5e),
CMD(0XCC),DAT(0X1c),
CMD(0XCD),DAT(0X1b),
CMD(0XCE),DAT(0X4e),
CMD(0XCF),DAT(0X22),
CMD(0XD0),DAT(0X27),
CMD(0XD1),DAT(0X52),
CMD(0XD2),DAT(0X61),
CMD(0XD3),DAT(0X39),
CMD(0X35),DAT(0X05),
CMD(0X11),
CMD(0XFF),DAT(0X98),DAT(0X81),DAT(0X00),
DLY(120),
CMD(0X11),
DLY(120),
CMD(0X29),
DLY(120),
//CMD(0XFF),DAT(0X98),DAT(0X81),DAT(0X01),
//CMD(0XB6),DAT(0XA0),
DLY(120),
END
};
lcddev_t lcdstruct = {
.name = "ili9881c_mipi",
.lcd_bus_type = LCD_BUS_MIPI,
.bus_width = LCD_BUS_WIDTH_16,
.color_mode = LCD_MODE_565,
//.red_width = LCD_BUS_WIDTH_6,
//.green_width = LCD_BUS_WIDTH_6,
//.blue_width = LCD_BUS_WIDTH_6,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
.lane_num = 4,
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = 30000000,
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 720,
.screen_h = 1280,
.video_x = 0,
.video_y = 0,
.video_w = 720,
.video_h = 1280,
.osd_x = 0,
.osd_y = 0,
.osd_w = 0, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 0, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = ili9881c_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.pclk_inv = 1,
.vlw = 2*2,
.vbp = 30*2,
.vfp = 20*2,
.hlw = 33*2,
.hbp = 100*2,
.hfp = 100*2,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif

View File

@@ -0,0 +1,287 @@
#include "lib/lcd/lcd.h"
#if LCD_JD9852_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
const uint8_t jd9852_register_init_tab[][2] = {
DLY(200),
CMD(0xDF), //Password
DAT(0x98),
DAT(0x51),
DAT(0xE9),
//---------------- PAGE0 --------------
CMD(0xDE),
DAT(0x00),
//VGMP,VGSP,VGMN,VGSN 4.2
CMD(0xB7),
DAT(0x1E),
DAT(0x7D),
DAT(0x1E),
DAT(0x2B),
//Set_R_GAMMA
CMD(0xC8),
DAT(0x3F),
DAT(0x31),
DAT(0x29),
DAT(0x28),
DAT(0x2C),
DAT(0x31),
DAT(0x2D),
DAT(0x2D),
DAT(0x2A),
DAT(0x28),
DAT(0x23),
DAT(0x16),
DAT(0x10),
DAT(0x0E),
DAT(0x08),
DAT(0x0E),
DAT(0x3F),
DAT(0x31),
DAT(0x29),
DAT(0x28),
DAT(0x2C),
DAT(0x31),
DAT(0x2D),
DAT(0x2C),
DAT(0x2A),
DAT(0x28),
DAT(0x23),
DAT(0x16),
DAT(0x10),
DAT(0x0E),
DAT(0x08),
DAT(0x0E),
//POW_CTRL
CMD(0xB9),
DAT(0x33),
DAT(0x08),
DAT(0xCC),
//DCDC_SEL
CMD(0xBB),
DAT(0x46),//VGH 14.75,VGL-9.6
DAT(0x7A),
DAT(0x30),
DAT(0xD0), //3
DAT(0x7C), //6
DAT(0x60),
DAT(0x70),//50
DAT(0x70),
//VDDD_CTRL
CMD(0xBC),
DAT(0x38),
DAT(0x3C),
//SETSTBA
CMD(0xC0),
DAT(0x31),
DAT(0x20),
//SETPANEL(default)
CMD(0xC1),
DAT(0x12),
//SETRGBCYC
CMD(0xC3),
DAT(0x08),
DAT(0x00),
DAT(0x0A),
DAT(0x10),
DAT(0x08),
DAT(0x54),
DAT(0x45),
DAT(0x71),
DAT(0x2C),
//SETRGBCYC(default)
CMD(0xC4),
DAT(0x00),
DAT(0xA0),
DAT(0x79),
DAT(0x0E),
DAT(0x0A),
DAT(0x16),
DAT(0x79),
DAT(0x0E),
DAT(0x0A),
DAT(0x16),
DAT(0x79),
DAT(0x0E),
DAT(0x0A),
DAT(0x16),
DAT(0x82),
DAT(0x00),
DAT(0x03),
//SET_GD(default)
CMD(0xD0),
DAT(0x04),
DAT(0x0C),
DAT(0x6B),
DAT(0x0F),
DAT(0x07),
DAT(0x03),
//RAMCTRL(default)
CMD(0xD7),
DAT(0x13),
DAT(0x00),
//---------------- PAGE2 --------------
CMD(0xDE),
DAT(0x02),
DLY(1),
//DCDC_SET
//SSD_Number(0x06),
CMD(0xB8),
DAT(0x1D),
DAT(0xA0),
DAT(0x2F),
DAT(0x04),
DAT(0x33),
//SETRGBCYC2
CMD(0xC1),
DAT(0x10),
DAT(0x66),
DAT(0x66),
DAT(0x01),
//---------------- PAGE0 --------------
CMD(0xDE),
DAT(0x00),
// sleep out
CMD(0x11), // SLPOUT
DLY(120),
//---------------- PAGE2 --------------
CMD(0xDE),
DAT(0x02),
DLY(1),
//OSCM
CMD(0xC5),
DAT(0x4E),
DAT(0x00),
DAT(0x00),
DLY(1),
//SETMIPI_2
CMD(0xCA),
DAT(0x30),
DAT(0x20),
DAT(0xF4),
DLY(1),
//---------------- PAGE4 --------------
CMD(0xDE),
DAT(0x04),
DLY(1),
//SETPHY3
CMD(0xD3),
DAT(0x3C),
DLY(100),
//---------------- PAGE0 --------------
CMD(0xDE),
DAT(0x00),
DLY(50),
// display on
CMD(0x29), // SLPOUT
END
};
lcddev_t lcdstruct = {
.name = "jd9852_mipi",
.lcd_bus_type = LCD_BUS_MIPI,
.bus_width = LCD_BUS_WIDTH_24,
.color_mode = LCD_MODE_888,
//.red_width = LCD_BUS_WIDTH_6,
//.green_width = LCD_BUS_WIDTH_6,
//.blue_width = LCD_BUS_WIDTH_6,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = 10000000,
.even_order = 0,
.odd_order = 0,
.lane_num = 1,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 240,
.screen_h = 320,
.video_x = 0,
.video_y = 0,
.video_w = 240,
.video_h = 320,
.osd_x = 0,
.osd_y = 0,
.osd_w = 240, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 320, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = jd9852_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.pclk_inv = 1,
.vlw = 2,
.vbp = 2,
.vfp = 10,
.hlw = 2,
.hbp = 8,
.hfp = 12,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif

View File

@@ -0,0 +1,383 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7701S_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
const uint8_t st7701s_register_init_tab[][2] = {
CMD(0x11),
DLY(250),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x13),
CMD(0xEF),
DAT(0x08),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x10),
CMD(0xC0),
DAT(0xE9),
DAT(0x03),
CMD(0xC1),
DAT(0x11),
DAT(0x02),
CMD(0xC2),
DAT(0x07),
DAT(0x06),
CMD(0xC3),
DAT(0x80),
CMD(0xCC),
DAT(0x18),
CMD(0xB0),
DAT(0x00),
DAT(0x0D),
DAT(0x14),
DAT(0x0D),
DAT(0x10),
DAT(0x05),
DAT(0x02),
DAT(0x08),
DAT(0x08),
DAT(0x1E),
DAT(0x05),
DAT(0x13),
DAT(0x11),
DAT(0xA3),
DAT(0x29),
DAT(0x18),
CMD(0xB1),
DAT(0x00),
DAT(0x0C),
DAT(0x14),
DAT(0x0C),
DAT(0x10),
DAT(0x05),
DAT(0x03),
DAT(0x08),
DAT(0x07),
DAT(0x20),
DAT(0x05),
DAT(0x13),
DAT(0x11),
DAT(0xA4),
DAT(0x29),
DAT(0x18),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x11),
CMD(0xB0),
DAT(0x6C),
CMD(0xB1),
DAT(0x4D),
CMD(0xB2),
DAT(0x89),
CMD(0xB3),
DAT(0x80),
CMD(0xB5),
DAT(0x4E),
CMD(0xB7),
DAT(0x85),
CMD(0xB8),
DAT(0x20),
CMD(0xB9),
DAT(0x00),
DAT(0x13),
CMD(0xC0),
DAT(0x09),
CMD(0xC1),
DAT(0x78),
CMD(0xC2),
DAT(0x78),
CMD(0xD0),
DAT(0x88),
CMD(0xE0),
DAT(0x00),
DAT(0x00),
DAT(0x02),
CMD(0xE1),
DAT(0x08),
DAT(0x00),
DAT(0x0A),
DAT(0x00),
DAT(0x07),
DAT(0x00),
DAT(0x09),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE2),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0xE3),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE4),
DAT(0x44),
DAT(0x44),
CMD(0xE5),
DAT(0x0E),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x10),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x0A),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x0C),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
CMD(0xE6),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE7),
DAT(0x44),
DAT(0x44),
CMD(0xE8),
DAT(0x0D),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x0F),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x09),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
DAT(0x0B),
DAT(0x60),
DAT(0xA0),
DAT(0xA0),
CMD(0xEB),
DAT(0x02),
DAT(0x01),
DAT(0xE4),
DAT(0xE4),
DAT(0x44),
DAT(0x00),
DAT(0x40),
CMD(0xEC),
DAT(0x02),
DAT(0x01),
CMD(0xED),
DAT(0xAB),
DAT(0x89),
DAT(0x76),
DAT(0x54),
DAT(0x01),
DAT(0xFF),
DAT(0xFF),
DAT(0xFF),
DAT(0xFF),
DAT(0xFF),
DAT(0xFF),
DAT(0x10),
DAT(0x45),
DAT(0x67),
DAT(0x98),
DAT(0xBA),
CMD(0xEF),
DAT(0x08),
DAT(0x08),
DAT(0x08),
DAT(0x45),
DAT(0x3F),
DAT(0x54),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x13),
CMD(0xE8),
DAT(0x00),
DAT(0x0E),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0x11),
DAT(0x00),
DLY (120),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x13),
CMD(0xE8),
DAT(0x00),
DAT(0x0C),
DLY (10),
CMD(0xE8),
DAT(0x00),
DAT(0x00),
CMD(0xE6),
DAT(0x16),
DAT(0x7C),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x00),
/*
CMD(0xFF),//bist mode
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x12),
CMD(0xD1),
DAT(0x81),
CMD(0xD2),
DAT(0x06),//bist mode 0x00列灰阶分两半 02红03绿04蓝05白边框06棋盘格07黑底白像素网格08RGB彩条
*/
CMD(0x3A),
DAT(0x77),
// DAT(0x55),
CMD(0x29),
DAT(0x00),
DLY (20),
END
};
lcddev_t lcdstruct = {
.name = "st7701s",
.lcd_bus_type = LCD_BUS_RGB,
.bus_width = LCD_BUS_WIDTH_24,
.color_mode = LCD_MODE_888,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
.pclk = 20000000,
.even_order = 0,
.odd_order = 0,
.screen_w = 480,
.screen_h = 854,
.video_x = 0,
.video_y = 0,
.video_w = 480,
.video_h = 854,
.osd_x = 0,
.osd_y = 0,
.osd_w = 480, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 848, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7701s_register_init_tab,
.pclk_inv = 1,
.vlw = 10,
.vbp = 6,
.vfp = 10,
.hlw = 8,
.hbp = 8,
.hfp = 30,
.de_inv = 0,
.hs_inv = 1,
.vs_inv = 1,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
};
#endif

View File

@@ -0,0 +1,657 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7701S_MIPI_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
#define BOE397_IPS 1
const uint8_t st7701s_register_init_tab[][2] = {
#if BOE397_IPS
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xEF),
DAT (0x08),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x10),
CMD (0xC0),
DAT (0x63),
DAT (0x00),
CMD (0xC1),
DAT (0x09),
DAT (0x02),
CMD (0xC2),
DAT (0x07),
DAT (0x02),
CMD (0xCC),
DAT (0x18),
CMD (0xB0),
DAT (0x00),
DAT (0x12),
DAT (0x19),
DAT (0x0D),
DAT (0x12),
DAT (0x0A),
DAT (0x07),
DAT (0x0B),
DAT (0x08),
DAT (0x23),
DAT (0x06),
DAT (0x14),
DAT (0x13),
DAT (0x25),
DAT (0x2B),
DAT (0x1F),
CMD (0xB1),
DAT (0x00),
DAT (0x0A),
DAT (0x13),
DAT (0x0D),
DAT (0x10),
DAT (0x03),
DAT (0x04),
DAT (0x07),
DAT (0x09),
DAT (0x1F),
DAT (0x04),
DAT (0x11),
DAT (0x0E),
DAT (0x23),
DAT (0x2A),
DAT (0x1F),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x11),
CMD (0xB0),
DAT (0x4D),
CMD (0xB1),
DAT (0x55),
CMD (0xB2),
DAT (0x87),
CMD (0xB3),
DAT (0x80),
CMD (0xB5),
DAT (0x4F),
CMD (0xB7),
DAT (0x85),
CMD (0xB8),
DAT (0x23),
CMD (0xB9),
DAT (0x22),
DAT (0x13),
CMD (0xBB),
DAT (0x03),
CMD (0xBC),
DAT (0x10),
CMD (0xC0),
DAT (0x89),
CMD (0xC1),
DAT (0x78),
CMD (0xC2),
DAT (0x78),
CMD (0xEF),
DAT (0x08),
DAT (0x08),
DAT (0x08),
DAT (0x4C),
DAT (0x3F),
DAT (0x54),
CMD (0xD0),
DAT (0x88),
CMD (0xE0),
DAT (0x00),
DAT (0x00),
DAT (0x02),
CMD (0xE1),
DAT (0x04),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x05),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x10),
DAT (0x10),
CMD (0xE2),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xE3),
DAT (0x00),
DAT (0x00),
DAT (0x33),
DAT (0x00),
CMD (0xE4),
DAT (0x22),
DAT (0x00),
CMD (0xE5),
DAT (0x03),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x05),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xE6),
DAT (0x00),
DAT (0x00),
DAT (0x33),
DAT (0x00),
CMD (0xE7),
DAT (0x22),
DAT (0x00),
CMD (0xE8),
DAT (0x04),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x06),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xEB),
DAT (0x02),
DAT (0x00),
DAT (0x40),
DAT (0x40),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xEC),
DAT (0x00),
DAT (0x00),
CMD (0xED),
DAT (0xFA),
DAT (0x45),
DAT (0x0B),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xB0),
DAT (0x54),
DAT (0xAF),
CMD (0xEF),
DAT (0x08),
DAT (0x08),
DAT (0x08),
DAT (0x45),
DAT (0x3F),
DAT (0x54),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xE6),
DAT (0x16),
DAT (0x7c),
CMD (0xe8),
DAT (0x00),
DAT (0x0E),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0x11),
DLY (120),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xe8),
DAT (0x00),
DAT (0x0C),
DLY (10),
CMD (0xe8),
DAT (0x00),
DAT (0x00),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0x35),
DAT (0x00),
#if 0 //test pattern
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x12),
CMD(0xD1),
DAT(0x81),
CMD(0xD2),
DAT(0x06),
#endif
CMD(0x36), // //U&D Y-DIR
DAT(0x00), //rotate 0: 0x00 : rotate 180 :0x10
CMD(0x3A),
DAT(0x77),
CMD (0x21),
DLY(100),
CMD (0x29),
DLY(200),
#else
CMD(0x01),
DLY(120),
CMD(0x11),
DLY(120),
//CMD(0xD3),
//DAT(0x07),
//DAT(0x00),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x11),
CMD(0xD1),
DAT(0x11),
CMD(0x55),
DAT(0xb0), // 80 90 b0
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x10),
CMD(0xC0),
DAT(0x63),
DAT(0x00),
CMD(0xC1),
DAT(0x02), //vbp
DAT(0x0A), //vfp
CMD(0xC2),
DAT(0x37),
DAT(0x08),
CMD(0xC3),
DAT(0x00),
DAT(0x00),
DAT(0x08),
CMD(0xC7),//x-dir
DAT(0x04), // rotate 0 : 0x00 rotate 180 :0x04
CMD(0xCC),
DAT(0x38),
CMD(0xB0),
DAT(0x00),
DAT(0x11),
DAT(0x19),
DAT(0x0C),
DAT(0x10),
DAT(0x06),
DAT(0x07),
DAT(0x0A),
DAT(0x09),
DAT(0x22),
DAT(0x04),
DAT(0x10),
DAT(0x0E),
DAT(0x28),
DAT(0x30),
DAT(0x1C),
CMD(0xB1),
DAT(0x00),
DAT(0x12),
DAT(0x19),
DAT(0x0D),
DAT(0x10),
DAT(0x04),
DAT(0x06),
DAT(0x07),
DAT(0x08),
DAT(0x23),
DAT(0x04),
DAT(0x12),
DAT(0x11),
DAT(0x28),
DAT(0x30),
DAT(0x1C),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x11), // enable bk fun of command 2 BK1
CMD(0xB0),
DAT(0x4D),
CMD(0xB1),
DAT(0x60), //0x56 0x4a 0x5b
CMD(0xB2),
DAT(0x07),
CMD(0xB3),
DAT(0x80),
CMD(0xB5),
DAT(0x47),
CMD(0xB7),
DAT(0x8A),
CMD(0xB8),
DAT(0x21),
CMD(0xC1),
DAT(0x78),
CMD(0xC2),
DAT(0x78),
CMD(0xD0),
DAT(0x88),
DLY(100),
CMD(0xE0),
DAT(0x00),
DAT(0x00),
DAT(0x02),
CMD(0xE1),
DAT(0x01),
DAT(0xA0),
DAT(0x03),
DAT(0xA0),
DAT(0x02),
DAT(0xA0),
DAT(0x04),
DAT(0xA0),
DAT(0x00),
DAT(0x44),
DAT(0x44),
CMD(0xE2),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0xE3),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE4),
DAT(0x44),
DAT(0x44),
CMD(0xE5),
DAT(0x01),
DAT(0x26),
DAT(0xA0),
DAT(0xA0),
DAT(0x03),
DAT(0x28),
DAT(0xA0),
DAT(0xA0),
DAT(0x05),
DAT(0x2A),
DAT(0xA0),
DAT(0xA0),
DAT(0x07),
DAT(0x2C),
DAT(0xA0),
DAT(0xA0),
CMD(0xE6),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE7),
DAT(0x44),
DAT(0x44),
CMD(0xE8),
DAT(0x02),
DAT(0x26),
DAT(0xA0),
DAT(0xA0),
DAT(0x04),
DAT(0x28),
DAT(0xA0),
DAT(0xA0),
DAT(0x06),
DAT(0x2A),
DAT(0xA0),
DAT(0xA0),
DAT(0x08),
DAT(0x2C),
DAT(0xA0),
DAT(0xA0),
CMD(0xEB),
DAT(0x00),
DAT(0x01),
DAT(0xE4),
DAT(0xE4),
DAT(0x44),
DAT(0x00),
DAT(0x40),
CMD(0xED),
DAT(0xFF),
DAT(0xF7),
DAT(0x65),
DAT(0x4F),
DAT(0x0B),
DAT(0xA1),
DAT(0xCF),
DAT(0xFF),
DAT(0xFF),
DAT(0xFC),
DAT(0x1A),
DAT(0xB0),
DAT(0xF4),
DAT(0x56),
DAT(0x7F),
DAT(0xFF),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0x36), // //U&D Y-DIR
DAT(0x10), //rotate 0: 0x00 : rotate 180 :0x10
CMD(0x3A),
DAT(0x77),
#if 0 //test pattern
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x12),
CMD(0xD1),
DAT(0x81),
CMD(0xD2),
DAT(0x06),
#endif
CMD(0x29),
// DLY(120),
// CMD(0x23),
// DLY(120),
#endif
END
};
lcddev_t lcdstruct = {
.name = "st7701s_mipi",
.lcd_bus_type = LCD_BUS_MIPI,
.bus_width = LCD_BUS_WIDTH_24,
.color_mode = LCD_MODE_888,
//.red_width = LCD_BUS_WIDTH_6,
//.green_width = LCD_BUS_WIDTH_6,
//.blue_width = LCD_BUS_WIDTH_6,
.osd_scan_mode = LCD_ROTATE_270,
.scan_mode =LCD_ROTATE_270,// LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = DEFAULT_SYS_CLK/(DEFAULT_SYS_CLK/24000000),
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 480,
.screen_h = 800,
.video_x = 0,
.video_y = 0,
.video_w = 480,//480,
.video_h = 800,//800,
.osd_x = 0,
.osd_y = 0,
.osd_w = 480, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 800, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7701s_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.lane_num = 2,
.pclk_inv = 1,
.vlw = 2,
.vbp = 2,
.vfp = 10,
.hlw = 2,
.hbp = 8,
.hfp = 96,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif

View File

@@ -0,0 +1,206 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7735_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
uint8_t st7735_firt_send[][2]={
CMD( 0x2A),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
//DAT( 0x7F),
DAT( 0x83),
CMD( 0x2B),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
//DAT( 0x9F),
DAT( 0xA1),
// CMD( 0x2C),
END
};
uint8_t st7735_register_init_tab[][2] = {
CMD( 0x11),
DLY( 120 ),
CMD( 0xB1),
DAT( 0x05),
DAT( 0x3C),
DAT( 0x3C),
CMD( 0xB2),
DAT( 0x05),
DAT( 0x3C),
DAT( 0x3C),
CMD( 0xB3),
DAT( 0x05),
DAT( 0x3C),
DAT( 0x3C),
DAT( 0x05),
DAT( 0x3C),
DAT( 0x3C),
CMD( 0xB4),
DAT( 0x03),
CMD( 0xC0),
DAT( 0x28),
DAT( 0x08),
DAT( 0x04),
CMD( 0xC1),
DAT( 0xC0),
CMD( 0xC2),
DAT( 0x0D),
DAT( 0x00),
CMD( 0xC3),
DAT( 0x8D),
DAT( 0x2A),
CMD( 0xC4),
DAT( 0x8D),
DAT( 0xEE),
CMD( 0xC5),
DAT( 0x1A),
CMD( 0x36),
DAT( 0xC0),
CMD( 0xE0),
DAT( 0x04),
DAT( 0x22),
DAT( 0x07),
DAT( 0x0A),
DAT( 0x2E),
DAT( 0x30),
DAT( 0x25),
DAT( 0x2A),
DAT( 0x28),
DAT( 0x26),
DAT( 0x2E),
DAT( 0x3A),
DAT( 0x00),
DAT( 0x01),
DAT( 0x03),
DAT( 0x13),
CMD( 0xE1),
DAT( 0x04),
DAT( 0x16),
DAT( 0x06),
DAT( 0x0D),
DAT( 0x2D),
DAT( 0x26),
DAT( 0x23),
DAT( 0x27),
DAT( 0x27),
DAT( 0x25),
DAT( 0x2D),
DAT( 0x3B),
DAT( 0x00),
DAT( 0x01),
DAT( 0x04),
DAT( 0x13),
CMD( 0x3A),
DAT( 0x05),
CMD( 0x29),
CMD( 0x2A),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
//DAT( 0x7F),
DAT( 0x83),
CMD( 0x2B),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
//DAT( 0x9F),
DAT( 0xA1),
CMD( 0x2C),
END
};
lcddev_t lcdstruct = {
.name = "st7735",
.lcd_bus_type = LCD_BUS_SPI4,
.bus_width = LCD_BUS_WIDTH_1,
.color_mode = LCD_MODE_565,
.osd_scan_mode = LCD_ROTATE_90,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = 24000000,
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 132,
.screen_h = 162,
.video_x = 0,
.video_y = 0,
.video_w = 132,
.video_h = 162,
.osd_x = 0,
.osd_y = 0,
.osd_w = 132, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 162, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7735_register_init_tab,
.frame_table = st7735_firt_send,
.clk_per_pixel = 2,
.pclk_inv = 1,
.vlw = 0,// 0,
.vbp = 0,// 12,
.vfp = 0,// 12,
.hlw = 0,// 1,
.hbp = 0,//14,
.hfp = 0,//13,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.de_inv = 0xff,
.hs_inv = 0,
.vs_inv = 0,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif

View File

@@ -0,0 +1,172 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7789V_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
uint8_t st7789_register_init_tab[][2] = {
//Sleep Out
CMD( 0x11),
DLY( 0x64),
//TEON,and Not consist of HBlanking
CMD( 0x35),
DAT( 0x00),
//Set Tear Scanline,when display 0th line,the TE output
CMD( 0x44),
DAT( 0x00),
DAT( 0x00),
//65K-color RGB interface,and 18bit/pixel
CMD( 0x3A),
DAT( 0x66), // 18bit/pixel DB[6:4]
CMD( 0x21),
CMD( 0xB0),
DAT( 0x11), //RGB mode
DAT( 0xF4), //6bit bus width 666 mode set RIM=1
CMD( 0xB1),
DAT( 0xe0), //RGB hv mode,vsync low active,hsync low active
DAT( 0x05), //vbp
DAT( 0x14), //hbp
//Porch Setting(set VBlank),back porch 8,front porch 8
CMD( 0xB2),
DAT( 0x08), //bpa
DAT( 0x08),
DAT( 0x00),
DAT( 0x22),
DAT( 0x22),
//Gate Control
CMD( 0xB7),
DAT( 0x35),
//-----------------Power Setting------------------
CMD( 0xBB),
DAT( 0x27),
CMD( 0xC0),
DAT( 0x2C),
CMD( 0xC2),
DAT( 0x01),
CMD( 0xC6),
DAT( 0x18),
CMD( 0xC6),
DAT( 0x0F),
CMD( 0xC4),
DAT( 0x20),
CMD( 0xC3),
DAT( 0x10),
CMD( 0xCA),
DAT( 0x0F),
CMD( 0xD0),
DAT( 0xA4),
DAT( 0xA1),
//-----------------Gamma Setting--------------------
CMD( 0xE0),
DAT( 0xD0),
DAT( 0x00),
DAT( 0x03),
DAT( 0x09),
DAT( 0x13),
DAT( 0x1C),
DAT( 0x3A),
DAT( 0x55),
DAT( 0x48),
DAT( 0x18),
DAT( 0x12),
DAT( 0x0E),
DAT( 0x20),
DAT( 0x1E),
CMD( 0xE1),
DAT( 0xD0),
DAT( 0x00),
DAT( 0x03),
DAT( 0x09),
DAT( 0x05),
DAT( 0x25),
DAT( 0x3A),
DAT( 0x55),
DAT( 0x50),
DAT( 0x3D),
DAT( 0x1C),
DAT( 0x1D),
DAT( 0x21),
DAT( 0x1E),
CMD( 0x36),
DAT( 0xC0),
DLY( 0X0F),
CMD( 0x11),
DLY( 0x64),
//Display on
CMD( 0x29),
DLY( 0X05),
//Memory Write
END
};
lcddev_t lcdstruct = {
.name = "st7789",
.lcd_bus_type = LCD_BUS_RGB,
.bus_width = LCD_BUS_WIDTH_6,
.color_mode = LCD_MODE_666,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
.pclk = 15000000,
.even_order = 0,
.odd_order = 0,
.screen_w = 240,
.screen_h = 320,
.video_x = 0,
.video_y = 0,
.video_w = 240,
.video_h = 320,
.osd_x = 0,
.osd_y = 0,
.osd_w = 240, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 320, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7789_register_init_tab,
.pclk_inv = 1,
.vlw = 1,// 0,
.vbp = 0x04,// 12,
.vfp = 8,// 12,
.hlw = 4,// 1,
.hbp = 0x3c,//14,
.hfp = 12,//13,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
};
#endif

View File

@@ -0,0 +1,195 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7789V_MCU_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
uint8_t st7789_register_init_tab[][2] = {
//Sleep Out
CMD( 0x11),
DLY( 0x64),
//TEON,and Not consist of HBlanking
CMD( 0x35),
DAT( 0x00),
//Set Tear Scanline,when display 0th line,the TE output
CMD( 0x44),
DAT( 0x00),
DAT( 0x00),
//65K-color RGB interface,and 18bit/pixel
CMD( 0x3A),
DAT( 0x05), // 16bit/pixel
CMD( 0x21),
#if 0
CMD( 0xB0),
DAT( 0x00), //RGB mode
DAT( 0xF4), //6bit bus width 666 mode
#endif
CMD( 0xB1),
DAT( 0x40), //RGB hv mode,vsync low active,hsync low active
DAT( 0x02), //vbp
DAT( 0x14), //hbp
//Porch Setting(set VBlank),back porch 8,front porch 8
CMD( 0xB2),
DAT( 0x08), //bpa
DAT( 0x08),
DAT( 0x00),
DAT( 0x22),
DAT( 0x22),
//Gate Control
CMD( 0xB7),
DAT( 0x35),
//-----------------Power Setting------------------
CMD( 0xBB),
DAT( 0x27),
CMD( 0xC0),
DAT( 0x2C),
CMD( 0xC2),
DAT( 0x01),
CMD( 0xC6),
DAT( 0x18),
CMD( 0xC6),
DAT( 0x0F),
CMD( 0xC4),
DAT( 0x20),
CMD( 0xC3),
DAT( 0x10),
CMD( 0xCA),
DAT( 0x0F),
CMD( 0xD0),
DAT( 0xA4),
DAT( 0xA1),
//-----------------Gamma Setting--------------------
CMD( 0xE0),
DAT( 0xD0),
DAT( 0x00),
DAT( 0x03),
DAT( 0x09),
DAT( 0x13),
DAT( 0x1C),
DAT( 0x3A),
DAT( 0x55),
DAT( 0x48),
DAT( 0x18),
DAT( 0x12),
DAT( 0x0E),
DAT( 0x20),
DAT( 0x1E),
CMD( 0xE1),
DAT( 0xD0),
DAT( 0x00),
DAT( 0x03),
DAT( 0x09),
DAT( 0x05),
DAT( 0x25),
DAT( 0x3A),
DAT( 0x55),
DAT( 0x50),
DAT( 0x3D),
DAT( 0x1C),
DAT( 0x1D),
DAT( 0x21),
DAT( 0x1E),
CMD( 0x36),
DAT( 0x00),
DLY( 0X0F),
CMD(0x2a),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0xef),
CMD(0x2b),
DAT(0x00),
DAT(0x00),
DAT(0x01),
DAT(0x3f),
CMD( 0x11),
DLY( 0x64),
//Display on
CMD( 0x29),
DLY( 0X05),
//Memory Write
CMD(0x2c), //启动写入
END
};
lcddev_t lcdstruct = {
.name = "st7789",
.lcd_bus_type = LCD_BUS_I80,
.bus_width = LCD_BUS_WIDTH_8,
.color_mode = LCD_MODE_565,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
.pclk = 10000000,
.even_order = 0,
.odd_order = 0,
.screen_w = 240,
.screen_h = 320,
.video_x = 0,
.video_y = 0,
.video_w = 240,
.video_h = 320,
.osd_x = 0,
.osd_y = 0,
.osd_w = 240, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 320, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7789_register_init_tab,
.pclk_inv = 0,
.vlw = 0,// 0,
.vbp = 0,// 12,
.vfp = 0,// 12,
.hlw = 0,// 1,
.hbp = 0,//14,
.hfp = 0,//13,
.de_en = 0,
.vs_en = 0,
.hs_en = 0,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
.signal_config.mcu.resev = 0,
.signal_config.mcu.wr_inv = 1,
.signal_config.mcu.rd_inv = 0,
.signal_config.mcu.cs_inv = 0,
.signal_config.mcu.dc_inv = 1,
};
#endif

View File

@@ -0,0 +1,353 @@
#include "lib/lcd/lcd.h"
#if LCD_ST77903_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
uint8_t st77903_firt_send[][2]={
// CMD( 0x2A),
// DAT( 0x00),
// DAT( 0x00),
// DAT( 0x01),
// DAT( 0x90),
// CMD( 0x2B),
// DAT( 0x00),
// DAT( 0x00),
// DAT( 0x01),
// DAT( 0x90),
CMD( 0x2C),
END
};
uint8_t st77903_register_init_tab[][2] = {
#if 1
//DLY( 40 ),
CMD( 0xf0),
DAT( 0xc3),
CMD( 0xf0),
DAT( 0x96),
CMD( 0xf0),
DAT( 0xa5),
CMD( 0xe9),
DAT( 0x20),
CMD( 0xe7),
DAT( 0x80),
DAT( 0x77),
DAT( 0x1f),
DAT( 0xcc),
CMD( 0xc1),
DAT( 0x77),
DAT( 0x07),
DAT( 0xcf),
DAT( 0x16),
CMD( 0xc2),
DAT( 0x77),
DAT( 0x07),
DAT( 0xcf),
DAT( 0x16),
CMD( 0xc3),
DAT( 0x22),
DAT( 0x02),
DAT( 0x22),
DAT( 0x04),
CMD( 0xc4),
DAT( 0x22),
DAT( 0x02),
DAT( 0x22),
DAT( 0x04),
CMD( 0xc5),
DAT( 0xed),
CMD( 0xe0),
DAT( 0x87),
DAT( 0x09),
DAT( 0x0c),
DAT( 0x06),
DAT( 0x05),
DAT( 0x03),
DAT( 0x29),
DAT( 0x32),
DAT( 0x49),
DAT( 0x0f),
DAT( 0x1b),
DAT( 0x17),
DAT( 0x2a),
DAT( 0x2f),
CMD( 0xe1),
DAT( 0x87),
DAT( 0x09),
DAT( 0x0c),
DAT( 0x06),
DAT( 0x05),
DAT( 0x03),
DAT( 0x29),
DAT( 0x32),
DAT( 0x49),
DAT( 0x0f),
DAT( 0x1b),
DAT( 0x17),
DAT( 0x2a),
DAT( 0x2f),
CMD( 0xe5),
DAT( 0xbe),
DAT( 0xf5),
DAT( 0xb1),
DAT( 0x22),
DAT( 0x22),
DAT( 0x25),
DAT( 0x10),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
CMD( 0xe6),
DAT( 0xbe),
DAT( 0xf5),
DAT( 0xb1),
DAT( 0x22),
DAT( 0x22),
DAT( 0x25),
DAT( 0x10),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
DAT( 0x22),
CMD( 0xec),
DAT( 0x40),
DAT( 0x03),
CMD( 0xb2),
DAT( 0x00),
CMD( 0xb3),
DAT( 0x01),
CMD( 0xb4),
DAT( 0x00),
CMD( 0xb5),
DAT( 0x00),
DAT( 0x08),
DAT( 0x00),
DAT( 0x08),
CMD(0xb6), DAT(0xc7), DAT(0x31),
CMD( 0xa5),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x15),
DAT( 0x2a),
DAT( 0x8a),
DAT( 0x02),
CMD( 0xa6),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x00),
DAT( 0x15),
DAT( 0x2a),
DAT( 0x8a),
DAT( 0x02),
CMD( 0xba),
DAT( 0x0a),
DAT( 0x5a),
DAT( 0x23),
DAT( 0x10),
DAT( 0x25),
DAT( 0x02),
DAT( 0x00),
CMD( 0xbb),
DAT( 0x00),
DAT( 0x30),
DAT( 0x00),
DAT( 0x2c),
DAT( 0x82),
DAT( 0x87),
DAT( 0x18),
DAT( 0x00),
CMD( 0xbc),
DAT( 0x00),
DAT( 0x30),
DAT( 0x00),
DAT( 0x2c),
DAT( 0x82),
DAT( 0x87),
DAT( 0x18),
DAT( 0x00),
CMD( 0xbd),
DAT( 0xa1),
DAT( 0xb2),
DAT( 0x2b),
DAT( 0x1a),
DAT( 0x56),
DAT( 0x43),
DAT( 0x34),
DAT( 0x65),
DAT( 0xff),
DAT( 0xff),
DAT( 0x0f),
CMD( 0x35),
DAT( 0x00),
CMD( 0x36),
DAT( 0x0c),
CMD( 0x3a),
DAT( 0x05),
CMD( 0x21),
CMD( 0x11),
DLY( 50 ),
CMD( 0x29),
DLY( 10 ),
#if 0
// CMD( 0x2A),
// DAT( 0x00),
// DAT( 0x00),
// DAT( 0x01),
// DAT( 0x90),
// CMD( 0x2B),
// DAT( 0x00),
// DAT( 0x00),
// DAT( 0x01),
// DAT( 0x90),
// CMD( 0x2C),
CMD( 0xf0),
DAT( 0xa5),
CMD( 0xb0),
DAT( 0xa5),
CMD( 0xcc),
DAT( 0x40),
DAT( 0x00),
DAT( 0x3f),
DAT( 0x12),
DAT( 0x06),
DAT( 0x06),
DAT( 0x48),
DAT( 0x46),
DAT( 0x00),
#endif
#else
CMD(0xf0), DAT(0xc3),
CMD(0xf0), DAT(0x96),
CMD(0xf0), DAT(0xa5),
CMD(0xe9), DAT(0x20),
CMD(0xe7), DAT(0x80), DAT(0x77),DAT(0x1f),DAT(0xcc),
CMD(0xc1), DAT(0x77), DAT(0x07),DAT(0xc2),DAT(0x07),
CMD(0xc2), DAT(0x77), DAT(0x07),DAT(0xc2),DAT(0x07),
CMD(0xc3), DAT(0x22), DAT(0x02),DAT(0x22),DAT(0x04),
CMD(0xc4), DAT(0x22), DAT(0x02),DAT(0x22),DAT(0x04),
CMD(0xc5), DAT(0x71),
CMD(0xe0), DAT(0x87), DAT(0x09),DAT(0x0c),DAT(0x06),DAT(0x05),DAT(0x03),DAT(0x29),DAT(0x32),DAT(0x49),DAT(0x0f),DAT(0x1b),DAT(0x17),DAT(0x2a),DAT(0x2f),
CMD(0xe1), DAT(0x87), DAT(0x09),DAT(0x0c),DAT(0x06),DAT(0x05),DAT(0x03),DAT(0x29),DAT(0x32),DAT(0x49),DAT(0x0f),DAT(0x1b),DAT(0x17),DAT(0x2a),DAT(0x2f),
CMD(0xe5), DAT(0xb2), DAT(0xf5),DAT(0xbd),DAT(0x24),DAT(0x22),DAT(0x25),DAT(0x10),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),
CMD(0xe6), DAT(0xb2), DAT(0xf5),DAT(0xbd),DAT(0x24),DAT(0x22),DAT(0x25),DAT(0x10),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),DAT(0x22),
CMD(0xec), DAT(0x40), DAT(0x03),
CMD(0x36), DAT(0x0c),
CMD(0x3a), DAT(0x05),
CMD(0xb2), DAT(0x00),
CMD(0xb3), DAT(0x01),
CMD(0xb4), DAT(0x00),
CMD(0xb5), DAT(0x00), DAT(0x08),DAT(0x00),DAT(0x08),
CMD(0xb6), DAT(0xc7), DAT(0x31),
CMD(0xa5), DAT(0x00), DAT(0x00),DAT(0x00),DAT(0x00),DAT(0x20),DAT(0x15),DAT(0x2a),DAT(0x8a),DAT(0x02),
CMD(0xa6), DAT(0x00), DAT(0x00),DAT(0x00),DAT(0x00),DAT(0x20),DAT(0x15),DAT(0x2a),DAT(0x8a),DAT(0x02),
CMD(0xba), DAT(0x0a), DAT(0x5a),DAT(0x23),DAT(0x10),DAT(0x25),DAT(0x02),DAT(0x00),
CMD(0xbb), DAT(0x00), DAT(0x30),DAT(0x00),DAT(0x29),DAT(0x88),DAT(0x87),DAT(0x18),DAT(0x00),
CMD(0xbc), DAT(0x00), DAT(0x30),DAT(0x00),DAT(0x29),DAT(0x88),DAT(0x87),DAT(0x18),DAT(0x00),
CMD(0xbd), DAT(0xa1), DAT(0xb2),DAT(0x2b),DAT(0x1a),DAT(0x56),DAT(0x43),DAT(0x34),DAT(0x65),DAT(0xff),DAT(0xff),DAT(0x0f),
CMD(0x35), DAT(0x00),
CMD(0x21),
CMD(0x11),
DLY(120 ),
CMD(0x29),
DLY(120 ),
CMD(0xf0),
#endif
//DLY(40),
END
};
lcddev_t lcdstruct = {
.name = "st77903",
.lcd_bus_type = LCD_BUS_QSPI,
.bus_width = LCD_BUS_WIDTH_4, //DE: BUS4 DB:BUS2 D8:BUS1
.color_mode = LCD_MODE_565,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = 24000000,
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 400,
.screen_h = 400,
.video_x = 0,
.video_y = 0,
.video_w = 400,
.video_h = 400,
.osd_x = 0,
.osd_y = 0,
.osd_w = 0, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 0, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st77903_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.pclk_inv = 1,
.vlw = 1,// 0,
.vbp = 6,// 12,
.vfp = 6,// 12,
.hlw = 0,// 1,
.hbp = 0,//14,
.hfp = 0,//13,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.de_inv = 0xff,
.hs_inv = 0,
.vs_inv = 0,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif

View File

@@ -0,0 +1,176 @@
#include "lib/lcd/lcd.h"
#if LCD_ST7796_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
uint8_t st7796_register_init_tab[][2] = {
//ST7796
CMD(0x11),
DLY(120),
CMD(0xf0),
DAT(0xc3),
CMD(0xf0),
DAT(0x96),
CMD(0x21),
CMD(0x36),
DAT(0x48),
CMD(0x3A),
DAT(0x66),
//DAT(0x55),
CMD(0xB0),
DAT(0x02),
CMD(0xB4),
DAT(0x01),
CMD(0xB5),
DAT(0x02), //vfp[7:0]
DAT(0x02), //vbp[7:0]
DAT(0x00),
DAT(0x04), //hbp[7:0]
CMD(0xB6),
DAT(0x80), //MCU:80, RGB:20/A0
DAT(0x02),
DAT(0x3B),
CMD(0xB7),
DAT(0xC6),
CMD(0xe8),
DAT(0x40),
DAT(0x8a),
DAT(0x00),
DAT(0x00),
DAT(0x29),
DAT(0x19),
DAT(0xa5),
DAT(0x33),
CMD(0xc2),
DAT(0xa7),
CMD(0xc5),
DAT(0x19),
CMD(0xe0), //Positive Voltage Gamma Control
DAT(0xf0),
DAT(0x00),
DAT(0x08),
DAT(0x0e),
DAT(0x0d),
DAT(0x1a),
DAT(0x37),
DAT(0x54),
DAT(0x47),
DAT(0x2b),
DAT(0x16),
DAT(0x15),
DAT(0x1a),
DAT(0x1d),
CMD(0xe1), //Negative Voltage Gamma Control
DAT(0xf0),
DAT(0x02),
DAT(0x06),
DAT(0x0c),
DAT(0x0e),
DAT(0x29),
DAT(0x34),
DAT(0x44),
DAT(0x47),
DAT(0x2b),
DAT(0x17),
DAT(0x16),
DAT(0x19),
DAT(0x1d),
CMD(0xf0),
DAT(0x3c),
CMD(0xf0),
DAT(0x69),
DLY(120),
CMD(0x29),
DLY(100),
CMD(0x2C),
END
};
lcddev_t lcdstruct = {
.name = "st7796",
.lcd_bus_type = LCD_BUS_I80,
.bus_width = LCD_BUS_WIDTH_6,
.color_mode = LCD_MODE_666,
//.red_width = LCD_BUS_WIDTH_6,
//.green_width = LCD_BUS_WIDTH_6,
//.blue_width = LCD_BUS_WIDTH_6,
.scan_mode = LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = 10000000,
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 320,
.screen_h = 480,
.video_x = 0,
.video_y = 0,
.video_w = 320,
.video_h = 480,
.osd_x = 0,
.osd_y = 0,
.osd_w = 0, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 0, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7796_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.pclk_inv = 1,
.vlw = 0,// 0,
.vbp = 0,// 12,
.vfp = 0,// 12,
.hlw = 0,// 1,
.hbp = 0,//14,
.hfp = 0,//13,
.de_en = 1,
.vs_en = 0,
.hs_en = 0,
.de_inv = 1,
.hs_inv = 0,
.vs_inv = 0,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif