基于嵌入式系統的彩色液晶顯示驅動(dòng)控制
3 LCD驅動(dòng)的工作時(shí)序
圖4所示為LCD驅動(dòng)主動(dòng)模式下的工作時(shí)序圖。其中L_PCLK為像素時(shí)鐘,用于把像素數據輸入到LCD顯示器中的移位寄存器中,針對于TFT- LCD連續跳變;L_LCLK為行掃描時(shí)鐘,針對于TFT-LCD是水平同步信號,用于LCD顯示器行顯示的結束和把移位寄存器的行數據送到顯示器中,并且行指針加1;L_FCLK為幀掃描時(shí)鐘,針對于TFT-LCD是垂直同步信號,用于LCD顯示器新的幀像素的開(kāi)始,復位時(shí)行指針指向屏幕的頂部;L_BIAS是數據使能信號[2]。
4 微處理器與LCD顯示屏的接口
顯示驅動(dòng)硬件主要由嵌入式LCD控制器、微處理器與LCD顯示屏的接口等部分構成。
圖5所示為PXA270微處理器與LCD接口原理圖。由于PXA270集成了LCD控制單元,這使LCD接口的設計變得十分簡(jiǎn)單。只須電氣連接,無(wú)須外擴LCD控制芯片。
L_DD[15:O]:像素點(diǎn)16位數據線(xiàn),使用5紅、6綠和5藍實(shí)現不同顏色的顯示,而TFT-LCD紅、綠、藍均有6個(gè)引腳,故將B0、R0接地。LCD的顯示效果與功耗在很大程度上決定于背光源,因而需對其進(jìn)行控制。地址線(xiàn)SA-A[20-22]作為譯碼輸入,基地址為Ox0800_0000 的片選信號nCS2選中74LCXl38譯碼器,讓74LCXl38的輸出引腳Y0產(chǎn)生脈沖上升沿,驅動(dòng)LCX374鎖存來(lái)自數據總線(xiàn)的低8位數據,只要在數據總線(xiàn)上輸出Ox80,則可通過(guò)Q7使LCD-BACK-0N/0FF輸出高電平,控制LCD背光源打開(kāi)。
5 軟件設計
軟件主要由嵌入式操作系統與應用軟件兩部分構成,在應用軟件中完成對LCD的驅動(dòng)。本文采用Linux-2.4.19作為軟件平臺,程序的交叉編譯使用arm-linux-gcc,其中Linux-2.4.19-rmk6-pxal-cerf1內核能穩定地支持PXA270處理器,因Linux的源代碼開(kāi)放,將其下載后只需根據自己的硬件配置對內核中的現有代碼與驅動(dòng)進(jìn)行裁剪、修改、移植或編寫(xiě)部分驅動(dòng)。PXA270對LCD顯示屏的驅動(dòng)分為兩個(gè)方面:一是對LCD控制器及相關(guān)部件的初始化,包括創(chuàng )建Frame Buffer、寄存器組與DMA通道的設置等;二是對Frame Buffer的讀、寫(xiě)等操作[3、4、5]。
5.1 定義顯示緩沖區
Linux下的LCD驅動(dòng)屬于字符設備驅動(dòng)范圍,PXA270處理器與LCD間數據傳輸也非常頻繁,因而在內存中定義一個(gè)“顯示緩沖區”Frame Buffer,形成一個(gè)虛擬的顯示器,具體位置在Linuxdriversvideo下。Frame Buffer的大小=每像素位數*每屏行數*(每行像素+每行需插入的空像素)/8。本系統中LCD分辨率為640*480,16位/像素,單屏幕模式,Frame Buffer理論值為614400個(gè)字節,實(shí)際設置640KB。
5.2 初始化函數的編寫(xiě)
在linux的/drivers/video/pxafb.c文件中,通過(guò)fb_options()和pxafb_setup()函數來(lái)獲取內核的啟動(dòng)參數并返回pxafb_driver結構,該結構中pxafb_probe是一個(gè)函數指針,指向pxafb_probe()函數,在該函數中完成對 LCD控制器和Frame Buffer等的整個(gè)初始化過(guò)程,初始化函數部分代碼如下:
struct pxafb_info * fbi; //數據結構pxafb_info,主要用于Frame Buffer設備及其操作驅動(dòng)框架的參數定義,如Frame Buffer的物理和虛擬地址、DMA和一些LCD控制寄存器描述參數等
struct pxafb_mach_info * inf; //數據結構pxafb_mach_info,定義運行機器的一些參數,如pixclock、xres、yres等
pxafb_backlight_power = inf->pxafb_backlight_power; //LCD背光
pxafb_lcd_power = inf->pxafb_lcd_power; //LCD電源
fbi = pxafb_init_fbinfo(dev); //完成數據結構pxafb_info和pxafb_mach_info的初始化,設置使用的字體、顯示屏的規格等LCD硬件參數并保存到其中
ret = pxafb_map_video_memory(fbi); //根據LCD硬件參數在內存創(chuàng )建顯示緩沖區
pxa_set_cken(CKEN16_LCD,1); //時(shí)鐘使能寄存器CKEN可使能許多外設單元的時(shí)鐘,其bit16置1使能LCD單元時(shí)鐘
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)LCD顯示屏相關(guān)文章:lcd顯示屏原理
lcd相關(guān)文章:lcd原理
評論