張有迪, 張傳勝
(1.長春理工大學 光電工程學院,吉林 長春 130022;2.中國科學院長春光學精密機械與物理研究所,吉林 長春 130033)
目前,隨著人們生活水平的提高,平面顯示技術被廣泛應用于人們的日常生活當中,而液晶顯示(LiquldcrystalDisplay,LCD)器件以其體積小、重量輕、低電壓、低功耗、低輻射等特點具有十分廣闊的市場前景。其中,TFT-LCD以其大容量、高清晰和全色彩視頻等優點成為當前顯示領域的主流,在消費電子、工業控制以及航天等各個領域得到了廣泛應用。文中采用三星公司的ARM9處理器S3C2440和東華公司的WXCAT43液晶顯示模塊,通過對S3C2440與WXCAT43的硬件連接設計與軟件設計調試,實現了圖像信號的正確顯示。
一般而言,TFT-LCD顯示系統僅僅是整個系統的一部分,考慮到系統可能還需要進行其它部件的控制驅動和算法的運行,從整體的成本、功耗以及處理速度考慮,采用三星公司的S3C2440作為嵌入式微處理器。S3C2440是三星公司推出的一款32位RISC處理器,主頻高達400MHz,具有5級流水線,指令處理速度為300MIPS[1-2]。S3C2440具有豐富的片上外設資源,其中包括異步串行口、以太網接口、CAN總線接口、USB HOST和CLIENT接口、IIS音頻接口,以及TFT-LCD接口和觸摸屏接口。液晶顯示模塊選WXCAT43顯示模塊。該模塊為4.3寸屏,由驅動電路、背光燈、4線電阻觸摸屏組成,具有480×272的分辨率,可以顯示16.7M色,適用于各種終端設備的顯示。
S3C2440內部自帶1個LCD控制器,通過不同的設置可以與單色、灰度、彩色STN型和TFT型的LCD直接相連。作用是將顯示緩沖區中的LCD圖像數據傳送到外部LCD驅動器,并產生必須的控制信號。LCD控制器內部結構圖及接口信號如圖1所示。

圖1 LCD控制器結構圖
其中,REGBANK是LCD控制器的寄存器組,用來設置LCD的各項參數;LCDCDMA是LCD控制器專用的DMA通道,負責圖像數據的傳輸;TIMEGEN由可編程邏輯組成,以支持不同LCD驅動器的接口時序和速率的不同要求。VIDPRCS接受LCDCDMA來的圖像數據,并將其改變到合適的數據格式后由VD[23:0]送到LCD驅動器。
WXCAT43要求其電源供電電壓VDD的取值范圍是2.5~3.6V,典型值為3.3V,并且LCD輸入數據信號和控制信號的高電平輸入電壓VIH在2.8~3.6V范圍內,低電平輸入電壓VIL在0~0.8V范圍內;而S3C2440的I/O口的高電平輸出電壓VOH范圍是2.8~3.6V,低電平輸出電壓VOL范圍是0~0.3V。所以,WXCAT43可以直接與S3C2440相連,其電路圖如圖2所示。
S3C2440具有24位數據端口 VD[23:0],與WXCAT43的RGB數據端口相連。S3C2440支持24bpp,16bpp,8bpp,4bpp和2bpp等顯示模式。本設計采用24bpp格式,每8位表示一種顏色分量。藍色視頻信號由VD[0:7]輸出,綠色視頻信號由VD[8:15]輸出,紅色視頻信號由VD[16:23]輸出。

圖2 硬件接口原理圖
S3C2440的通用I/O口GPG4具有3種功能,這里選擇其第3功能:LCD電壓控制引腳,并與LCD panel的片選引腳/CS相連,引腳狀態為高電平時,LCD點亮;低電平時,LCD熄滅。
S3C2440的LCD控制端口與WXCAT43的控制信號端口相連,為液晶提供操作時序。其中:VCLK為傳輸像素數據提供時鐘;VSYNC為垂直同步信號,高電平表示一幀圖像數據有效;HSYNC為水平同步信號,高電平表示一行數據有效;VDEN與LCD的DE相連,高電平表示VD[23:0]上的數據有效。這些信號必須與液晶所需時序相一致才能使液晶正常工作。
在數據和控制接口的連接上要注意走線長度不能太長,否則液晶有可能不能正確顯示圖像。同時,可以把LCD控制器的輸出引腳加上如傳輸門74LVTH162245加以驅動,使顯示更加穩定。
在對WXCAT43進行圖像顯示等操作前,首先要初始化LCD控制器。最重要的是根據WXCAT43的時序圖,對LCD控制器的寄存器進行參數設置。
WXCAT43的時序波形如圖3所示。

圖3 時序圖
LCD_PWREN控制LCD的開關,高電平表示LCD開啟,由ENVID域控制;VSYNC是垂直同步信號,用于確定LCD的場頻,即每秒屏幕刷新的次數。HSYNC是水平同步信號,用于確定LCD的行頻,即每秒屏幕掃描一行的次數,VSYNC為低電平是有效。VDEN是數據使能信號,高電平表示 VD[23:0]上的數據有效[3]。
3.1.1 像素時鐘VCLK的確定
LCD控制器傳輸數據時需要像素時鐘VCLK進行同步。VCLK是通過對控制器的時鐘源HCLK進行分頻得到,方法是設置寄存器LCDCON1中的CLKVAL域,公式為:

系統采用HCLK的頻率為100MHz,而LCD panel的像素時鐘信號為6.4MHz,通過上式計算CLKVAL值,結果為6.8,取整后(值為6)放入寄存器LCDCON1中相應的位置。由于CLKVAL進行了取整,需要重新計算VCLK,得到VCLK=7.1MHz。
3.1.2 行頻和場頻的確定
在一幀圖像的時鐘信號中,有一些時鐘是與顯示無關的。包括 HSYNC信號的前肩(HF-PD),后肩(HBPD)和脈寬 HSPW,VSYNC信號的前肩(VFPD),后肩(VBPD)和脈寬 VSPW,這些信號時序內,沒有有效像素信號出現。在計算行頻和場頻時要包括這些信號。時間參數具體取值見表1。

表1 時間參數
其中,HBPD,HFPD和HSPW的單位是一個VCLK的時間P(1),VSPW,VFPD和 VBPD的單位是掃描一行所用的時間 H(1)[3]。
在s3c2440中,這些信號的值為實際值減1。
要讓LCD正確地顯示圖像,在使用之前需要對LCD控制器進初始化。初始化的內容主要包括管腳功能的配置、LCD控制寄存器的配置以及圖像緩沖區地址的設置。
3.2.1 顯示器的初始化LCD接口配置
S3C2440的LCD接口(包括數據接口和控制接口)是與通用輸入/輸出接口(General-Purpose Input/Output,GPIO)復用的[4-7]。其中:C組I/O口GPC[15:0]提供了LCD數據接口的低8位VD[7:0],以及所有的控制接口;D 組I/O 口GPD[15:0]提供了LCD的剩余16位數據接口VD[23:8]。下面的代碼顯示了如何將這兩個GPIO口配置為LCD接口模式:

將兩組端口的上拉使能寄存器rGPCUP和rGPDUP設為全0,使能上拉電阻,來保證管腳的電流能夠驅動LCD panel。C組控制寄存器rGPCCON的低16位設為02a9使能LCD控制接口。
3.2.2 LCD控制器寄存器的設置
LCD寄存器包括5個:LCDCON1~LCDCON5。其中:LCDCON1用于設置像素時鐘的頻率(設置CLK_VAL域)和使能LCD控制器(設置ENVID域);LCDCON2~LCDCON4用于設置場頻信號和行頻信號的前肩寬、后肩寬和脈寬,這些參數在時序匹配中已經得到,不再重復,注意在設置時要將實際值減1。代碼如下:

3.2.3 緩沖區地址設置
系統采用液晶屏的尺寸為480×272,24bpp的非調色板真彩色模式。24位顏色模式要用32位數據來表示的,因此,定義一個與屏幕尺寸大小相同的全字整型二維數組作為圖像數據的緩存區:unsigned int LCD_BUFFER[480][272]。
在s3c2440中,寄存器LCDSADDR1和LCDSADDR2用于設置顯示緩存區。其中:
LCDBANK域:9位數據,指定 LCD的BANK,即顯示緩存區的第30位到第22位地址;
LCDBASEU域:21位數據,指定LCD的基址,即顯示緩存區開始地址的第21位到第1位;
LCDBASEL域:21位數據,指定LCD的尾址,即顯示緩存區結束地址的第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的初始化后,就可以在屏幕上顯示內容了,只要把所要顯示的數據寫入上述顯示緩沖區即可。注意,由于顯示緩沖區用32位表示一個像素,因此寫入的數據也應該是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為硬件基礎,給出了硬件接口電路,并對軟件設計過程進行了分析。實現了LCD上圖像的正確顯示,為多媒體電話機的后續開發奠定了基礎。

圖4 TFT-LCD顯示效果1

圖5 TFT-LCD顯示效果2
[1]付虹,劉桂方,李春善,等.S3C2440的LCD控制器的配置與應用[J].計算機工程與設計,2010(11):2470-2473.
[2]周立功.ARM 嵌入式系統基礎教程[M].北京:北京航空航天大學出版社,2005.
[3]劉躍鋒,宋永霞,李松濤.一種基于直方圖對二值圖像進行處理的方法[J].長春工業大學學報:自然科學版,2010,31(5):554-558.
[4]萬永波,張根寶,田澤,等.基于ARM的LCD控制器的配置與編程應用[J].計算機工程與設計,2007,28(5):1196-1198.
[5]王明富,楊世洪,吳欽章.大面陣CCD圖像實時顯示系統的設計[J].光學精密工程,2010,18(9):2053-2059.
[6]武偉,王宏志,宋宇.基于偏微分方程的圖像去噪算法[J].長春工業大學學報:自然科學版,2011,32(5):554-557.
[7]楊輝,冉峰,黃舒平.面陣CCD彩色視頻圖像實時采集系統的設計[J].光學精密工程,2010,18(1):273-280.