1 LCD外部引腳介紹
VSYNC: 幀同步信號,表示掃描1幀的開始,一幀也就是LCD顯示的一個畫面。
HSYNC: 行同步信號,表示掃描1行的開始。
VDEN:數據使能信號。
VD[23:0] : LCD像素數據輸出端口。
VCLK:像素時鐘信號。
2 LCD控制寄存器介紹
VSPW:幀同步信號的脈寬,單位爲1行(Line)的時間。
VFPD: 幀同步信號的前肩,單位爲1行(Line)的時間。
VBPD: 幀同步信號的後肩,單位爲1行(Line)的時間。
LINEVAL :幀顯示尺寸-1,即屏行寬-1,對於800*480分配率的LCD屏,那麼LINEVAL=480-1=479,請記住,是屏行寬,也就是LCD屏顯示一幀數據所需要的行的數目。
HBPD:行同步信號的後肩,單位爲1VCLK的時間。
HFPD:行同步信號的前肩,單位爲1VCLK的時間。
HSPW:行同步信號的脈寬,單位爲1VCLK的時間。
HOZVAL:行顯示尺寸-1,即屏列寬-1,對於800*480分配率的LCD屏,那麼HOZVAL=800-1=799,請記住,是屏列寬,也就是LCD屏顯示一行數據所需要的像素(pixel)的數目。
3 通用TFT型LCD時序圖如下:
圖一
由圖一可知:掃描一幀所需的時間:=((VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1))
掃描一行所所需的時間:= ((HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1))個VCLK時間。
而VCLK時間由LCD寄存器VIDCON0內的CLKVAL決定:VCLK=HCLK/(CLKVAL+1) ------>這個公式是S3C2416的LCD控制器的,其他CPU的不一定一樣。
因此掃描一幀所需的時間:T=[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]*[(HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1)]* HCLK/ (CLKVAL+1),即幀頻率爲:1/T。
4確定LCD參數
下面就看如何根據基於TFT LCD: AT070TN83 來配置S3C2416 LCD控制器的相關寄存器值
4.1確定VSPW,VBPD,VFPD和LINEVAL時序參數
S3C2416關於幀參數的寄存器設置如下圖所示
圖二
VSPW表示VSYNC(幀同步信號)的脈衝寬度,是按照行來計算的,結合下圖,在這裏VSPW+1的長度就表示VSYNC脈衝高電平的寬度
圖3
那麼對於AT070TN83屏,這個值應該是多少的?看下圖
圖四
結合AT070TN83的數據手冊,可知Tw=3,也就是VSPW+1=3,那麼到這裏就可以確定VSPW=2。
根據時序圖和數據手冊,可知Tvbp =29,VBPD+1=Tvbp ,那麼到這裏就可以確定VBPD=28。
根據數據手冊可知Tvp=525,Tvw=3,Tvbp=29,tw=480,而VFPD+1=Tvp-Tvw-Tvbp-Tw,所以VFPD+1=525-480-29-3=13,那麼到這裏就可以確定VFPD=12。
LINEVAL :幀顯示尺寸-1,即屏行寬-1,對於800*480分配率的LCD屏,那麼LINEVAL=480-1=479,請記住,是屏行寬,也就是LCD屏顯示一幀數據所需要的行的數目
4.2確定HSPW,HBPD,HFPD和HOZVAL時序參數
結合AT070TN83的數據手冊,可知Thw=48,也就是HSPW+1=Thw,那麼到這裏就可以確定HSPW=47。
可知Thw=48,也就是HSPW+1=Thw,那麼到這裏就可以確定HSPW=47。
可知Thbp=40,也就是HBPD+1=Thbp,那麼到這裏就可以確定HBPD=39。
可知Thfp=Thp-Thw-Thbp-Thv=928-48-40-800,也就是HFPD+1=Thfp,那麼到這裏就可以確定HBPD=39。
HOZVAL:幀顯示尺寸-1,即屏列寬-1,對於800*480分配率的LCD屏,那麼HOZVAL=800-1=799,請記住,是屏列寬,也就是LCD屏顯示一幀數據所需要的列的數目。
5確定LCD的時鐘頻率
LCD的時鐘頻率主要是由CLKVAL決定的,而對於VCLK和CLKVAL的關係,請看下圖
圖五
我在這裏CLKSEL_F是選擇HCLK,所以就有VCLK=HCLK/(CLKVAL+1) ------>這個公式是S3C2416的LCD控制器的,其他CPU的不一定一樣,根據前面的介紹我們知道掃描一幀所需的時間:T=n*VCLK=n*HCLK/(CLKVAL+1)=[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]*[(HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1)]* HCLK/ (CLKVAL+1),在此n表示掃描一幀數據需需要的VCLK的總數
那麼TFT LCD: AT070TN83對VCLK的參數要求是多少呢?看下圖
圖六
由圖6可知,AT070TN83的VCLK時鐘頻率所需要的典型值是33MHZ,而我們的系統的HCLK=400/3MHZ,而RGB_VCLK (Hz) =HCLK/ [CLKVAL+1],所以可以算出CLKVAL+1 = HCLK/ VCLK,從而可以算出CLKVAL=3,但有可能在系統跑起來之後,會出現動態映像有斜影的情況,這個就可能是VCLK設置過大,可以適當減小VCLK,即增大CLKVAL的值,實際測試時,選擇CLKVAL=3會出現斜影,而假若頻率固定在26M左右,wince6.0LCD顯示就正常了。注意,友堅的2416開發板提供的BSP包,CLKVALDE 參數是通過一個公式計算出來的,需要和上面講到的所以參數都有關係,還有一個刷新頻率的參數也有關係,一般刷新頻率UTLCD_FRAME_RATE爲60HZ,可以更改這個參數來調整 CLKVAL,而友堅的BSP包在很多地方設置CLKVAL,需要足以改完。 在Bootloader\Eboot.Whimory 的main.c中有設置,這個主要是用來做開機啓動logo用的。第二個地方是在Oal\Oallib的init.c和init_back.c中,還有最後一個地方是在 Drivers\Display\s3c2416_lcdc_lib 的s3c2416_lcd_con.c 中, 修改完後,將NK下載到開發板中,測試LCD的CLK時鐘線,看輸出的頻率是否和預設的值一樣,如果不一樣繼續查找是否還有地方沒有更改到。
6 HSYNC,VSYNC,VCLK信號是否需要反轉
先看LCD控制器默認情況下送出來的TFT LCD屏的時序圖
圖七
再來看AT070TN83所需要的時序圖
圖八
結合圖7和圖8,所以需要反轉HSYNC,VSYNC信號輸出,這樣才能輸出滿足AT070TN83所需要的時序圖,這樣就需要設置S3C2416 LCD控制器VIDCON1的下面幾位,如果DE所對應的時鐘線時序也相反,IVCLK也需要置起來。
圖九