354 lines
6.8 KiB
C
354 lines
6.8 KiB
C
|
|
#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
|