MTK之LCD移植详解(2)

2019-09-01 19:40

LCD_SEND_DMA_CMD(2);\\ }\\

9位:分2次,先传高8位,有问题了,总线是9位的,咋办,遇到这种情况,一般都是将数据映射到高位,也就是将数据映射到D17~D10,把D9空缺。D0~D8在硬件上就没接,一般都是这么接的,接高位。具体LCD datasheet有说明。

然后传低8位,做法和高8位一样。 #define LCD_CtrlWrite_XXX(_data) \\ {\\

//把高8位的数据映射到总线9位中的高8位。 SET_LCD_CMD_PARAMETER(0,LCD_CMD,((_data & 0xFF00)>>7));

SET_LCD_CMD_PARAMETER(1,LCD_CMD,((_data & 0xFF)<<1)); LCD_SEND_DMA_CMD(2);\\ }\\

16位:正好16位,不用移位。 #define LCD_CtrlWrite_XXX(_data) \\ {\\

SET_LCD_CMD_PARAMETER(0,LCD_CMD, _data); LCD_SEND_DMA_CMD(1);\\ }\\

18位:这个有点特殊,把16位数据映射到18位的总线上,有2位是空缺的,空哪2位的,那就空D0和D9吧,这是惯例。具体可以问问LCD的厂商。

#define LCD_CtrlWrite_XXX(_data) \\ {\\

SET_LCD_CMD_PARAMETER(0,LCD_CMD,(((_data&0xFF00)<<2)|((_data&0xFF)<<1)));

LCD_SEND_DMA_CMD(1);\\ }\\

g. 实现LCD_Init_XXX函数。

参考厂商给的初始化代码吧,如果你牛X,那就参考LCD的datasheet,应该会有说明如何初始化。我拿到的一份datasheet,看了半天,没有看到如果初始化的东西。

h. 实现LCD_BlockWrite_XXX函数。

这个函数主要作用就是将刷屏的坐标传入到相应的寄存器。

首先要查LCD datasheet中存该坐标的寄存器是哪个,怎么存。比如查到:

可以看到,寄存器2A可以存startx,endx的数据,而寄存器2B则是存starty,endy的数据。所以可以写如下代码: SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x002A);

SET_LCD_CMD_PARAMETER(1,LCD_DATA,((start_x+0x0000) >>8)&0x00FF); SET_LCD_CMD_PARAMETER(2,LCD_DATA,(start_x+0x0000)&0x00FF);

SET_LCD_CMD_PARAMETER(3,LCD_DATA,((end_x+0x0000) >>8)&0x00FF); SET_LCD_CMD_PARAMETER(4,LCD_DATA,(end_x+0x0000)&0x00FF); SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x002B);

SET_LCD_CMD_PARAMETER(6,LCD_DATA,((start_y+0x0000) >>8)&0x00FF); SET_LCD_CMD_PARAMETER(7,LCD_DATA,(start_y+0x0000)&0x00FF);

SET_LCD_CMD_PARAMETER(8,LCD_DATA,((end_y+0x0000) >>8)&0x00FF); SET_LCD_CMD_PARAMETER(9,LCD_DATA,(end_y+0x0000)&0x00FF); i. 实现LCD_EnterSleep_XXX/LCD_ExitSleep_XXX函数。

这个也是查LCD datasheet,看看要那个命令。 void LCD_EnterSleep_XXX(void) {

LCD_CtrlWrite_XXX(0x10); //Sleep in

Delayms(5); //这个数字要查看data sheet的说明。 }

void LCD_ExitSleep_XXX(void) {

LCD_CtrlWrite_XXX(0x11); //Sleep out Delayms(120);//看datasheet说明 }

比如我拿到的LCD datasheet有这样的说明:

It is necessary to wait 5 msec before sending the next command. The time

allows the supply

voltages and clock circuits to stabilize.

Also, wait 120 msec after sending Sleep Out command is necessary(when in Sleep In Mode) before

Sleep In command is sent.

j. 其它一堆函数,就参考MTK自带的LCD驱动吧,所有屏没区别,一样的,

照搬就行。

k. 设置操作时序。

在lcd.c文件中的init_lcd_interface函数中设置:

// CS to WR setup time,是指片选信号拉低到V1L开始到WRX信号拉低到V1L结束,//等于Tcs – TWRL

SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);

// CS to WR hold time,WRX拉高后,片选保持时间,等于TCSH SET_LCD_PARALLEL_CE2WR_HOLD_TIME(1);

//data write wait state period指的是写信号有效的时间,即拉低的时间,图中的TWRL

SET_LCD_PARALLEL_WRITE_WAIT_STATE(5);

//CS to RD setup time.是指片选有效到读信号的建立时间,图中为TRCS – TRDL

SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);

//是指读信号被拉低的时间,图中的TRDL /TRDLRM

SET_LCD_PARALLEL_READ_LATENCY_TIME(20);

//它是指两个连续的写信号之间的保护周期数,也就是在两个连续的写信号之间片选信号拉//高的周期数,这个设定是根据BB 的datasheet,比如在mt6253上,如下图

//图中的PERIOD数就是在 SET_LCD_ROI_CTRL_CMD_LATENCY(0)里面设置的周期数,它就是//在两个连续的写之间CS拉高的周期数,图中的+1,+2是mt6253上硬件默认埋的周期数

//你可以不用管,也不要被它迷惑,你要看你所用平台的datasheet里面Write timing diagram.

//因为这个只和BB有关,所以你不能进行更改。MTK release的版本已经帮你修改好。

SET_LCD_ROI_CTRL_CMD_LATENCY(0);

l. 设置功能函数。

LCD_Funcs LCD_func_ILI9327 = { LCD_Init_ILI9327, LCD_PWRON_ILI9327, LCD_SetContrast_ILI9327, LCD_ON_ILI9327,

LCD_BlockWrite_ILI9327, LCD_Size_ILI9327,

LCD_EnterSleep_ILI9327, LCD_ExitSleep_ILI9327,

LCD_Partial_On_ILI9327, LCD_Partial_Off_ILI9327, LCD_Partial_line_ILI9327, /*Engineering mode*/ LCD_GetParm_ILI9327, LCD_SetBias_ILI9327, LCD_Contrast_ILI9327, LCD_LineRate_ILI9327,

LCD_Temp_Compensate_ILI9327 #ifdef LCM_ROTATE_SUPPORT

,LCD_Set_Scan_Direction_ILI9327 #endif

#ifdef LQT_SUPPORT/*Do not remove LQT code segment*/ ,LCD_gamma_test ,LCD_flicker_test #endif };

#ifdef DUAL_LCD

LCD_Funcs LCD_func_NT75751 = { LCD_Init_NT75751, LCD_PWRON_NT75751, LCD_SetVoltLevel_NT75751, LCD_ON_NT75751,

LCD_BlockWrite_NT75751, LCD_Size_NT75751,

LCD_EnterSleep_NT75751, LCD_ExitSleep_NT75751, 0, 0, 0,

/*Engineering mode*/ LCD_GetParm_NT75751, LCD_SetBias_NT75751, LCD_Contrast_NT75751, LCD_LineRate_NT75751,

LCD_Temp_Compensate_NT75751 #ifdef LCM_ROTATE_SUPPORT

,LCD_Set_Scan_Direction_NT75751 #endif };

void LCD_FunConfig(void) {

MainLCD = &LCD_func_ILI9327;

#ifdef DUAL_LCD

SubLCD = &LCD_func_NT75751; #endif }


MTK之LCD移植详解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:细胞骨架习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: