工廠地址:深圳市寶安區(qū)福永街道鳳凰興業(yè)一路華倫科技園21棟2樓
楊 總:13828709518
雷 總:13923457816
郵箱:yangdekai@hctlcd.com
QQ:417594796
2019-01-19 15:55:44
隨著高性能嵌入式處理器的普及和硬件成本的不斷降低,尤其是ARM 系列處理器的推出,嵌入式系統(tǒng)的功能越來(lái)越強(qiáng)。單色LCD液晶屏也因?yàn)樯蕟握{(diào),存儲(chǔ)信息小,處理速度慢而不能符合人們的需求。
在多媒體應(yīng)用的推動(dòng)下,彩色LCD液晶屏越來(lái)越多地應(yīng)用到了嵌入式系統(tǒng)中 如新一代手機(jī)和掌上電腦多采用TFT顯示器件,該顯示器件支持彩色圖形界面和視頻媒體播放。Linux作為開(kāi)放源代碼的操作系統(tǒng)也在市場(chǎng)中占據(jù)了一席之地。由于Linux成本低廉,源代碼開(kāi)放,因此成為國(guó)內(nèi)外廠商極力發(fā)展的操作系統(tǒng)。在應(yīng)用需求的推動(dòng)下,Linux下也出現(xiàn)了許多圖形界面軟件包,如MiniGUI、Trolletech公司的Embedded QT等,其圖形界面及開(kāi)發(fā)工具與Windows CE不相上下。在圖形軟件包的開(kāi)發(fā)和移植工作中都牽涉到底層LCD的驅(qū)動(dòng)問(wèn)題。筆者有幸參與了Linux操作系統(tǒng)下LCD部分的開(kāi)發(fā),其主要功能是點(diǎn)亮液晶屏,將在攝像頭上采集的BMP圖片在液晶屏上顯示并將BMP 格式壓縮成JPEG格式,使得存儲(chǔ)量減少。因此筆者就在開(kāi)發(fā)過(guò)程中遇到的問(wèn)題一一闡述。
背景知識(shí)
在切入正題之前,先來(lái)了解在做驅(qū)動(dòng)過(guò)程中需要預(yù)先知道的知識(shí)。
1.硬件平臺(tái)
MC9328MX1(以下簡(jiǎn)稱(chēng)MX1)是Motorola 公司基于ARM核心的第一款MCU,主要面向高端嵌入式應(yīng)用。內(nèi)部采用ARM920T內(nèi)核,并集成了SDRAM/Flash、LCD,USB、藍(lán)牙.多媒體閃存卡(MMC/SD、Memory Stick)和CMOS攝像頭等控制器。
LCD控制器的功能是產(chǎn)生顯示驅(qū)動(dòng)信號(hào),驅(qū)動(dòng)LCD顯示屏。用戶(hù)只需要通過(guò)讀寫(xiě)一系列的寄存器,完成配制和顯示控制。MX1中的LCD控制器可支持單色/彩色LCD 顯示器。支持彩色TFT時(shí),可提供4/8/12/16位顏色模式,其中16位顏色模式下可以顯示64k種顏色。配置LCD控制器重要的一步是指定顯示緩沖區(qū),顯示的內(nèi)容就是從緩沖區(qū)中讀出的,其大小由屏幕分辨率和顯示顏色數(shù)決定。在本例中,采用KYocera 公司的KCS057QV1AJ液晶屏,在240×320分辨率下可提供8位彩色顯示,即最大256色位圖。
2.Linux下的設(shè)備驅(qū)動(dòng)
在Linux操作系統(tǒng)下有兩類(lèi)主要的設(shè)備文件類(lèi)型,一種是字符設(shè)備,另一種是塊設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是在對(duì)字符設(shè)備發(fā)出讀/寫(xiě)請(qǐng)求時(shí),實(shí)際的硬件I/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶(hù)進(jìn)程對(duì)設(shè)備請(qǐng)求讀/寫(xiě)時(shí),它首先察看緩沖區(qū)的內(nèi)容,如果緩沖區(qū)的數(shù)據(jù)能滿(mǎn)足用戶(hù)的要求,就返回請(qǐng)求的數(shù)據(jù),如果不能,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的I/O操作。
Linux的設(shè)備管理是和文件系統(tǒng)解密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,稱(chēng)為設(shè)備文件。應(yīng)用程序可以打開(kāi)、關(guān)閉和讀寫(xiě)這些設(shè)備文件,完成對(duì)設(shè)備的操作,就像操作普通的數(shù)據(jù)文件一樣。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號(hào),每個(gè)設(shè)備號(hào)又分為主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào)用來(lái)區(qū)分不同種類(lèi)的設(shè)備,而次設(shè)備號(hào)標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備,比如有兩個(gè)軟盤(pán),就可以用從設(shè)備號(hào)來(lái)區(qū)分它們。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶(hù)進(jìn)程將無(wú)法訪問(wèn)到驅(qū)動(dòng)程序。幀緩沖設(shè)備為標(biāo)準(zhǔn)字符設(shè)備,主設(shè)備號(hào)為29,次設(shè)備號(hào)則從0到31。
3.Linux的幀緩沖設(shè)備
幀緩沖區(qū)是出現(xiàn)在Linux 2.2.xx及以后版本內(nèi)核當(dāng)中的一種驅(qū)動(dòng)程序接口,這種接口將顯示設(shè)備抽象為幀緩沖區(qū)設(shè)備區(qū)。它允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫(xiě)操作。這種操作是抽象的、統(tǒng)一的,用戶(hù)不必關(guān)心物理顯存的位置、換頁(yè)機(jī)制等具體細(xì)節(jié)。這些都由Framebufer設(shè)備驅(qū)動(dòng)來(lái)完成。幀緩沖設(shè)備對(duì)應(yīng)的設(shè)備文件為/dev/fb*,如果系統(tǒng)有多個(gè)顯示卡,Linux下還可支持多個(gè)幀緩沖設(shè)備,最多可達(dá)32個(gè),分別為/dev/fb0到/dev/fb31,而/dev/fb則為當(dāng)前缺省的幀緩沖設(shè)備,通常指向/dev/fb0。當(dāng)然在嵌入式系統(tǒng)中支持一個(gè)顯示設(shè)備就夠了。在使用Framebufer時(shí),Linux是將顯卡置于圖形模式下的.在應(yīng)用程序中,一般通過(guò)將Frame-Buffer設(shè)備映射到進(jìn)程地址空間的方式使用,對(duì)于幀緩沖來(lái)說(shuō),可以把它看成是一段內(nèi)存,用于讀寫(xiě)內(nèi)存的函數(shù)均可對(duì)這段地址進(jìn)行讀寫(xiě),只不過(guò)這段內(nèi)存被專(zhuān)門(mén)用于放置要在LCD上顯示的內(nèi)容,其目的就是通過(guò)配置LCDC寄存器在一段指定內(nèi)存與LCD 之間建立一個(gè)自動(dòng)傳輸?shù)耐ǖ?。這樣,任何程序只要修改這段內(nèi)存中的數(shù)據(jù),就可以改變LCD 上的顯示內(nèi)容。
Contact Us
工廠地址:深圳市寶安區(qū)福永街道鳳凰興業(yè)一路華倫科技園21棟2樓
楊 總:13828709518
雷 總:13923457816
郵箱:yangdekai@hctlcd.com
QQ:417594796
Latest News