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