所用的LCD為TopPoly-TD035STED4(TFT)型號,240*320的
其VCLK為6.39MHz。 根據(jù)s3c2440手冊s3c2440處理LCD的時鐘源是HCLK,通過寄存器LCDCON1中的CLKVAL可以調整VCLK頻率大小,它的公式為:VCLK=HCLK÷[(CLKVAL+1)×2],程序的內部分頻為FCLK=400MHz、HCLK=100MHz、PCLK=50MHz(MPLLCON=(92<<12)|(1<<4)|1;),因此得到CLKVAL取整為6。
注:(LCD一般需要三個時序信號:VSYNC、HSYNC和VCLK。VSYNC是垂直同步信號,在每進行一個幀(即一個屏)的掃描之前,該信號就有效一次,由該信號可以確定LCD的場頻,即每秒屏幕刷新的次數(shù)(單位Hz)。HSYNC是水平同步信號,在每進行一行的掃描之前,該信號就有效一次,由該信號可以確定LCD的行頻,即每秒屏幕從左到右掃描一行的次數(shù)(單位Hz)。VCLK是像素時鐘信號。
其中VSYNC是幀同步信號,VSYNC每發(fā)出1個脈沖,都意味著新的1屏視頻資料開始發(fā)送。而HSYNC為行同步 信號,每個HSYNC脈沖都表明新的1行視頻資料開始發(fā)送。而VDEN則用來標明視頻資料的有效,VCLK是用來鎖存視頻資料的像數(shù)時鐘。網上搜到的資料來解釋這幾個時序信號。
可以查看s3c2440手冊‘Figure 15-6. TFT LCD Timing Example’圖)
通過上圖可以得到:
#define LCD_WIDTH 240 //屏幕的寬
#define LCD_HEIGHT 320 //屏幕的高
//垂直同步信號的脈寬、后肩和前肩-----這些值是根據(jù)TopPoly-TD035STED4.pdf文件中的13頁的表
#define VSPW 1 //(3-1)
#define VBPD 1 //(15-1)
#define VFPD 1 //(12-1)
//水平同步信號的脈寬、后肩和前肩-----這些值是根據(jù)TopPoly-TD035STED4.pdf文件中的13頁的表
#define HSPW (10-1)
#define HBPD (20-1)
#define HFPD (10-1)
//顯示尺寸
#define LINEVAL (LCD_HEIGHT-1)
#define HOZVAL (LCD_WIDTH-1)
注:(對于一個已知尺寸的LCD屏,只要確定了VCLK值,行頻和場頻就應該知道了。但這樣還不行的,因為在每一幀時鐘信號中,還會有一些與屏顯示無關的時鐘出現(xiàn),這就給確定行頻和場頻帶來了一定的復雜性。如在HSYNC信號先后會有水平同步信號前肩(HFPD)和水平同步信號后肩(HBPD)出現(xiàn),在VSYNC信號先后會有垂直同步信號前肩(VFPD)和垂直同步信號后肩(VBPD)出現(xiàn),在這些信號時序內,不會有有效像素信號出現(xiàn),另外HSYNC和VSYNC信號有效時,其電平要保持一定的時間,它們分別叫做水平同步信號脈寬HSPW和垂直同步信號脈寬VSPW,這段時間也不能有像素信號。因此計算行頻和場頻時,一定要包括這些信號。HBPD、HFPD和HSPW的單位是一個VCLK的時間,而VSPW、VFPD和VBPD的單位是掃描一行所用的時間。也是網上搜的。)
這些信號(VSPW、VFPD、VBPD、LINEVAL、HBPD、HFPD、HSPW和HOZVAL)是通過寄存器LCDCON2、LCDCON3和LCDCON4來配置的,具體查看s3c2440的手冊。
LCDCON1寄存器:
LINECNT:當前行掃描計數(shù)器值,標明當前掃描到了多少行。
CLKVAL :決定VCLK的分頻 比(上面已經提到過)。LCD控制器輸出的VCLK是直接由系統(tǒng)總線(AHB)
的工作頻率HCLK(一般為100MHZ)直接分頻得到的。做為240*320的TFT屏,應保證得
出的VCLK在5~10MHz之間。
MMODE :VM信號的觸發(fā)模式(僅對STN屏有效,對TFT屏無意義。)PNRMODE :選擇當前的顯示模式,
對于TFT屏而言,應選擇[11],即TFT LCD panel。
BPPMODE :選擇色彩模式,對于真彩顯示而言,選擇16bpp(64K色)即可滿足要求。
ENVID:使能LCD信號輸出
LCDCON5寄存器:
VSTATUS :當前VSYNC信號掃描狀態(tài),指明當前VSYNC同步信號處于何種掃描階段。
HSTATUS:當前HSYNC信號掃描狀態(tài),指明當前HSYNC同步信號處于何種掃描階段。
BPP24BL:設定24bpp顯示模式時,視頻資料在顯示緩沖區(qū)中的排列順序(即低位有效還是高位有效)。
對于16bpp的 64K色顯示模式,該設置位無意義。
FRM565:對于16bpp顯示模式,有2中形式,一種是RGB=5:5:5:1,另一種是5:6:5。后一 種模式最為
常用,它的含義是表示64K種色彩的16bit RGB資料中,紅色(R)占了5bit,綠色(G)占了
6bit,蘭色(B)占了5bit。
INVVCLK 、INVLINE 、INVFRAME 、INVVD :通過前面提到的‘Figure 15-6’的時序圖,我們知
道,CPU的LCD控制器輸出的時序默認是正脈沖,而LCD需要VSYNC(VFRAME)、
VLINE(HSYNC)均為負脈沖,因此 INVLINE 和 INVFRAME 必須設為“1 ”,即選擇反相輸
出。 INVVDEN , INVPWREN , INVLEND 的功能同前面的類似。
PWREN:LCD電源使能控制。在CPU LCD控制器的輸出信號中,有一個電源使能管腳LCD_PWREN,用
來做為LCD屏電源的開關信號。
ENLEND:對普通的TFT屏無效,可以不考慮。
INVVDEN、INVPWREN、INVLEND:是否翻轉這些信號,一般為正常,不需要翻轉。
BSWP 、HWSWP : 為字節(jié)(Byte)或半字(Half-Word)交換使能。由于不同的GUI對
FrameBuffer(顯示緩沖區(qū))的管理不同,必要時需要通過調整 BSWP 和 HWSWP
來適應GUI。
因此:
//for LCDCON1
#define CLKVAL_TFT 4 //設置時鐘信號
#define MVAL_USED 0 //
#define PNRMODE_TFT 3 //TFT型LCD
#define BPPMODE_TFT 13 //24位TFT型LCD
//for LCDCON5
#define BPP24BL 0 //32位數(shù)據(jù)表示24位顏色值時,低位數(shù)據(jù)有效,高8位無效
#define INVVCLK 0 //像素值在VCLK下降沿有效
#define INVVLINE 1 //翻轉HSYNC信號
#define INVVFRAME 1 //翻轉VSYNC信號
#def