張有迪, 張傳勝
(1.長(zhǎng)春理工大學(xué) 光電工程學(xué)院,吉林 長(zhǎng)春 130022;2.中國(guó)科學(xué)院長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春 130033)
目前,隨著人們生活水平的提高,平面顯示技術(shù)被廣泛應(yīng)用于人們的日常生活當(dāng)中,而液晶顯示(LiquldcrystalDisplay,LCD)器件以其體積小、重量輕、低電壓、低功耗、低輻射等特點(diǎn)具有十分廣闊的市場(chǎng)前景。其中,TFT-LCD以其大容量、高清晰和全色彩視頻等優(yōu)點(diǎn)成為當(dāng)前顯示領(lǐng)域的主流,在消費(fèi)電子、工業(yè)控制以及航天等各個(gè)領(lǐng)域得到了廣泛應(yīng)用。文中采用三星公司的ARM9處理器S3C2440和東華公司的WXCAT43液晶顯示模塊,通過(guò)對(duì)S3C2440與WXCAT43的硬件連接設(shè)計(jì)與軟件設(shè)計(jì)調(diào)試,實(shí)現(xiàn)了圖像信號(hào)的正確顯示。
一般而言,TFT-LCD顯示系統(tǒng)僅僅是整個(gè)系統(tǒng)的一部分,考慮到系統(tǒng)可能還需要進(jìn)行其它部件的控制驅(qū)動(dòng)和算法的運(yùn)行,從整體的成本、功耗以及處理速度考慮,采用三星公司的S3C2440作為嵌入式微處理器。S3C2440是三星公司推出的一款32位RISC處理器,主頻高達(dá)400MHz,具有5級(jí)流水線,指令處理速度為300MIPS[1-2]。S3C2440具有豐富的片上外設(shè)資源,其中包括異步串行口、以太網(wǎng)接口、CAN總線接口、USB HOST和CLIENT接口、IIS音頻接口,以及TFT-LCD接口和觸摸屏接口。液晶顯示模塊選WXCAT43顯示模塊。該模塊為4.3寸屏,由驅(qū)動(dòng)電路、背光燈、4線電阻觸摸屏組成,具有480×272的分辨率,可以顯示16.7M色,適用于各種終端設(shè)備的顯示。
S3C2440內(nèi)部自帶1個(gè)LCD控制器,通過(guò)不同的設(shè)置可以與單色、灰度、彩色STN型和TFT型的LCD直接相連。作用是將顯示緩沖區(qū)中的LCD圖像數(shù)據(jù)傳送到外部LCD驅(qū)動(dòng)器,并產(chǎn)生必須的控制信號(hào)。LCD控制器內(nèi)部結(jié)構(gòu)圖及接口信號(hào)如圖1所示。
圖1 LCD控制器結(jié)構(gòu)圖
其中,REGBANK是LCD控制器的寄存器組,用來(lái)設(shè)置LCD的各項(xiàng)參數(shù);LCDCDMA是LCD控制器專用的DMA通道,負(fù)責(zé)圖像數(shù)據(jù)的傳輸;TIMEGEN由可編程邏輯組成,以支持不同LCD驅(qū)動(dòng)器的接口時(shí)序和速率的不同要求。VIDPRCS接受LCDCDMA來(lái)的圖像數(shù)據(jù),并將其改變到合適的數(shù)據(jù)格式后由VD[23:0]送到LCD驅(qū)動(dòng)器。
WXCAT43要求其電源供電電壓VDD的取值范圍是2.5~3.6V,典型值為3.3V,并且LCD輸入數(shù)據(jù)信號(hào)和控制信號(hào)的高電平輸入電壓VIH在2.8~3.6V范圍內(nèi),低電平輸入電壓VIL在0~0.8V范圍內(nèi);而S3C2440的I/O口的高電平輸出電壓VOH范圍是2.8~3.6V,低電平輸出電壓VOL范圍是0~0.3V。所以,WXCAT43可以直接與S3C2440相連,其電路圖如圖2所示。
S3C2440具有24位數(shù)據(jù)端口 VD[23:0],與WXCAT43的RGB數(shù)據(jù)端口相連。S3C2440支持24bpp,16bpp,8bpp,4bpp和2bpp等顯示模式。本設(shè)計(jì)采用24bpp格式,每8位表示一種顏色分量。藍(lán)色視頻信號(hào)由VD[0:7]輸出,綠色視頻信號(hào)由VD[8:15]輸出,紅色視頻信號(hào)由VD[16:23]輸出。
圖2 硬件接口原理圖
S3C2440的通用I/O口GPG4具有3種功能,這里選擇其第3功能:LCD電壓控制引腳,并與LCD panel的片選引腳/CS相連,引腳狀態(tài)為高電平時(shí),LCD點(diǎn)亮;低電平時(shí),LCD熄滅。
S3C2440的LCD控制端口與WXCAT43的控制信號(hào)端口相連,為液晶提供操作時(shí)序。其中:VCLK為傳輸像素?cái)?shù)據(jù)提供時(shí)鐘;VSYNC為垂直同步信號(hào),高電平表示一幀圖像數(shù)據(jù)有效;HSYNC為水平同步信號(hào),高電平表示一行數(shù)據(jù)有效;VDEN與LCD的DE相連,高電平表示VD[23:0]上的數(shù)據(jù)有效。這些信號(hào)必須與液晶所需時(shí)序相一致才能使液晶正常工作。
在數(shù)據(jù)和控制接口的連接上要注意走線長(zhǎng)度不能太長(zhǎng),否則液晶有可能不能正確顯示圖像。同時(shí),可以把LCD控制器的輸出引腳加上如傳輸門(mén)74LVTH162245加以驅(qū)動(dòng),使顯示更加穩(wěn)定。
在對(duì)WXCAT43進(jìn)行圖像顯示等操作前,首先要初始化LCD控制器。最重要的是根據(jù)WXCAT43的時(shí)序圖,對(duì)LCD控制器的寄存器進(jìn)行參數(shù)設(shè)置。
WXCAT43的時(shí)序波形如圖3所示。
圖3 時(shí)序圖
LCD_PWREN控制LCD的開(kāi)關(guān),高電平表示LCD開(kāi)啟,由ENVID域控制;VSYNC是垂直同步信號(hào),用于確定LCD的場(chǎng)頻,即每秒屏幕刷新的次數(shù)。HSYNC是水平同步信號(hào),用于確定LCD的行頻,即每秒屏幕掃描一行的次數(shù),VSYNC為低電平是有效。VDEN是數(shù)據(jù)使能信號(hào),高電平表示 VD[23:0]上的數(shù)據(jù)有效[3]。
3.1.1 像素時(shí)鐘VCLK的確定
LCD控制器傳輸數(shù)據(jù)時(shí)需要像素時(shí)鐘VCLK進(jìn)行同步。VCLK是通過(guò)對(duì)控制器的時(shí)鐘源HCLK進(jìn)行分頻得到,方法是設(shè)置寄存器LCDCON1中的CLKVAL域,公式為:
系統(tǒng)采用HCLK的頻率為100MHz,而LCD panel的像素時(shí)鐘信號(hào)為6.4MHz,通過(guò)上式計(jì)算CLKVAL值,結(jié)果為6.8,取整后(值為6)放入寄存器LCDCON1中相應(yīng)的位置。由于CLKVAL進(jìn)行了取整,需要重新計(jì)算VCLK,得到VCLK=7.1MHz。
3.1.2 行頻和場(chǎng)頻的確定
在一幀圖像的時(shí)鐘信號(hào)中,有一些時(shí)鐘是與顯示無(wú)關(guān)的。包括 HSYNC信號(hào)的前肩(HF-PD),后肩(HBPD)和脈寬 HSPW,VSYNC信號(hào)的前肩(VFPD),后肩(VBPD)和脈寬 VSPW,這些信號(hào)時(shí)序內(nèi),沒(méi)有有效像素信號(hào)出現(xiàn)。在計(jì)算行頻和場(chǎng)頻時(shí)要包括這些信號(hào)。時(shí)間參數(shù)具體取值見(jiàn)表1。
表1 時(shí)間參數(shù)
其中,HBPD,HFPD和HSPW的單位是一個(gè)VCLK的時(shí)間P(1),VSPW,VFPD和 VBPD的單位是掃描一行所用的時(shí)間 H(1)[3]。
在s3c2440中,這些信號(hào)的值為實(shí)際值減1。
要讓LCD正確地顯示圖像,在使用之前需要對(duì)LCD控制器進(jìn)初始化。初始化的內(nèi)容主要包括管腳功能的配置、LCD控制寄存器的配置以及圖像緩沖區(qū)地址的設(shè)置。
3.2.1 顯示器的初始化LCD接口配置
S3C2440的LCD接口(包括數(shù)據(jù)接口和控制接口)是與通用輸入/輸出接口(General-Purpose Input/Output,GPIO)復(fù)用的[4-7]。其中:C組I/O口GPC[15:0]提供了LCD數(shù)據(jù)接口的低8位VD[7:0],以及所有的控制接口;D 組I/O 口GPD[15:0]提供了LCD的剩余16位數(shù)據(jù)接口VD[23:8]。下面的代碼顯示了如何將這兩個(gè)GPIO口配置為L(zhǎng)CD接口模式:
將兩組端口的上拉使能寄存器rGPCUP和rGPDUP設(shè)為全0,使能上拉電阻,來(lái)保證管腳的電流能夠驅(qū)動(dòng)LCD panel。C組控制寄存器rGPCCON的低16位設(shè)為02a9使能LCD控制接口。
3.2.2 LCD控制器寄存器的設(shè)置
LCD寄存器包括5個(gè):LCDCON1~LCDCON5。其中:LCDCON1用于設(shè)置像素時(shí)鐘的頻率(設(shè)置CLK_VAL域)和使能LCD控制器(設(shè)置ENVID域);LCDCON2~LCDCON4用于設(shè)置場(chǎng)頻信號(hào)和行頻信號(hào)的前肩寬、后肩寬和脈寬,這些參數(shù)在時(shí)序匹配中已經(jīng)得到,不再重復(fù),注意在設(shè)置時(shí)要將實(shí)際值減1。代碼如下:
3.2.3 緩沖區(qū)地址設(shè)置
系統(tǒng)采用液晶屏的尺寸為480×272,24bpp的非調(diào)色板真彩色模式。24位顏色模式要用32位數(shù)據(jù)來(lái)表示的,因此,定義一個(gè)與屏幕尺寸大小相同的全字整型二維數(shù)組作為圖像數(shù)據(jù)的緩存區(qū):unsigned int LCD_BUFFER[480][272]。
在s3c2440中,寄存器LCDSADDR1和LCDSADDR2用于設(shè)置顯示緩存區(qū)。其中:
LCDBANK域:9位數(shù)據(jù),指定 LCD的BANK,即顯示緩存區(qū)的第30位到第22位地址;
LCDBASEU域:21位數(shù)據(jù),指定LCD的基址,即顯示緩存區(qū)開(kāi)始地址的第21位到第1位;
LCDBASEL域:21位數(shù)據(jù),指定LCD的尾址,即顯示緩存區(qū)結(jié)束地址的第21位到第1位。
代碼如下:
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D(((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1);
完成了LCD的初始化后,就可以在屏幕上顯示內(nèi)容了,只要把所要顯示的數(shù)據(jù)寫(xiě)入上述顯示緩沖區(qū)即可。注意,由于顯示緩沖區(qū)用32位表示一個(gè)像素,因此寫(xiě)入的數(shù)據(jù)也應(yīng)該是32位。這里以顯示一幅圖片為例,給出主要的程序代碼:
void paint_bmp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32c;
int p=0;
for(y=0;y<1;y++)
{
for(x=0;x<h;x++)
{
c=bmp[p+1]|(bmp[p]<<8);
if(((x0+x)<320&&((y0+y)<240))
LCD_BUFFER[y0+y][x0+x]=c;
p=p+2;
}
}
}
顯示效果如圖4和圖5所示。
本方案以嵌入式微處理器S3C2440和TFTLCD模塊WXCAT43為硬件基礎(chǔ),給出了硬件接口電路,并對(duì)軟件設(shè)計(jì)過(guò)程進(jìn)行了分析。實(shí)現(xiàn)了LCD上圖像的正確顯示,為多媒體電話機(jī)的后續(xù)開(kāi)發(fā)奠定了基礎(chǔ)。
圖4 TFT-LCD顯示效果1
圖5 TFT-LCD顯示效果2
[1]付虹,劉桂方,李春善,等.S3C2440的LCD控制器的配置與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2010(11):2470-2473.
[2]周立功.ARM 嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005.
[3]劉躍鋒,宋永霞,李松濤.一種基于直方圖對(duì)二值圖像進(jìn)行處理的方法[J].長(zhǎng)春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2010,31(5):554-558.
[4]萬(wàn)永波,張根寶,田澤,等.基于ARM的LCD控制器的配置與編程應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(5):1196-1198.
[5]王明富,楊世洪,吳欽章.大面陣CCD圖像實(shí)時(shí)顯示系統(tǒng)的設(shè)計(jì)[J].光學(xué)精密工程,2010,18(9):2053-2059.
[6]武偉,王宏志,宋宇.基于偏微分方程的圖像去噪算法[J].長(zhǎng)春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2011,32(5):554-557.
[7]楊輝,冉峰,黃舒平.面陣CCD彩色視頻圖像實(shí)時(shí)采集系統(tǒng)的設(shè)計(jì)[J].光學(xué)精密工程,2010,18(1):273-280.