1、打開LCD背光
將LCD背光對應的GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)。
2、打開LCD電源
可以將GPG4選擇為LCD_PWREN(GPGCON:9-8寫入11),這時候LCD電源的打開/關閉可以通過LCDCON5:3來控制。
也可以自定義其他GPIO用作LCD電源開關,只需將此GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)打開LCD電源。
3、設置其他信號線
其他信號線包括VD0-VD23和VFRAME、VLINE、VCLK等,分別在GPCCON,GPDCON中選擇相應功能。
4、設置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其實就是根據 每秒幀數*幀行數*行像素 計算出來的,幀行數和行像素需要包含空白數和同步數)
5、設置其他相關參數
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)
6、設置視頻緩沖區的地址
2440支持虛擬屏幕,可以通過改變LCD寄存器實現屏幕快速移動
PAGEWIDTH:虛擬屏幕一行的字節數,如果不使用虛擬屏幕,設置為實際屏幕的行字節數,如16位寬320像素,設為320 * 2
OFFSIZE:虛擬屏幕左側偏移的字節數,如果不使用虛擬屏幕,設置為0
LCDBANK: 視頻幀緩沖區內存地址30-22位
LCDBASEU: 視頻幀緩沖區的開始地址21-1位
LCDBASEL: 視頻幀緩沖區的結束地址21-1位
(相關寄存器LCDSADDR1,LCDSADDR2,LCDSADDR3)
7、確定信號的極性
2440的LCD控制器允許設置VCLK、VLINE、VFRAME等信號的極性(上升沿有效還是下降沿有效),需要對照LCD的Datasheet一一確認。
(相關寄存器LCDCON5)
8、禁止LPC3600/LCC3600模式!
如果不是使用三星LPC3600/LCC3600 LCD,必須禁止LPC3600/LCC3600模式(寫入0到TCONSEL)!
9、打開視頻輸出
ENVID設為1 (LCDCON1:0寫入1)