新聞中心

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

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

        作者: 時間:2012-05-21 來源:網絡 收藏

        3 驅動的工作時序

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

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

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

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

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

        5 軟件設計

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

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

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

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

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

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

        struct pxafb_mach_info * inf; //數(shù)據(jù)結構pxafb_mach_info,定義運行機器的一些參數(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ù)結構pxafb_info和pxafb_mach_info的初始化,設置使用的字體、顯示屏的規(guī)格等LCD硬件參數(shù)并保存到其中

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

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

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

        LCD顯示屏相關文章:lcd顯示屏原理


        lcd相關文章:lcd原理


        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 禹城市| 琼海市| 宜宾县| 龙岩市| 兰坪| 广东省| 运城市| 宝丰县| 奇台县| 抚顺县| 高唐县| 习水县| 梓潼县| 方山县| 田阳县| 凯里市| 巴楚县| 成安县| 翼城县| 白山市| 正镶白旗| 镇沅| 古交市| 习水县| 莲花县| 连江县| 吴旗县| 桑植县| 瓦房店市| 莆田市| 静海县| 孝感市| 固原市| 惠安县| 连平县| 宣武区| 吉安市| 广水市| 陆川县| 京山县| 吴川市|