我配置S3C2410的LCD控制器,点亮了LCD屏,但是画面存在错位。我的屏是320*240,TFT
屏的偏左侧有一道1.5cm宽的黑色条块,然后才是WinCE的桌面,然后屏的最左侧是原本应该在最右侧的图像。大概和下面的标注一样:
123456789 9***12345
123456789 9***12345
123456789 9***12345
123456789 9***12345
正常时 现在的情况
就是正常的时候,桌面上有WindowsCE的图标,现在这个图标变成:E**Windows,快捷键也有相应的偏移。
请问这个是什么问题?我用示波器测了一下LCD屏的VSYN,HSYN,应该是两个下降沿对齐的,但是示波器显示行场同步信号之间好像不同步,即两个下降沿(低电平同步)不对齐,这是什么原因?使用2410的LCD控制器除了配置相应的5个LCDCONn寄存器和三个LCDADDRn寄存器,还要做什么吗?
行同步寄存器LCDCON3配置不正确,试着减少行前等待寄存器LCD_HFPD的值,增大行后等待寄存器LCD_HBPD的值,但保持他们的和基本不变.看看画面有无变化(左移或者右移)
改过尝试了,依然没有变化,后来发现是LPC3600一直被Enable,Disable LPC3600以后就没有黑条纹了,但是屏幕一直乱闪,纵向闪动,隐约可以看到WinCE的图标,这该怎么办啊?
寄存器的值都是参照手册设的啊:
s2410LCD->rLCDCON1=(7<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0; //TFT LCD panel,16bpp TFT,ENVID=off
s2410LCD->rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
s2410LCD->rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
s2410LCD->rLCDCON4=(MVAL<<8)|(HSPW);
s2410LCD->rLCDCON5=(1<<11)|(1<<9)|(1<<8)|1; //FRM5:6:5,HSYNC and VSYNC are inverted
s2410LCD->rLCDSADDR1=((FRAMEBUF_DMA_BASE>>22)<<21)|M5D(FRAMEBUF_DMA_BASE>>1);
s2410LCD->rLCDSADDR2=M5D( (FRAMEBUF_DMA_BASE+(LCD_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
s2410LCD->rLCDSADDR3=(((LCD_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);
s2410LCD->rLPCSEL&=~(0x3); // Disable LPC3600
FBuf = (struct FrameBuffer *) (FRAMEBUF_BASE);
s2410LCD->rTPAL=0x0;
s2410LCD->rLCDCON1|=1; // ENVID=ON
其中VBPD=11,VFPD=9,VSPW=0,HBPD=68,HFPD=17,HSPW=0,CLKVAL=7,LINEVAL=319,HOZVAL=239.
纵向闪动是Frame(场频)定义有误。
将LCD相关的这些寄存器全部打印出来,然后推算出相应的频率,看看是否正确。
2410的这些频率是从HCLK 60MHz分频过来的,你看看HCLK的频率设置对不对。
FrameRate = 1/[{(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)}*{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}*{2*(CLKVAL+1)/(HCLK)}]
根据上面的取值,去CLKVAL=3,HCLK=60MHz,
FrameRate = 1/[263*408*2*(3+1)/60MHz]= 69.9Hz
(另外,我看有的书上写HCLK=100MHz,我就按100MHz计算,取CLKVAL=6,FrameRate=66.57Hz)
这两种情况下,画面比较正常了,但是仍然有比较明显的上下抖动。
还有画面的颜色不对,背景成白色,WindowsCE图标条成粉红色。
这两个问题该怎么办?
抖动已经消除了,但是颜色还是不对,先结贴了,另外再请教了。一个LCD就调了这么久,快要崩了。
“抖动已经消除了,但是颜色还是不对,先结贴了,另外再请教了。一个LCD就调了这么久,快要崩了。”
你的抖动是怎么消除的啊? 背景色不对解决了吗? 我现在遇到了跟你类似的问题。