趙江東 姚有峰 馬小陸
(1皖西學院基礎實驗中心,安徽 六安 237012)(2安徽工業(yè)大學電氣信息學院,安徽 馬鞍山 243002)
隨著電力系統(tǒng)自動化的發(fā)展,用戶對配電變壓器監(jiān)測終端系統(tǒng)的人機界面的要求也越來越高,顯示器是主要的人機交互設備,但由于傳統(tǒng)的CRT顯示器體積過于龐大等缺點,難以應用到配電自動化的設備中[1]。LCD作為新一代的顯示設備,它能夠顯示字符、漢字及圖形,并且具有功耗低、體積小、重量輕及超薄等許多優(yōu)點,可滿足配電變壓器監(jiān)測終端系統(tǒng)人機界面日益提高的性能要求[2]。當前市場上的變壓器監(jiān)測終端系統(tǒng)設計多是基于嵌入式技術(shù),硬件采用性價比非常高的ARM處理器,軟件采用嵌入式Linux操作系統(tǒng),這使得變壓器監(jiān)測終端具有高精度的數(shù)據(jù)處理和強大的數(shù)據(jù)管理等優(yōu)點。本文將闡述在嵌入式Linux變壓器監(jiān)測終端平臺上液晶顯示屏的驅(qū)動程序的設計方法。
TFT-LCD是作為STN-LCD的換代顯示器,它具有響應速度快、分辨率高及色彩豐富等優(yōu)點,當前正取代STN-LCD,被廣泛運用到便攜式計算機、攝錄像機及工業(yè)控制儀表等實際產(chǎn)品中。TFT-LCD的顯示原理如圖1所示。
圖1 TFT-LCD顯示原理
TFT是一個場效應管結(jié)構(gòu),它的柵極電流小,LCD的行和列數(shù)的增加是不會使驅(qū)動的電壓變高,故TFT-LCD可以制作成高分辨率的顯示器。當TFT導通的時候,源極和漏極的電阻較?。划擳FT被關(guān)斷的時候,源極和漏極的電阻很大,它近似于開路。顯示驅(qū)動的時候,某一時刻只會有一行的像素被選中,這行的TFT被導通,其它行的像素TFT處于關(guān)斷狀態(tài)。TFT-LCD的色彩豐富,能夠做到真彩顯示,因此其應用非常廣泛。
Linux2.2內(nèi)核之后的版本中出現(xiàn)一種驅(qū)動接口,即Framebuffer。該接口提供了一種在硬件設備上處理圖像的方法。Framebuffer代表視頻的硬件設備,可使應用軟件利用其定義來確定界面訪問圖像的硬件設備[3]。這樣能使應用程序在不知道任何的硬件底層驅(qū)動內(nèi)容。在Linux系統(tǒng)下LCD驅(qū)動的接口框圖如圖2所示。
圖2 Linux系統(tǒng)下LCD驅(qū)動的接口框圖
Framebuffer的實現(xiàn)可以分為兩個方面:一是對LCD和相關(guān)部件的初始化;二是對畫面的緩沖區(qū)讀寫,具體的代碼是read、write、lseek等相關(guān)系統(tǒng)調(diào)用接口。Framebuffer的完整驅(qū)動程序即是這兩個方面的具體實現(xiàn),在Linux的發(fā)行版本中,包含大量設備驅(qū)動程序的源碼,例如drivers/video下提供了多種顯卡Framebuffer的程序,這樣省去了上層程序的工作,只要針對所用到的LCD模塊類型及接口時序修改其驅(qū)動程序中和底層相關(guān)的代碼,就可以得到需要的LCD驅(qū)動程序。
Linux為了便于開發(fā)Framebuffer程序,使用了層次結(jié)構(gòu)。fbmem.c(內(nèi)核源碼driver/video目錄下)源碼位于該設備驅(qū)動程序的中心位置。它為上層的用戶空間提供了系統(tǒng)調(diào)用接口,同時也可以為下層特定硬件提供驅(qū)動接口,底層硬件驅(qū)動需要用該接口向內(nèi)核注冊。下面是fbmem.c的一些主要數(shù)據(jù)結(jié)構(gòu)。
fb_info為幀緩沖設備定義的驅(qū)動層接口,其定義在內(nèi)核源碼include/linux/fb.h文件中。不僅包含底層函數(shù),也包含與設備有關(guān)的數(shù)據(jù)。每個幀緩沖的設備中都有一個fb_info的結(jié)構(gòu)體與之相對應。它的重要成員有node、fb_var_screeninfo和fbops。node表示特定的Framebuffer,同時也是一個Framebuffer設備的次設備號;fb_var_screeninfo記錄了可以修改顯示器控制參數(shù)的內(nèi)容;fb_ops提供了底層驅(qū)動的接口。與在編寫字符設備驅(qū)動程序一樣,需要填寫一個file_operations結(jié)構(gòu)體,然后使用register_chrdev()注冊file_operations。而編寫Framebuffer驅(qū)動代碼時,要填寫fb_ops結(jié)構(gòu)體的相關(guān)成員。
綜上可見,在Linux下Framebuffer的編程框圖如圖3所示。
圖3 Linux下Framebuffer的編程框圖
本文中使用的LCD型號為LQ080V3DG01,是由日本夏普生產(chǎn)的TFT-LCD,基于ARM920T的微處理器S3C2410和LCD液晶模塊的連接圖如圖4所示。
圖4 S3C2410和LQ080V3DG01連接圖
從S3C的LCD控制器引出來的信號線有24根數(shù)據(jù)線和部分控制線。如果使用256色LCD,則只需要其中低8位的數(shù)據(jù)線。這些線是經(jīng)過74HC245模塊隔離后連接到LCD模塊,在接256色屏時由這個芯片完成電平的轉(zhuǎn)換。此外LCD信號線驅(qū)動74HC245的電源是可以選擇的。S3C2410可以安裝5寸的偽彩屏和8寸的真彩屏,其連接原理圖如圖5所示。
根據(jù)LCD驅(qū)動原理和以上硬件結(jié)構(gòu)圖,LCD驅(qū)動程序設計代碼如下:
3.2.1 LCD 屏參數(shù)初始化[4][5]
圖5 S3C2410與LQ080V3DG01連接原理圖
3.2.2 Linux 系統(tǒng) LCD 初始化
在Linux中對LCD模塊初始化代碼如下:
3.2.3 頭文件添加
在內(nèi)核/include/asm-arm/arch-s3c2410目錄下創(chuàng)建zjd.h文件,內(nèi)容如下:
3.2.4 配置和編譯內(nèi)核
配置界面如圖6所示:
圖6 內(nèi)核配置LCD模塊
選擇其驅(qū)動如下[6][7]:
將重新制作zImage燒寫到系統(tǒng)中,再次啟動 linux2.6.14以后就可以在LCD上顯示圖形。
隨著電力系統(tǒng)自動化水平的日益提高,用戶對配電變壓器監(jiān)測終端系統(tǒng)的人機界面的要求也越來越高,根據(jù)嵌入式Linux下配電變壓器監(jiān)測終端的特點和Linux2.6內(nèi)核驅(qū)動程序接口Framebuffer的工作原理,針對特定TFT-LCD屏詳細闡述了驅(qū)動程序的設計步驟,最后針對配電變壓器監(jiān)測終端系統(tǒng)實驗平臺中的核心單元S3C2410處理器進行了驅(qū)動程序的測試驗證。測試結(jié)果表明LCD驅(qū)動程序的內(nèi)核機制極大地優(yōu)化了嵌入式系統(tǒng)友好界面設計,為嵌入式LCD模塊的應用提供了更廣泛的應用領域。
[1]陶維青,馬小陸.基于 430 單片機的新型配電變壓器遠方終端的開發(fā)[J].繼電器,2005,(19):66-67.
[2]邱濤.一種基于Linux的車載多功能系統(tǒng)的設計與實現(xiàn)[D].重慶:重慶大學,2009.
[3]王春波.GPS/GPRS車載終端的設計與實現(xiàn)[D].成都:電子科技大學,2008.
[4]譚周文.基于ARM和Linux的超高頻讀寫器設計與實現(xiàn)[D].長沙:湖南大學,2008.
[5]劉志棟.基于嵌入式Linux系統(tǒng)的夫瑯和費衍射實驗儀的開發(fā)與研制[D].長春:吉林大學,2008.
[6]李靜.基于嵌入式平臺的目標識別研究[D].桂林:桂林電子科技大學,2009.
[7]韋東山.嵌入式 Linux 應用開發(fā)完全手冊[M].北京:人民郵電出版社,2008:158.