1.LCD即液晶顯示器,控制原理是控制其中的電子槍,在n行*n列的屏幕上投射不同顏色從而形成圖像 2.編程步驟: ①打開LCD背光將LCD背光對應的GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)。 ②打開 ...
1.LCD即液晶顯示器,控制原理是控制其中的電子槍,在n行*n列的屏幕上投射不同顏色從而形成圖像
2.編程步驟:
①打開LCD背光
將LCD背光對應的GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)。
②打開LCD電源
可以將GPG4選擇為LCD_PWREN(GPGCON:9-8寫入11),這時候LCD電源的打開/關閉可以通過LCDCON5:3來控制。
也可以自定義其他GPIO用作LCD電源開關,只需將此GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)打開LCD電源。
③設置其他信號線
其他信號線包括VD0-VD23和VFRAME、VLINE、VCLK等,分別在GPCCON,GPDCON中選擇相應功能。
④設置LCD的頻率(VCLK)
LCD的Datasheet上一般會寫有一個推薦的頻率,比如我使用的屏幕推薦頻率為6.4M,我需要通過一些計算選擇一個合適的CLKVAL以產生這個頻率:
對於TFT LCD,S3C2440提供的VCLK的計算公式為:
VCLK = HCLK / ((CLKVAL+1)*2)
可以得出:
CLKVAL = HCLK / (VCLK * 2) - 1
我的HCLK是100Mhz(CPU運行在400Mhz, CLKDIV_VAL設置為5,Fclk:Hclk:Pclk = 1:4:8),VCLK使用屏幕推薦的6.4M,得到:
CLKVAL = 100000000 / (6400000 * 2) - 1 = 6.8
選擇最接近的整數值7,寫入LCDCON1:17-8。
(VCLK其實就是根據 每秒幀數*幀行數*行像素 計算出來的,幀行數和行像素需要包含空白數和同步數)
⑤設置其他相關參數
LCD相關的參數主要還有這幾個:
LINEVAL: LCD水平像素-1,如320-1 = 319
HOZVAL: LCD垂直像素-1,如240-1 = 239
HFPD: 行開始前的VCLK時鐘數(LCD屏幕的Datasheet一般有推薦值)
HBPD: 行結束後的VCLK時鐘數(LCD屏幕的Datasheet一般有推薦值)
HSPW: 行之間水平同步的無效VCLK時鐘數(LCD屏幕的Datasheet一般有推薦值)
VFPD: 幀數據開始前的空白行數(LCD屏幕的Datasheet一般有推薦值)
VBPD: 幀數據結束後的空白行數(LCD屏幕的Datasheet一般有推薦值)
VSPW: 幀之間垂直同步的無效行數(LCD屏幕的Datasheet一般有推薦值)
(相關寄存器LCDCON2, LCDCON3, LCDCON4)
⑥設置視頻緩衝區的地址
2440支持虛擬屏幕,可以通過改變LCD寄存器實現屏幕快速移動
PAGEWIDTH:虛擬屏幕一行的位元組數,如果不使用虛擬屏幕,設置為實際屏幕的行位元組數,如16位寬320像素,設為320 * 2
OFFSIZE:虛擬屏幕左側偏移的位元組數,如果不使用虛擬屏幕,設置為0
LCDBANK: 視頻幀緩衝區記憶體地址30-22位
LCDBASEU: 視頻幀緩衝區的開始地址21-1位
LCDBASEL: 視頻幀緩衝區的結束地址21-1位
(相關寄存器LCDSADDR1,LCDSADDR2,LCDSADDR3)
⑦確定信號的極性
2440的LCD控制器允許設置VCLK、VLINE、VFRAME等信號的極性(上升沿有效還是下降沿有效),需要對照LCD的Datasheet一一確認。
(相關寄存器LCDCON5)
⑧禁止LPC3600/LCC3600模式!
如果不是使用三星LPC3600/LCC3600 LCD,必須禁止LPC3600/LCC3600模式(寫入0到TCONSEL)!
⑨打開視頻輸出
ENVID設為1 (LCDCON1:0寫入1)
3.
4.
A:顯示指針從矩形左上角的第一行第一個點開始,一個點一個點的在LCD上顯示,在上面的時序圖上用時間線表示就為VCLK,我們稱之為像素時鐘信號;
B:當顯示指針一直顯示到矩形的右邊就結束這一行,那麼這一行的動作在上面的時序圖中就稱之為1 Line;
C:接下來顯示指針又回到矩形的左邊從第二行開始顯示,註意,顯示指針在從第一行的右邊回到第二行的左邊是需要一定的時間的,我們稱之為行切換;
D:如此類推,顯示指針就這樣一行一行的顯示至矩形的右下角才把一副圖顯示完成。因此,這一行一行的顯示在時間線上看,就是時序圖上的HSYNC
E:然而,LCD的顯示並不是對一副圖像快速的顯示一下,為了持續和穩定的在LCD上顯示,就需要切換到另一幅圖上(另一幅圖可以和上一副圖一樣或者不一樣,目的只是為了將圖像持續的顯示在LCD上)。那麼這一副一副的圖像就稱之為幀,在時序圖上就表示為1 Frame,因此從時序圖上可以看出1 Line只是1 Frame中的一行;
F:同樣的,在幀與幀切換之間也是需要一定的時間的,我們稱之為幀切換,那麼LCD整個顯示的過程在時間線上看,就可表示為時序圖上的VSYNC