阅读:1544回复:2
请问pxa300 接TFT320x240LCD颜色问题
我们接线是这样的active color18-bit-per-Pixel to 24-bit display Typical connection:
RGB:6 6 6 描述:28bpp_24bitpanel 图片:18bpp-24bit.JPG 但是BSP 里是这样方式的active color16-bit-per-Pixel to 24-bit display Typical connection: RGB:5 6 5 描述:16bpp-24bitpanel 图片:16bbp-24bit.JPG 因为是DVT 阶段所以想硬件改变如下: RGB:6 6 4 描述:RGB665 图片:pxa lcd.JPG 正常的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 屏没有显示。 请问各位,我们这样作可行吗?如果可行,有熟悉的朋友可以指点我在那个地方改那? |
|
|
沙发#
发布于:2008-08-28 15:28
忘记一点,如果不改软件和硬件,则颜色显示不正常,可以看到蓝色和绿色就是没有红色
|
|
|
板凳#
发布于:2008-09-02 14:20
没人回答,自己来,最后还是改得bitmask那里,基本可以了,就是红色还是不理想。结帖吧。
|
|
|