s3c2416 AT070TN83的LCD wince6.0驅動移植

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也需要置起來。

圖九

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章