阅读:1896回复:6
LCD颜色显示问题,请教大家
我们现在在做一个PDA,270+windows mobile,我在bootloader里面调试LCD(480*272),现在的情况是,背光点亮了,往LCD送数时,我想让整屏都显示红色,就送0XF800(16位的,RGB565显示方式)送
for (i = 0; i <480*272; i++) { *pDst++ = 0xF800; //RED } 这么多数,但是屏幕大概5/6区域是黑色,剩下一小片才是红色,而且红色渐渐变淡,最后变成白色,黑色区域也在缓慢变化,我送的数没有变化呀!而且在CPU的LCD控制寄存器里面的值也设置的没有问题: p_LCDRegs->LCCR1 = (LCD_PPL((480 - 1)) | LCD_HSW(20) | LCD_ELW(40) | LCD_BLW(7) ); p_LCDRegs->LCCR2 = (LCD_LPP(272 - 1) | LCD_VSW(9) | LCD_EFW(3) | LCD_BFW(3) ); 把上面的272跟480换了位置后效果还是一样,我怀疑情况处在调色板上,请教这个问题是怎么回事! 我的QQ:52342999 |
|
沙发#
发布于:2007-03-29 13:25
首先,你只是背光点亮了,不一定确保初始化完全成功了,这个应该还要检查一下。
其次,对于16位色显示来说,应该是没有调色板这个概念吧,不过硬件数据位接错的可能还是有的。 把上面的272跟480换了位置后效果还是一样,证明你的寄存器设置没有起作用,可能是没初始化好或者你的数据送的位置不对。 |
|
板凳#
发布于:2007-03-29 19:27
多谢armite兄了,我理解的初始化就是首先cpu时钟,LCD控制寄存器,GPIO控制寄存器,这些都与硬件图和LCDdata sheet上对应起来了,屏还是只有一小部分能够控制(全送红或全送绿蓝)如果只送一半数(240*272)那么能控制的这一部分会一条一条颜色在闪烁,也不是我所想象的会是要么上半部分显示,要么下部分显示,不知道问题出在哪里了
|
|
地板#
发布于:2007-03-29 19:58
楼主用的是intel的cpu吧 可以检查其他的lcd控制器初始化正确没,比如点时钟频率,bpp值等
还有像armite兄说的有可能数据送的位置不对,就是framebuffer的地址不对 看上去楼主的步骤都是没问题的,可能是由于某一个粗心的小小失误导致的 |
|
地下室#
发布于:2007-03-29 20:14
是Intel的PXA 270,点时钟没有问题,LCDdatasheet上的典型值为9.2Mhz(最大允许值为15Mhz),而我的是8.6M,这个是没有问题的,而且刚开始时是5.2m,我原以为问题处在这里,可是改为8.6后依然显示那么一小块区域,现在两位老兄的意思是framebuffer的地址有问题,我也觉得可能是这里的事,但是又想了,有时不受控制的那片区域是显示黑色的呀(全为0时为黑色),说明也已经有数从buffer里送给LCD了,只是不是我送的而已,所以还是迷惑!
|
|
5楼#
发布于:2007-04-01 20:13
还是好好查一下,比如FRAMEBUFFER的地址是否要对多大的地址对齐(比如一K,一M,等等),
可能还是初始化的流程吧,至少你写的这点代码就有问题: for (i = 0; i <480*272; i++) { *pDst++ = 0xF800; //RED } 既然pDst是16位指针,i每次加2才对嘛. |
|
|
6楼#
发布于:2007-04-02 10:59
你的屏是不是没有外围时序电路的!需要编程初始化的把!
|
|