|
遇到个问题,搞了很费力,
屏的显示,没有花屏,不过有时会在X或Y方向发生偏移,左面的图标跑右面去了,底部的button bar跑顶部去了。
首先确保blockwrite是无误的,内部控制寄存器的位数和写入的命令是否一致。
考虑了2个方向,1.时序造成的,2.初始化中的频率设定也就是功耗可能引起,这个主要是基于panel从GRAM中读取显示数据,即帧频和MCU(DMA)向GRAM中写入数据是否同步来考虑。首先调节时序,调节1,2,4的参数使得write signal的速度变慢或变快。后面调节方法2中的频率问题。
最终把这些尝试了后,基本上没有起到效果,那么就想,是否可能是屏的ic有问题,这样考虑做个测试,在开机后,在屏幕上画一条线,这条线有很多个单像素大小的窗口组成,如果线不是完整,说明屏自身有问题。
《》这样的话,首先要屏蔽掉blockwrite,这样开机后才会一直停留在清屏的状态。
《》在init中的最后先刷屏,可以把屏整个刷成白色(整个方法在上面处理开机闪屏中写过了,一样)//必须的这一步,不然开机后整个屏是花的,你看不出那条线了
然后就要画n个单像素大小的窗口了,看它组成的一条线是否可以正常显示
#define lcd_cdwrite(ctr,data) LCD_CrtlWrite_SPFD5408(ctr); LCD_DataWrite_SPFD5408(data);
{
kal_uint16 i;
for(i=0;i<LCD_WIDTH;i++)
{
lcd_cdwrite(0x03,i); // column start
lcd_cdwrite(0x05,i); // column end
lcd_cdwrite(0x07,i); // row start
lcd_cdwrite(0x09,i); // row end
/*上面四句就设定了一个像素点大小的窗口,当然寄存器的地址不一定是这个*/
LCD_CrtlWrite_SPFD5408(0x0022); //这条命令不能放在循环的外面,开启一个新窗口传输数据结束后,在开新窗口都需要这个命令
LCD_DataWrite_SPFD5408( 0xff40 ); //某个颜色,
}
}
这样处理后,开机后看显示的直线是否完全。
****************
水平有限,可能有的的地方说的不严谨或有误,请谅解和指正 |
|