[轉] S3C2440 LCD筆記

本文轉自: http://blog.mcuol.com/User/colinluan/Article/42955_1.htm

 

本次筆記主要針對 2440 TFT 液晶而言 , 開發板爲 TQ2440

一、 2440 LCD 特點

TFT LCD 顯示屏

-支持 1 位、 2 位、 4 位和 8 位(每像素)調色板 TFT

-支持 16 / 像素非調色板真彩色 TFT 顯示

-支持 24 / 像素非調色板真彩色 TFT 顯示

24 / 像素模式下最大支持 16M 彩色 TFT

-支持多種屏幕尺寸

典型分辯率爲 640*480 320*240 160*160 及其它多種

最大虛擬顯示達 4Mbytes

虛擬顯示尺寸在 64K 模式下: 2048 × 1024 及其它

二、 TFT LCD 配置

1 CLKVAL,VCLK

CLKVAL LCDCON1[17:8] 中設置,這些位決定了 VCLK 的頻率, VCLK 便是 LCD 的操作頻率。

VCLK=HCLK/((CLKVAL+1)*2)

TQ2440 FCLK 設置爲 400M ,FCLK:HCLK:PCLK=1:4:8, 可知 HCLK 的的頻率爲 100M ,查閱 LCD 模組手冊的操作頻率 ,這裏設置 CLKVAL=6 ,則

VCLK=100M/((6+1)*2)=7.14M

2 SYNC HYNC,VDEN

VBPD LINEVAL VFPD VSPW

HBPD HOZVAL HFPD HSPW

VSYNC 是垂直同步信號 ,在每進行一個幀(即一個屏)的掃描之前,該信號就有效一次,由該信號可以確定 LCD 的場頻,即每秒屏幕刷新的次數(單位 Hz )。

HSYNC 是水平同步信號 ,在每進行一行的掃描之前,該信號就有效一次,由該信號可以確定 LCD 的行頻,即每秒屏幕從左到右掃描一行的次數(單位 Hz )。

其中 VSYNC 是幀同步信號, VSYNC 每發出 1 個脈衝,就意味着新的 1 屏視頻資料開始發送。

HSYNC 爲行同步 信號,每個 HSYNC 脈衝都表明新的 1 行視頻資料開始發送。

VDEN 則用來標明視頻資料的有效

 

在每一幀時鐘信號中,還會有一些與屏顯示無關的時鐘出現,這就給確定行頻和場頻帶來了一定的複雜性。如在 HSYNC 信號先後會有水平同步信號前肩( HFPD 水平同步信號後肩( HBPD 出現,在 VSYNC 信號先後會有垂直同步信號前肩( VFPD 垂直同步信號後肩( VBPD 出現,在這些信號時序內,不會有有效像素信號出現,另外 HSYNC VSYNC 信號有效時,其電平要保持一定的時間,它們分別叫做水平同步信號脈寬 HSPW 垂直同步信號脈寬 VSPW ,這段時間也不能有像素信號。因此計算行頻和場頻時,一定要包括這些信號。

關於 VBPD LINEVAL VFPD VSPW HBPD HOZVAL HFPD HSPW 的配置 LCD 手冊上一般都會給出。

幀頻 (VSYNC 頻率 )=1/(((VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1))* 

((HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)) * (2*(CLKVAL+1)/(HCLK)) )

TQ2440 的測試程序中:

 

//Timing parameter for 3.5'' LCD

#define VBPD              (12)               // 垂直同步信號的後肩

#define VFPD              (4)                 // 垂直同步信號的前肩

#define VSPW              (5)                 // 垂直同步信號的脈寬

 

#define HBPD              (22)               // 水平同步信號的後肩

#define HFPD              (33)               // 水平同步信號的前肩

#define HSPW              (44)               // 水平同步信號的脈寬

 

#define HOZVAL_TFT   (LCD_XSIZE_TFT-1)

#define LINEVAL_TFT  (LCD_YSIZE_TFT-1)

 

//TFT_SIZE

#define LCD_XSIZE_TFT    (320)     

#define LCD_YSIZE_TFT    (240)

 

所以幀頻 = 1/( ((5+1)+(12+1)+(239+1)+(4+1)) * ((5+1)+(22+1)+(33+1)+((319+1))*

  (2*(6+1))/100M))

= 1/(264*380*0.14us)

       = 71Hz

 

3 LCDBANK LCDBASEU LCDBASEL

OFFSIZE PAGEWIDTH

(1)LCDBANK LCDADDR11[29:21 ] 中配置,存放的是顯示緩存地址的 A[30:22] ,即爲顯示緩存的基地址。

1 :顯示緩存存放在如下:

volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];

LCDBANK=LCD_BUFFER>>22

 

(2)LCDBASEU LCDADR11[20:0] 中配置 ,顯示緩存的開始地址 A[21:1]

2 LCD_BUFFER 的開始地址

#define M5D(n)                          ((n) & 0x1fffff)     // 21bits 掩碼

LCDBASEU=M5D((LCD_BUFFER)>>1);   // 取出 A[21:1] 位地址放入 LCDBASEU

 

 

 

(3)LCDBASEL LCDADDR2[20:0] 中配置 ,顯示緩存的結束地址 A[21:1]

LCDBASEL = ((the fame end address) >>1) + 1

= LCDBASEU +(PAGEWIDTH+OFFSIZE)*(LINEVAL+1)

3 LCDBUFFER 的結束地址 .

LCD 16bitTFT,OFFSIZE=0,LINEVAL=240,PAGEWIDTH=320*16bit/16=320

LCDBASEL=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );

 

(4)OFFSIZE :用於虛擬屏幕的偏移長度,如果我們不使用虛擬屏幕,就把它置爲 0
(5)PAGEWIDTH
:定義了視口的寬,單位是半字 .

 

三、 LCD 的初始化工作

#define MVAL        (13)

#define MVAL_USED    (0)                 //0=each frame   1=rate by MVAL

#define INVVDEN         (1)                 //0=normal       1=inverted

#define BSWP        (0)                 //Byte swap control

#define HWSWP           (1)                 //Half word swap control

#define PNRMODE              (3)                 // 設置爲 TFT

#define BPPMODE        (12)               // 設置爲 16bpp 模式

 

//TFT_SIZE

#define LCD_XSIZE_TFT    (320)     

#define LCD_YSIZE_TFT    (240)

#define SCR_XSIZE_TFT    (320)

#define SCR_YSIZE_TFT    (240)

#define HOZVAL_TFT   (LCD_XSIZE_TFT-1)

#define LINEVAL_TFT  (LCD_YSIZE_TFT-1)

 

//Timing parameter for 3.5'' LCD

#define VBPD              (12)               // 垂直同步信號的後肩

#define VFPD              (4)                 // 垂直同步信號的前肩

#define VSPW              (5)                 // 垂直同步信號的脈寬

#define HBPD              (22)               // 水平同步信號的後肩

#define HFPD              (33)               // 水平同步信號的前肩

#define HSPW              (44)               // 水平同步信號的脈寬

#define CLKVAL_TFT (6)

volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];

rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;

       rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);

       rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);

       rLCDCON4=(MVAL<<8)|(HSPW);

       rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(BSWP<<1) | (HWSWP);

rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);

       rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );

       rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);

 

 

1 rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;

通過 CLKCAL 設置 VCLK

#define CLKVAL_TFT (6)

FCLK=400MHz,FCLK:HCLK:PCLK=1:4:8

HCLK=100MHz

VCLK=100MHz/((6+1)*2)=7.14MHz

設置 LCD TFT 顯示

設置 LCD 16 TFT

視頻輸入和控制信號無效 (ENVID) ,等完全配置好後再使能。

2 rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);

配置 VBPD,VFPD,VSPW LINEVAL, 這幾個參數可以參考 LCD 手冊

3 rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);

配置 HBPD,HOZVAL,HFPD ,這幾個參數可以參考 LCD 手冊

4 rLCDCON4=(MVAL<<8)|(HSPW);

配置 HSPW, 此參數可以參考 LCD 手冊

5 rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(BSWP<<1) | (HWSWP);

RGB 5:6:5 模式

VCLK 下降沿時取數據

HSYNC,VSYNC 極性反轉

VD 極性正常

VDEN 極性正常

PWEN 有效

不可字節交換

可以半字交換

 

6 rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);

設置 LCDBANK 以及 LCDBASEU

7rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 )

設置 LCDBASEL

8 rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);

設置 OFFSIZE 以及 PAGEWIDTH

 

9

       rLCDINTMSK|=(3); // MASK LCD Sub Interrupt

       rTCONSEL &= (~7) ;     // Disable LPC3600

       rTPAL=0; // Disable Temp Palette

    Lcd_PowerEnable(0, 1);

       Lcd_EnvidOnOff(1);            //turn on vedio

 

小結:

仔細研讀 2440 LCD 這一節,對 LCD 有了初步的理解,可以對 TFTLCD 進行相關的配置。

配置時還需參考 LCD 模組手冊,得到相關的時序。

注意各個引腳以及各個寄存器的作用。

例程均參考自 TQ2440 測試程序。

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