基于A(yíng)RM與WindowsCE的LCD顯示器設計
結合IntelPXA270內置的LCD控制器和FG070053DSSWJGT1液晶屏的內部結構以及時(shí)序圖的分析,設計LCD顯示接口電路,主要是把IntelPXA270的控制信號與LCD屏的控制引腳連接起來(lái),如圖3所示。通過(guò)16位數據線(xiàn)把LCD控制器的數據發(fā)送腳與FG070053DSSWJGT1的數據接收腳連接起來(lái),即把(R0―R4,G0―G5,B0―B4)與L_DD0-L_DD15連接起來(lái);把幀時(shí)鐘,行時(shí)鐘,像素時(shí)鐘等與LCD屏連接; ADJ采用電壓為0―3.0V、 頻率為20KHZ的PWM脈沖,調節液晶屏背光燈的亮度,在滿(mǎn)足用戶(hù)要求的同時(shí)還可有效地控制功耗。圖3中,網(wǎng)絡(luò )標號LCLK是行時(shí)鐘控制信號,FCLK是幀時(shí)鐘控制信號,PCLK是像素時(shí)鐘控制信號,OE為數據輸出使能信號。VDD由直流5V穩壓電源提供,U/D通過(guò)電阻拉低后對屏幕提供上下翻轉信號,L/R支持屏幕左右翻轉控制。
圖3 TFT LCD接口電路
3 LCD顯示程序的設計
在WindowsCE下LCD驅動(dòng)程序開(kāi)發(fā)使用基本圖形引擎(GPE)類(lèi)來(lái)實(shí)現[1] [5]。在使用GPE類(lèi)編寫(xiě)驅動(dòng)程序之前,首先分析使用GPE類(lèi)編寫(xiě)顯示驅動(dòng)時(shí)對顯示設備的要求,內存布局要求顯示設備使用線(xiàn)性幀緩沖區,全部的顯示內存是連續的;接下來(lái)分析GPE類(lèi)對內存中數據格式的要求。LCD屏是自頂向下的格式,像素(0,0)在左上角,像素(width-1,height-1)在右下角。 幀緩沖區的步幅,即表示顯示設備上一個(gè)掃描行在內存中占的字節數,應當是四字節的整數倍,即使在每個(gè)掃描行的末尾填充一些無(wú)用的字節,CPU不需做“排”選擇也可以存取整個(gè)幀緩沖區,幀緩沖區不應當使用位面(位面就是每種顏色信道RGB>在幀緩沖區進(jìn)行分開(kāi)存儲)。
使用IntelPXA270 內置的LCD控制器,集成了7個(gè)通道的DMA,支持像素深度分別為2、4、8、16、18、24位的RGB模式,采用16位RGB模式進(jìn)行設計。圖像數據保存在內存中,使用DMA方式進(jìn)行幀數據存取,幀的大小及幀地址是指定的,可以滿(mǎn)足GPE類(lèi)的線(xiàn)性幀緩沖區的要求,LCD控制與LCD屏都滿(mǎn)足WindowsCE 下使用GPE類(lèi)來(lái)實(shí)現顯示驅動(dòng)的硬件要求。
3.1 創(chuàng )建基于GPE類(lèi)的顯示驅動(dòng)程序
使用GPE類(lèi)簡(jiǎn)化了WindowsCE顯示設備的開(kāi)發(fā)工作,GPE類(lèi)代表一個(gè)顯示設備,是一個(gè)純虛的類(lèi),設計顯示驅動(dòng)時(shí)必須繼承這個(gè)基本GPE類(lèi)。
首先定義一個(gè)新的類(lèi)(class SA2Video)來(lái)繼承GPE類(lèi),根據GPE類(lèi)的要求,實(shí)現以下函數:
NumModes ------返回顯示驅動(dòng)所支持的顯示模式。
GetModeInfo ------返回指定顯示模式的信息,如顯示像素寬度和深度,處理由NumModes()函數返回的顯示模式,當SetModes()函數被調用時(shí),總是返回在模式配置列表中的第一個(gè)模式值。
SetModes ------設置顯示模式。
AllocSurface------分配一個(gè)頁(yè)面,頁(yè)面僅僅是保存像素數據的RAM或視頻RAM,是一個(gè)塊內存,GPESurf類(lèi)能用于代表系統顯存上的一個(gè)頁(yè)面,保證在視頻RAM上分配一個(gè)頁(yè)面。
SetPointerShape------設置光標位圖和光標區。
MovePointer------移動(dòng)光標。
BltPrepare ------在位塊傳輸操作之前調用,如果驅動(dòng)支持位塊傳輸之前的操作,它就允許驅動(dòng)建立硬件位塊傳輸(blit)操作,并返回一個(gè)實(shí)際操作函數去執行位塊傳輸(blit),在GPE類(lèi)中提供默認的Blit操作函數。
BltComplete------在塊傳輸完成之后執行,如果有必要的話(huà),它允許設備做任何的清除操作。
Line ------在畫(huà)線(xiàn)操作之前和之后調用,如果在畫(huà)線(xiàn)之前調用,該函數可以建立硬件的畫(huà)線(xiàn)操作,然后返回GPE默認的畫(huà)線(xiàn)操作;如果在畫(huà)線(xiàn)之后調用,該函數可以做任何畫(huà)線(xiàn)操作之后的清除。
InVBlank ------標志是否在水平同步周期時(shí)顯示更新了。
這些函數在GPE類(lèi)的源代碼中為空函數,所以必須在(class SA2Video)中實(shí)現函數重載。
3.2 創(chuàng )建LCD控制器接口驅動(dòng)程序
創(chuàng )建LCD控制器的接口驅動(dòng)程序主要是完成硬件的配置,包括LCD控制器和IO引腳接口的配置。首先根據LCD顯示接口的電路連接,配置IntelPXA270內的IO寄存器,然后根據外接的LCD屏提供的參數配置LCD控制器,主要是配置TFT接口時(shí)序,如幀時(shí)鐘,行時(shí)鐘,像素時(shí)鐘,數據輸出使能等[6]。在xllp_lcd.c文件中的XllpLCDInit()函數實(shí)現硬件的初始化,以下為該函數的關(guān)鍵代碼:
XLLP_STATUS_T XllpLCDInit(P_XLLP_LCD_T pXllpLCD)
{ XLLP_STATUS_T status = 0;
// 初始化IO接口,根據LCD連接電路圖進(jìn)行配置
LCDSetupGPIOs(pXllpLCD);
// 初始LCD控制器及幀緩沖區
LCDInitController(pXllpLCD);
// 清除LCD控制器的狀態(tài)寄存器
LCDClearStatusReg(pXllpLCD);
// 使能LCD 控制器,驅動(dòng)LCD屏顯示數據
LCDEnableController(pXllpLCD);
return status;
}
3.3 LCD控制器顯示模式的設置
WindowsCE GDI 支持帶有多種顏色灰度和顏色模式的顯示設備,從僅用一位表示的顏色到調色板調制出真32位RGB,每一種格式支持幾種不同的像素排列方式,這取決于對顯示內存的訪(fǎng)問(wèn)是否支持單字節方式、雙字節字方式、四字節方式。
使用下列掩碼來(lái)提取紅、綠、藍數值:每個(gè)像素用16位表示的格式是一種掩碼格式,并且不被調色,每個(gè)像素我們用兩字節來(lái)存儲。結合TFT LCD顯示接口的硬件電路圖和IntelPXA270 內置的LCD控制器,按照IntelPXA270處理器手冊上的說(shuō)明,需要對控制引腳初始化[7]。在圖3中,第14口用來(lái)進(jìn)行幀時(shí)鐘控制,結合IntelPXA270數據手冊,我們配置第14口為L(cháng)_VSYNC功能,用如下語(yǔ)句實(shí)現:
GAFR0_L|=((GAFR0_L~(1u29))|(1u28))
所有顯示數據線(xiàn)L_DD0―L_DD15都設為輸出口,并設為顯示器的數據輸出,程序設計如下:
評論