doubao_chat/apps/common/ui/lcd_driver/lcd_tm9486.c

1213 lines
29 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "system/includes.h"
#include "typedef.h"
#include "asm/pap.h"
#include "lcd_drive.h"
#include "lcd_config.h"
#include "gpio.h"
/* HX9486驱动说明 该驱动测试时使用的 wl80 79系列
* 由于该IC推屏能力不够强 推屏的帧数较低 大概在25帧左右
* 在推屏过程中需要使用TE屏幕帧中断 不然会有条纹
* 由于HX9486横屏配置无法调出没有条纹的配置
* 所有只能使用竖屏加RGB旋转来实现UI横屏显示
*/
/* //pap的这个三个配置如下 在板级文件中进行修改
.timing_setup = 0, //具体看pap.h
.timing_hold = 0, //具体看pap.h
.timing_width = 1, //具体看pap.h
*/
#if TCFG_LCD_TM9486X_ENABLE
//版本号:图传:CS_16TC_TM9486X_38TND_230415A
// 对讲:CS_16DJ_TM9486X_38TND_230415A
//分辨率:320*480
//IC型号:68042-147/9481-147通用, 7916 新主控 TM9486新 金星壹
#define LCD_W 480
#define LCD_H 800
#define ROTATE_DEGREE_0 0
#define ROTATE_DEGREE_180 1
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色i
#define READ_ID 0x04
#define REGFLAG_DELAY 0x45
#define DMA_DSPLY 1 //DMA operation
static u8 ui_data_ready = 0;
/*调用lcd_TE_driver完成数据发送*/
extern void send_date_ready();
void msleep(unsigned int ms);
#define lcd_delay(x) msleep(x)
static void WriteCOM_2bit(unsigned int cmd)
{
lcd_cs_pinstate(0);
lcd_rs_pinstate(0);//cmd
lcd_send_byte((cmd >> 8) & 0xff);
lcd_send_byte(cmd & 0xff);
lcd_cs_pinstate(1);
}
void WriteDAT_2bit(u16 dat)
{
lcd_cs_pinstate(0);
lcd_rs_pinstate(1);//dat
/* lcd_send_byte(dat); */
lcd_send_byte((dat >> 8) & 0xff);
lcd_send_byte(dat & 0xff);
lcd_cs_pinstate(1);
}
static u32 Read_ID(u8 index)
{
u32 id = 0;
WriteCOM_2bit(index);
/* id = ReadDAT_16() & 0xff00; */
id = ReadDAT_16();
id |= ReadDAT_16() << 16;
return id;
}
void HX8357_SetRange(u16 xs, u16 xe, u16 ys, u16 ye)
{
/******UI每次发送数据都会调用开窗告诉屏幕要刷新那个区域***********/
set_lcd_ui_x_y(xs, xe, ys, ye);
}
void HX8357_SetRange_1(u16 xs, u16 xe, u16 ys, u16 ye)
{
// WriteCOM_2bit(0x2A);
// WriteDAT_2bit(ys >> 8);
// WriteDAT_2bit(ys);
// WriteDAT_2bit(ye >> 8);
// WriteDAT_2bit(ye);
// WriteCOM_2bit(0x2B);
// WriteDAT_2bit(xs >> 8);
// WriteDAT_2bit(xs);
// WriteDAT_2bit(xe >> 8);
// WriteDAT_2bit(xe);
}
void HX8357_clear_screen(u32 color)
{
lcd_interface_non_block_wait();
WriteCOM_2bit(0x2c00);
u8 *buf = malloc(800 * 480 * 2);
if (!buf) {
printf("no men in %s \n", __func__);
return;
}
for (u32 i = 0; i < 800 * 480; i++) {
buf[2 * i] = (color >> 8) & 0xff;
buf[2 * i + 1] = color & 0xff;
}
WriteDAT_DMA(buf, 800 * 480 * 2);
free(buf);
}
void HX8357_Fill(u8 *img, u32 len)
{
lcd_interface_non_block_wait();
/* WriteCOM_2bit(0x2c00); */
WriteDAT_DMA(img, len);
}
void HX8357_SleepInMode(void)
{
// WriteCOM_2bit(0x10); //Sleep in
// lcd_delay(120); //Delay 120ms
}
void HX8357_SleepOutMode(void)
{
// WriteCOM_2bit(0x11); //Sleep out
// lcd_delay(120); //Delay 120ms
}
void st7789_shown_image(u8 *buff, u16 x_addr, u16 y_addr, u16 width, u16 height)
{
HX8357_SetRange(x_addr, y_addr, width, height);
WriteDAT_DMA(buff, width * height * 2);
}
static void HX8357_set_direction(u8 dir)
{
WriteCOM_2bit(0x36); //扫描方向控制
if (dir == ROTATE_DEGREE_0) { //正向
#if HORIZONTAL_SCREEN
WriteDAT_2bit(0x40);
#else
WriteDAT_2bit(0x00);
#endif
HX8357_SetRange(0, LCD_W - 1, 0, LCD_H - 1);
} else if (dir == ROTATE_DEGREE_180) { //翻转180
#if HORIZONTAL_SCREEN
WriteDAT_2bit(0xc0);
#else
WriteDAT_2bit(0x80);
#endif
}
}
static void HX8357_draw(u8 *map, u32 size)//获取Ui发送出来的数据
{
ui_send_data_ready(map, size);
}
static void HX8357_draw_1(u8 *buf, u32 size, int width, int height)//获取camera发送出来的数据 //数据帧数以camera为基准
{
camera_send_data_ready(buf, size, width, height);
}
static void HX8357_reset(void)
{
printf("reset \n");
lcd_rst_pinstate(1);
lcd_rs_pinstate(1);
lcd_cs_pinstate(1);
lcd_rst_pinstate(1);
lcd_delay(60);
lcd_rst_pinstate(0);
lcd_delay(10);
lcd_rst_pinstate(1);
lcd_delay(100);
}
typedef struct {
u8 cmd;
u8 cnt;
u8 dat[128];
} InitCode;
static void lcd_35510_init()
{
WriteCOM_2bit(0xF000);
WriteDAT_2bit(0xAA);
WriteCOM_2bit(0xF001);
WriteDAT_2bit(0x55);
WriteCOM_2bit(0xF002);
WriteDAT_2bit(0x52);
WriteCOM_2bit(0xF003);
WriteDAT_2bit(0x08);
WriteCOM_2bit(0xF004);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xB000);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB001);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB002);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB600);
WriteDAT_2bit(0x34);
WriteCOM_2bit(0xB601);
WriteDAT_2bit(0x34);
WriteCOM_2bit(0xB602);
WriteDAT_2bit(0x34);
WriteCOM_2bit(0xB100);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB101);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB102);
WriteDAT_2bit(0x09);
WriteCOM_2bit(0xB700);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xB701);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xB702);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xBF00);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xB200);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB201);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB202);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB300);
WriteDAT_2bit(0x05);
WriteCOM_2bit(0xB301);
WriteDAT_2bit(0x05);
WriteCOM_2bit(0xB302);
WriteDAT_2bit(0x05);
WriteCOM_2bit(0xB900);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xB901);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xB902);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xB500);
WriteDAT_2bit(0x0b);
WriteCOM_2bit(0xB501);
WriteDAT_2bit(0x0b);
WriteCOM_2bit(0xB502);
WriteDAT_2bit(0x0b);
WriteCOM_2bit(0xBA00);
WriteDAT_2bit(0x34);
WriteCOM_2bit(0xBA01);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xBA02);
WriteDAT_2bit(0x24);
WriteCOM_2bit(0xBC00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBC01);
WriteDAT_2bit(0xA3);
WriteCOM_2bit(0xBC02);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBD00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBD01);
WriteDAT_2bit(0xa3);
WriteCOM_2bit(0xBD02);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBE00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBE01);
WriteDAT_2bit(0x40);
WriteCOM_2bit(0xD100);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD101);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD102);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD103);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD104);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD105);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD106);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD107);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD108);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD109);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD10A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD10B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD10C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD10D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD10E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD10F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD110);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD111);
WriteDAT_2bit(0x22);
WriteCOM_2bit(0xD112);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD113);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD114);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD115);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD116);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD117);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD118);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD119);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD11A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD11B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD11C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD11D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD11E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD11F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD120);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD121);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD122);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD123);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD124);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD125);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD126);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD127);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD128);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD129);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD12A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD12B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD12C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD12D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD12E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD12F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD130);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD131);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD132);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD133);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD200);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD201);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD202);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD203);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD204);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD205);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD206);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD207);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD208);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD209);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD20A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD20B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD20C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD20D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD20E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD20F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD210);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD211);
WriteDAT_2bit(0x22);
WriteCOM_2bit(0xD212);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD213);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD214);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD215);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD216);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD217);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD218);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD219);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD21A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD21B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD21C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD21D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD21E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD21F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD220);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD221);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD222);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD223);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD224);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD225);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD226);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD227);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD228);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD229);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD22A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD22B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD22C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD22D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD22E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD22F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD230);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD231);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD232);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD233);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD300);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD301);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD302);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD303);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD304);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD305);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD306);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD307);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD308);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD309);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD30A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD30B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD30C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD30D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD30E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD30F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD310);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD311);
WriteDAT_2bit(0x22);
WriteCOM_2bit(0xD312);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD313);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD314);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD315);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD316);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD317);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD318);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD319);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD31A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD31B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD31C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD31D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD31E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD31F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD320);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD321);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD322);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD323);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD324);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD325);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD326);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD327);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD328);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD329);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD32A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD32B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD32C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD32D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD32E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD32F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD330);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD331);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD332);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD333);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD400);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD401);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD402);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD403);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD404);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD405);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD406);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD407);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD408);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD409);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD40A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD40B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD40C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD40D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD40E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD40F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD410);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD411);
WriteDAT_2bit(0x22);
WriteCOM_2bit(0xD412);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD413);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD414);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD415);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD416);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD417);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD418);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD419);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD41A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD41B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD41C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD41D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD41E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD41F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD420);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD421);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD422);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD423);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD424);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD425);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD426);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD427);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD428);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD429);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD42A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD42B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD42C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD42D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD42E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD42F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD430);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD431);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD432);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD433);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD500);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD501);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD502);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD503);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD504);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD505);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD506);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD507);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD508);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD509);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD50A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD50B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD50C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD50D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD50E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD50F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD510);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD511);
WriteDAT_2bit(0x22);
WriteCOM_2bit(0xD512);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD513);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD514);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD515);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD516);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD517);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD518);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD519);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD51A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD51B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD51C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD51D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD51E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD51F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD520);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD521);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD522);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD523);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD524);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD525);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD526);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD527);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD528);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD529);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD52A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD52B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD52C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD52D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD52E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD52F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD530);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD531);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD532);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD533);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xD600);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD601);
WriteDAT_2bit(0x2D);
WriteCOM_2bit(0xD602);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD603);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD604);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD605);
WriteDAT_2bit(0x66);
WriteCOM_2bit(0xD606);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD608);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD609);
WriteDAT_2bit(0x94);
WriteCOM_2bit(0xD60A);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD60B);
WriteDAT_2bit(0xB4);
WriteCOM_2bit(0xD60C);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD60D);
WriteDAT_2bit(0xD0);
WriteCOM_2bit(0xD60E);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xD60F);
WriteDAT_2bit(0xFE);
WriteCOM_2bit(0xD610);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD612);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD613);
WriteDAT_2bit(0x59);
WriteCOM_2bit(0xD614);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD615);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xD616);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xD617);
WriteDAT_2bit(0xD1);
WriteCOM_2bit(0xD618);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD619);
WriteDAT_2bit(0x0C);
WriteCOM_2bit(0xD61A);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD61B);
WriteDAT_2bit(0x0E);
WriteCOM_2bit(0xD61C);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD61D);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD61E);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD61F);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD620);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD621);
WriteDAT_2bit(0xA4);
WriteCOM_2bit(0xD622);
WriteDAT_2bit(0x02);
WriteCOM_2bit(0xD623);
WriteDAT_2bit(0xD7);
WriteCOM_2bit(0xD624);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD625);
WriteDAT_2bit(0xFA);
WriteCOM_2bit(0xD626);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD627);
WriteDAT_2bit(0x28);
WriteCOM_2bit(0xD628);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD629);
WriteDAT_2bit(0x45);
WriteCOM_2bit(0xD62A);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD62B);
WriteDAT_2bit(0x61);
WriteCOM_2bit(0xD62C);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD62D);
WriteDAT_2bit(0x6E);
WriteCOM_2bit(0xD62E);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD62F);
WriteDAT_2bit(0x78);
WriteCOM_2bit(0xD630);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD631);
WriteDAT_2bit(0x7E);
WriteCOM_2bit(0xD632);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xD633);
WriteDAT_2bit(0x7F);
WriteCOM_2bit(0xF000);
WriteDAT_2bit(0x55);
WriteCOM_2bit(0xF001);
WriteDAT_2bit(0xAA);
WriteCOM_2bit(0xF003);
WriteDAT_2bit(0x08);
WriteCOM_2bit(0xF004);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB600);
WriteDAT_2bit(0x0A);
WriteCOM_2bit(0xB700);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB701);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB800);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xB801);
WriteDAT_2bit(0x05);
WriteCOM_2bit(0xB802);
WriteDAT_2bit(0x05);
WriteCOM_2bit(0xB803);
WriteDAT_2bit(0x05);
//WriteCOM_2bit(0xBA00 ); //WriteDAT_2bit(0x01);
WriteCOM_2bit(0xBC00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBC01);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBC02);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBD00);
WriteDAT_2bit(0x02);/////////////////////////////////fps
WriteCOM_2bit(0xBD01);
WriteDAT_2bit(0x90);
WriteCOM_2bit(0xBD02);
WriteDAT_2bit(0x07);
WriteCOM_2bit(0xBD03);
WriteDAT_2bit(0x31);
WriteCOM_2bit(0xBD04);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBE00);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xBE01);
WriteDAT_2bit(0x84);
WriteCOM_2bit(0xBE02);
WriteDAT_2bit(0x07);
WriteCOM_2bit(0xBE03);
WriteDAT_2bit(0x31);
WriteCOM_2bit(0xBE04);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xBF00);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xBF01);
WriteDAT_2bit(0x84);
WriteCOM_2bit(0xBF02);
WriteDAT_2bit(0x07);
WriteCOM_2bit(0xBF03);
WriteDAT_2bit(0x31);
WriteCOM_2bit(0xBF04);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xCC00);
WriteDAT_2bit(0x03);
WriteCOM_2bit(0xCC01);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xCC02);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB100);
WriteDAT_2bit(0xF8);
WriteCOM_2bit(0xB101);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xF000);
WriteDAT_2bit(0x55);
WriteCOM_2bit(0xF001);
WriteDAT_2bit(0xAA);
WriteCOM_2bit(0xF002);
WriteDAT_2bit(0x52);
WriteCOM_2bit(0xF003);
WriteDAT_2bit(0x08);
WriteCOM_2bit(0xF004);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xB400);
WriteDAT_2bit(0x10);
WriteCOM_2bit(0xF000);
WriteDAT_2bit(0xAA);
WriteCOM_2bit(0xFF01);
WriteDAT_2bit(0x55);
WriteCOM_2bit(0xFF02);
WriteDAT_2bit(0x25);
WriteCOM_2bit(0xFF03);
WriteDAT_2bit(0x01);
WriteCOM_2bit(0xFF04);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xF901);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0xF902);
WriteDAT_2bit(0x0F);
WriteCOM_2bit(0xF903);
WriteDAT_2bit(0x23);
WriteCOM_2bit(0xF904);
WriteDAT_2bit(0x37);
WriteCOM_2bit(0xF905);
WriteDAT_2bit(0x4B);
WriteCOM_2bit(0xF906);
WriteDAT_2bit(0x5F);
WriteCOM_2bit(0xF907);
WriteDAT_2bit(0x73);
WriteCOM_2bit(0xF908);
WriteDAT_2bit(0x87);
WriteCOM_2bit(0xF909);
WriteDAT_2bit(0x98);
WriteCOM_2bit(0xF90A);
WriteDAT_2bit(0xAF);
WriteCOM_2bit(0x2A00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0x2A01);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0x2A02);
WriteDAT_2bit(0x01);//01
WriteCOM_2bit(0x2A03);
WriteDAT_2bit(0xDF);//DF
WriteCOM_2bit(0x2B00);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0x2B01);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0x2B02);
WriteDAT_2bit(0x03);//03
WriteCOM_2bit(0x2B03);
WriteDAT_2bit(0x1F);//1F
/* WriteCOM_2bit(0x3600); WriteDAT_2bit(0x00); */
/* WriteCOM_2bit(0x4400); WriteDAT_2bit(0x04); */
/* WriteCOM_2bit(0x4401); WriteDAT_2bit(0x1f); */
/* WriteCOM_2bit(0xb200); WriteDAT_2bit(0xff); */
/* WriteCOM_2bit(0xb201); WriteDAT_2bit(0x01); */
/* WriteCOM_2bit(0xb202); WriteDAT_2bit(0x00); */
/* WriteCOM_2bit(0xb203); WriteDAT_2bit(0xff); */
/* WriteCOM_2bit(0xb204); WriteDAT_2bit(0xff); */
/* {0xB2, 5, {0x7f, 0x01, 0x00, 0xff, 0xff}},//有关TE时间控制 */
WriteCOM_2bit(0x3500);
WriteDAT_2bit(0x00);
WriteCOM_2bit(0x3A00);
WriteDAT_2bit(0x55);
//
//
//
WriteCOM_2bit(0x1100);
delay_2ms(20);
WriteCOM_2bit(0x2900);
delay_2ms(10);
WriteCOM_2bit(0x2C00);
//delay_2ms(60);
}
static void HX8357_init_code(const InitCode *code, u8 cnt)
{
for (u8 i = 0; i < cnt; i++) {
if (code[i].cmd == REGFLAG_DELAY) {
lcd_delay(code[i].cnt);
} else {
WriteCOM_2bit(code[i].cmd);
for (u8 j = 0; j < code[i].cnt; j++) {
WriteDAT_2bit(code[i].dat[j]);
}
}
}
}
void HX8357_lvgl_Fill(u16 xs, u16 xe, u16 ys, u16 ye, u8 *img)
{
u32 len = 0;
/* lcd_interface_non_block_wait(); */
len = (xe + 1 - xs) * (ye + 1 - ys) * 2;
WriteCOM_2bit(0x2A00);
WriteDAT_2bit(xs >> 8);
WriteCOM_2bit(0x2A01);
WriteDAT_2bit(xs);
WriteCOM_2bit(0x2A02);
WriteDAT_2bit(xe >> 8);
WriteCOM_2bit(0x2A03);
WriteDAT_2bit(xe);
WriteCOM_2bit(0x2B00);
WriteDAT_2bit(ys >> 8);
WriteCOM_2bit(0x2B01);
WriteDAT_2bit(ys);
WriteCOM_2bit(0x2B02);
WriteDAT_2bit(ye >> 8);
WriteCOM_2bit(0x2B03);
WriteDAT_2bit(ye);
WriteCOM_2bit(0x2C00);
WriteDAT_DMA(img, len);
}
static void HX8357_led_ctrl(u8 status)
{
//背光控制以及放在//lcd_te_driver.c 优化开机显示
/*lcd_bl_pinstate(status);*/
}
void HX8357_test(void)
{
lcd_bl_pinstate(BL_ON);
while (1) {
os_time_dly(100);
HX8357_clear_screen(BLUE);
printf("LCD_HX8357_TSET_BLUE\n");
os_time_dly(100);
HX8357_clear_screen(GRED);
printf("LCD_HX8357_TSET_GRED\n");
os_time_dly(100);
HX8357_clear_screen(BRRED);
printf("LCD_HX8357_TSET_BRRED\n");
os_time_dly(100);
HX8357_clear_screen(YELLOW);
printf("LCD_HX8357_TSET_YELLOW\n");
}
}
static int HX8357_init(void)
{
printf("LCD_HX8357 init_start\n");
gpio_direction_output(IO_PORTC_09, 1);
gpio_direction_output(IO_PORTH_00, 0);
HX8357_reset();
//HX8357_set_direction(ROTATE_DEGREE_0);
lcd_35510_init();
init_TE(HX8357_Fill);
/* HX8357_test(); */
printf("LCD_HX8357 config succes\n");
return 0;
}
REGISTER_LCD_DEV(LCD_HX8357) = {
.name = "HX8357",
.lcd_width = LCD_W,
.lcd_height = LCD_H,
.color_format = LCD_COLOR_RGB565,
.column_addr_align = 1,
.row_addr_align = 1,
.LCD_Init = HX8357_init,
.SetDrawArea = HX8357_SetRange,
.LCD_Draw = HX8357_draw,
.LCD_Draw_1 = HX8357_draw_1,
.LCD_DrawToDev = HX8357_Fill,//应用层直接到设备接口层,需要做好缓冲区共用互斥,慎用!
.LCD_Lvgl_Full = HX8357_lvgl_Fill,//LVGL发送数据接口
.LCD_ClearScreen = HX8357_clear_screen,
.Reset = HX8357_reset,
.BackLightCtrl = HX8357_led_ctrl,
};
#endif