shuailicn
驱动牛犊
驱动牛犊
  • 注册日期2006-10-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:1896回复:6

LCD颜色显示问题,请教大家

楼主#
更多 发布于:2007-03-29 11:39
  我们现在在做一个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
armite
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-29 13:25
首先,你只是背光点亮了,不一定确保初始化完全成功了,这个应该还要检查一下。
其次,对于16位色显示来说,应该是没有调色板这个概念吧,不过硬件数据位接错的可能还是有的。
把上面的272跟480换了位置后效果还是一样,证明你的寄存器设置没有起作用,可能是没初始化好或者你的数据送的位置不对。
shuailicn
驱动牛犊
驱动牛犊
  • 注册日期2006-10-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-29 19:27
多谢armite兄了,我理解的初始化就是首先cpu时钟,LCD控制寄存器,GPIO控制寄存器,这些都与硬件图和LCDdata sheet上对应起来了,屏还是只有一小部分能够控制(全送红或全送绿蓝)如果只送一半数(240*272)那么能控制的这一部分会一条一条颜色在闪烁,也不是我所想象的会是要么上半部分显示,要么下部分显示,不知道问题出在哪里了
rilyyu
驱动小牛
驱动小牛
  • 注册日期2006-11-17
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分512分
  • 威望130点
  • 贡献值0点
  • 好评度127点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-29 19:58
楼主用的是intel的cpu吧 可以检查其他的lcd控制器初始化正确没,比如点时钟频率,bpp值等
还有像armite兄说的有可能数据送的位置不对,就是framebuffer的地址不对
看上去楼主的步骤都是没问题的,可能是由于某一个粗心的小小失误导致的
shuailicn
驱动牛犊
驱动牛犊
  • 注册日期2006-10-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-29 20:14
是Intel的PXA 270,点时钟没有问题,LCDdatasheet上的典型值为9.2Mhz(最大允许值为15Mhz),而我的是8.6M,这个是没有问题的,而且刚开始时是5.2m,我原以为问题处在这里,可是改为8.6后依然显示那么一小块区域,现在两位老兄的意思是framebuffer的地址有问题,我也觉得可能是这里的事,但是又想了,有时不受控制的那片区域是显示黑色的呀(全为0时为黑色),说明也已经有数从buffer里送给LCD了,只是不是我送的而已,所以还是迷惑!
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-01 20:13
还是好好查一下,比如FRAMEBUFFER的地址是否要对多大的地址对齐(比如一K,一M,等等),
可能还是初始化的流程吧,至少你写的这点代码就有问题:
     for (i = 0; i <480*272; i++)
    {
        *pDst++ = 0xF800;       //RED
    }

既然pDst是16位指针,i每次加2才对嘛.
学海无涯
deedbox
驱动牛犊
驱动牛犊
  • 注册日期2005-09-20
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望89点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-02 10:59
你的屏是不是没有外围时序电路的!需要编程初始化的把!
游客

返回顶部