新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于嵌入式系統(tǒng)的彩色液晶顯示驅(qū)動控制

基于嵌入式系統(tǒng)的彩色液晶顯示驅(qū)動控制

作者: 時間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

3 驅(qū)動的工作時序

圖4所示為驅(qū)動主動模式下的工作時序圖。其中L_PCLK為像素時鐘,用于把像素數(shù)據(jù)輸入到顯示器中的移位寄存器中,針對于TFT- LCD連續(xù)跳變;L_LCLK為行掃描時鐘,針對于TFT-LCD是水平同步信號,用于LCD顯示器行顯示的結(jié)束和把移位寄存器的行數(shù)據(jù)送到顯示器中,并且行指針加1;L_FCLK為幀掃描時鐘,針對于TFT-LCD是垂直同步信號,用于LCD顯示器新的幀像素的開始,復(fù)位時行指針指向屏幕的頂部;L_BIAS是數(shù)據(jù)使能信號[2]。

4 微處理器與LCD顯示屏的接口

硬件主要由嵌入式LCD控制器、微處理器與LCD顯示屏的接口等部分構(gòu)成。

圖5所示為微處理器與LCD接口原理圖。由于集成了LCD控制單元,這使LCD接口的設(shè)計變得十分簡單。只須電氣連接,無須外擴(kuò)LCD控制芯片。

L_DD[15:O]:像素點16位數(shù)據(jù)線,使用5紅、6綠和5藍(lán)實現(xiàn)不同顏色的顯示,而TFT-LCD紅、綠、藍(lán)均有6個引腳,故將B0、R0接地。LCD的顯示效果與功耗在很大程度上決定于背光源,因而需對其進(jìn)行控制。地址線SA-A[20-22]作為譯碼輸入,基地址為Ox0800_0000 的片選信號nCS2選中74LCXl38譯碼器,讓74LCXl38的輸出引腳Y0產(chǎn)生脈沖上升沿,驅(qū)動LCX374鎖存來自數(shù)據(jù)總線的低8位數(shù)據(jù),只要在數(shù)據(jù)總線上輸出Ox80,則可通過Q7使LCD-BACK-0N/0FF輸出高電平,控制LCD背光源打開。

5 軟件設(shè)計

軟件主要由嵌入式操作系統(tǒng)與應(yīng)用軟件兩部分構(gòu)成,在應(yīng)用軟件中完成對LCD的驅(qū)動。本文采用-2.4.19作為軟件平臺,程序的交叉編譯使用arm-linux-gcc,其中-2.4.19-rmk6-pxal-cerf1內(nèi)核能穩(wěn)定地支持處理器,因的源代碼開放,將其下載后只需根據(jù)自己的硬件配置對內(nèi)核中的現(xiàn)有代碼與驅(qū)動進(jìn)行裁剪、修改、移植或編寫部分驅(qū)動。PXA270對LCD顯示屏的驅(qū)動分為兩個方面:一是對LCD控制器及相關(guān)部件的初始化,包括創(chuàng)建Frame Buffer、寄存器組與DMA通道的設(shè)置等;二是對Frame Buffer的讀、寫等操作[3、4、5]。

5.1 定義顯示緩沖區(qū)

Linux下的LCD驅(qū)動屬于字符設(shè)備驅(qū)動范圍,PXA270處理器與LCD間數(shù)據(jù)傳輸也非常頻繁,因而在內(nèi)存中定義一個“顯示緩沖區(qū)”Frame Buffer,形成一個虛擬的顯示器,具體位置在Linuxdriversvideo下。Frame Buffer的大小=每像素位數(shù)*每屏行數(shù)*(每行像素+每行需插入的空像素)/8。本系統(tǒng)中LCD分辨率為640*480,16位/像素,單屏幕模式,F(xiàn)rame Buffer理論值為614400個字節(jié),實際設(shè)置640KB。

5.2 初始化函數(shù)的編寫

在linux的/drivers/video/pxafb.c文件中,通過fb_options()和pxafb_setup()函數(shù)來獲取內(nèi)核的啟動參數(shù)并返回pxafb_driver結(jié)構(gòu),該結(jié)構(gòu)中pxafb_probe是一個函數(shù)指針,指向pxafb_probe()函數(shù),在該函數(shù)中完成對 LCD控制器和Frame Buffer等的整個初始化過程,初始化函數(shù)部分代碼如下:

struct pxafb_info * fbi; //數(shù)據(jù)結(jié)構(gòu)pxafb_info,主要用于Frame Buffer設(shè)備及其操作驅(qū)動框架的參數(shù)定義,如Frame Buffer的物理和虛擬地址、DMA和一些LCD控制寄存器描述參數(shù)等

struct pxafb_mach_info * inf; //數(shù)據(jù)結(jié)構(gòu)pxafb_mach_info,定義運行機(jī)器的一些參數(shù),如pixclock、xres、yres等

pxafb_backlight_power = inf->pxafb_backlight_power; //LCD背光

pxafb_lcd_power = inf->pxafb_lcd_power; //LCD電源

fbi = pxafb_init_fbinfo(dev); //完成數(shù)據(jù)結(jié)構(gòu)pxafb_info和pxafb_mach_info的初始化,設(shè)置使用的字體、顯示屏的規(guī)格等LCD硬件參數(shù)并保存到其中

ret = pxafb_map_video_memory(fbi); //根據(jù)LCD硬件參數(shù)在內(nèi)存創(chuàng)建顯示緩沖區(qū)

pxa_set_cken(CKEN16_LCD,1); //時鐘使能寄存器CKEN可使能許多外設(shè)單元的時鐘,其bit16置1使能LCD單元時鐘

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

LCD顯示屏相關(guān)文章:lcd顯示屏原理


lcd相關(guān)文章:lcd原理


關(guān)鍵詞: Linux LCD 顯示驅(qū)動 PXA270

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉