CuiCuiYH
驱动牛犊
驱动牛犊
  • 注册日期2007-09-03
  • 最后登录2009-06-26
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望115点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1544回复:2

请问pxa300 接TFT320x240LCD颜色问题

楼主#
更多 发布于:2008-08-28 15:24
 我们接线是这样的active color18-bit-per-Pixel to 24-bit display Typical connection:
RGB:6 6 6

描述:28bpp_24bitpanel

图片:18bpp-24bit.JPG

28bpp_24bitpanel

但是BSP 里是这样方式的active color16-bit-per-Pixel to 24-bit display Typical connection:
RGB:5 6 5
 

描述:16bpp-24bitpanel

图片:16bbp-24bit.JPG

16bpp-24bitpanel

 因为是DVT 阶段所以想硬件改变如下:
RGB:6 6 4
 

描述:RGB665

图片:pxa lcd.JPG

RGB665


正常的16bit的LCDC是这样分配的:5 bits red, 6 bits green, and 5 bits blue
由于我们接线成18bit转24bit所以:我们实际是这样的:6 bits red, 6 bits green, and 4 bits blue
即把LDD16,LDD17 不用,将red的最高2位RED7,RED6,接ldd14 LDD15.
 
所以我们要改bsp使565的RBG 编程466的RGB方式。但是我还没找到具体改那个地方。
下面是我找到可能的地方:
1,在函数C:\WINCE500\PLATFORM\COMMON\SRC\SOC\pxa3xx\DISPLAY\PXA320_lcd\dispdrvr.c里:
void DispDrvrSetPalette (const PALETTEENTRY source[],unsigned short firstEntry,unsigned short numEntries)
{
    int i;
    int end = firstEntry + numEntries;
    // Don't walk off the end of the palette buffer.
    if (firstEntry > sizeof(source) || end >= sizeof(source))
    {
        return;
    }
    EnterCriticalSection(&frameDescriptorMutex);
    // Store the palette entries into palette ram
    for(i=firstEntry;i<end;i++)
    {
        // store 5 bits red, 6 bits green, and 5 bits blue
        v_pPaletteBuffer->palette = (
          (source.peBlue)            >>  3    |
            ((source.peGreen & 0xfc)    <<  3)    |
            ((source.peRed    & 0xf8)    <<  8)            );
    }
            NKDbgPrintfW(TEXT("LCD STEP2 CYH !\r\n"));
    // XllpLCDLoadPalette(&XllpLCD);
    
    LeaveCriticalSection(&frameDescriptorMutex);
}
2,在\PLATFORM\COMMON\SRC\SOC\pxa3xx\DISPLAY\PXA320_lcd\sa2video.cpp里
// These masks are used to extract the color component for a 16 bit pixel value.  5 bits red, 6 bits green, 5 bits blue.
ulong BitMasks[] = {0xF800, 0x07E0, 0x001F};  
 
结果:
1,改为:
 
            (source.peBlue 0x00)            >>  3    |
            ((source.peGreen & 0x00)    <<  3)    |
            ((source.peRed    & 0xf8)    <<  8)
            );
发现颜色没有明显变化
2,改为:
//@CYH ADD 16 bit pixel value.  6 bits red, 6 bits green, 4 bits blue.
//ulong BitMasks[] = {0xF000, 0x0fc0, 0x003f}; //@CYH ADD

结果LCD 屏没有显示。
 
请问各位,我们这样作可行吗?如果可行,有熟悉的朋友可以指点我在那个地方改那?


学无止境
CuiCuiYH
驱动牛犊
驱动牛犊
  • 注册日期2007-09-03
  • 最后登录2009-06-26
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望115点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-08-28 15:28
忘记一点,如果不改软件和硬件,则颜色显示不正常,可以看到蓝色和绿色就是没有红色
学无止境
CuiCuiYH
驱动牛犊
驱动牛犊
  • 注册日期2007-09-03
  • 最后登录2009-06-26
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望115点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-09-02 14:20
没人回答,自己来,最后还是改得bitmask那里,基本可以了,就是红色还是不理想。结帖吧。
学无止境
游客

返回顶部