TQ2440的學(xué)習(xí)——TFT LCD控制顯示總結(jié)(硬件概念、初始化相關(guān)配置)源地址:http://nervfzb.blog.163.com/blog/static/314813992011215105432369/
TFT LCD是嵌入式中比較常用的顯示器,S3C2440/S3C2410都提供了接口進(jìn)行支持。這里總結(jié)下其接口的相關(guān)特性。 TFT LCD硬件需要的控制信號(hào):
S3C2440提供的接口情況: 由于S3C2440支持多種屏,所以其很多控制管腳是復(fù)用的。
由上面的對(duì)應(yīng)關(guān)系,GPC0——GPC4是負(fù)責(zé)TFT LCD控制信號(hào)LEND、VCLK、VLINE(HSYNC)、VFRAM(VSYNC)、VM(VDEN)的管腳;S3C2440支持的TFT LCD是采用并行方式的數(shù)據(jù)接口,GPC8——GPC15是負(fù)責(zé)VD0——VD7的數(shù)據(jù)信號(hào);GPD0——GPD15是負(fù)責(zé)VD8——VD23的數(shù)據(jù)信號(hào);GPG4是負(fù)責(zé)TFT LCD電源開關(guān)的信號(hào)管腳。 TFT LCD在S3C2440上的初始化: S3C2440上通過配置寄存器來初始化其LCD控制器,下面主要總結(jié)下TFT LCD初始化所用到的寄存器:
S3C2440使用LCDCON1~LCDCON5來初始化LCD控制器的控制功能。下面的圖表展示了各個(gè)寄存器初始化情況: LCDCON1寄存器
LCDCON2寄存器
LCDCON3寄存器
LCDCON4寄存器
LCDCON5寄存器
S3C2440支持4MB的虛擬屏幕,就是指顯示圖像的大小最大可達(dá)4MB。4MB的圖像,即使使用24bpp的模式也是一個(gè)比較大的圖片(1024×1024)。為了更好的使用這個(gè)特性S3C2440對(duì)于圖像數(shù)據(jù)的讀取處理給出了一個(gè)直觀的圖像,這個(gè)圖像中,可以看到屏幕可以當(dāng)成一個(gè)“窗口”在這個(gè)4MB的圖像區(qū)域“滑動(dòng)”。這個(gè)窗口可大可小,但是這個(gè)一般由你的設(shè)備的屏幕決定(TQ2440的屏幕為3.5寸,大小為320×240)。
上面表示虛擬屏幕的地址空間必須4MB對(duì)齊,所以取其起始地址的[30:22]表示虛擬屏幕的地址。“窗口”在這個(gè)4MB的空間內(nèi)“滑動(dòng)”,所以“窗口”的起始地址就取[21:1]就可以了,它們之間的配合是一種偏移量的配合。但是由于內(nèi)存中的數(shù)據(jù)是一行行的存放,所以需要使用偏移量來描述“窗口”每一行之間的偏移量。 S3C2440使用LCDSADDR1~LCDSADDR3來初始化描述圖像數(shù)據(jù)存放處的情況,下面圖表展示如何描述圖像數(shù)據(jù)存放內(nèi)存,這個(gè)區(qū)域中的數(shù)據(jù)會(huì)被自動(dòng)讀取顯示到屏幕上: LCDSADDR1寄存器
LCDSADDR2寄存器
LCDSADDR3寄存器
在所有寄存器配置完成后,不要忘記打開電源。將GPG4管腳置1啟動(dòng)LCD顯示。最后開啟整個(gè)的信號(hào)使能。 程序分析: 具體到程序上,初始化配置可以封裝到一個(gè)函數(shù)中去。函數(shù)盡量增強(qiáng)可擴(kuò)展型,所以在初始化的過程中可以指定要顯示圖像的圖像模式,同時(shí)對(duì)不同圖像模式對(duì)數(shù)據(jù)的不同要求對(duì)幀內(nèi)存的初始化也做了相應(yīng)的封裝。 01 void lcd_init(unsigned char pic_mode)
02 { 03 //配置LCD相關(guān)引腳 04 GPCUP = 0x00000000; 05 GPCCON = 0xaaaa02a9; 06 GPDUP = 0x00000000; 07 GPDCON = 0xaaaaaaaa; 08 //配置寄存器確定相關(guān)時(shí)序 09 LCDCON1 = (CLKVAL << 8) | (MVAL_USED << 7) | (PNRMODE_TFT << 5) / 10 | (BPPMODE_TFT(pic_mode) << 1) | 0; 11 LCDCON2 = (VBPD << 24) | (LINEVAL << 14) | (VFPD << 6) | VSPW; 12 LCDCON3 = (HBPD << 19) | (HOZVAL << 8) | HFPD; 13 LCDCON4 = HSPW; 14 LCDCON5 = (BPP24BL << 12) | (FRM565 << 11) | / 15 (INVVCLK << 10) | (INVVLINE << 9) | / 16 (INVVFRAME << 8) | (0 << 7) | (INVVDEN << 6) | / 17 (PWREN << 3) | (BSWP << 1) | HWSWP; 18 //配置寄存器指明圖像數(shù)據(jù)的內(nèi)存地址 19 LCDSADDR1 = ((LCD_BUFFER >> 22) << 21) | / 20 M5D(LCD_BUFFER >> 1); 21 switch(pic_mode) 22 { 23 case BPP24: 24 LCDSADDR2 = M5D((LCD_BUFFER + / 25 (LCD_WIDTH * LCD_HEIGHT * 4)) >> 1); 26 LCDSADDR3 = LCD_WIDTH * 32 / 16;//two half words 27 break; 28 case BPP16: 29 LCDSADDR2 = M5D((LCD_BUFFER + (LCD_WIDTH * / 30 LCD_HEIGHT * 2)) >> 1); 31 LCDSADDR3 = LCD_WIDTH * 32 / 32;//one half words 32 break; 33 default: 34 break; 35 } 36 LCDINTMSK |= 3;//屏蔽LCD中斷 37 TCONSEL = 0;//無效LPC3480 38 39 GPGUP = (GPGUP & (~(1 << 4))) | (1 << 4);//GPG4上拉電阻無效 40 GPGCON = (GPGCON & (~(3 << 8))) | (3 << 8);//設(shè)置GPG4LCD_PWREN 41 GPGDAT = GPGDAT | (1 << 4);//GPG4置1打開電源信號(hào) 42 43 LCDCON5 = (LCDCON5 & (~(1 << 3))) | (1 << 3);//有效PWREN信號(hào) 44 LCDCON5 = (LCDCON5 & (~(1 << 5))) | (0 << 5);//PWREN信號(hào)極性不翻轉(zhuǎn) 45 46 LCDCON1 |= 1;//LCD開啟(LCD信號(hào)輸出使能位) 47 } 參考書籍: 趙春江的博客:《s3c2440的LCD應(yīng)用》http://blog.csdn.net/zhaocj/archive/2010/03/19/5397180.aspx |
|