工(gong)廠地(di)址:深圳市(shi)寶(bao)安區(qu)福永街道鳳凰(huang)興業一路華倫科(ke)技(ji)園21棟(dong)2樓(lou)
楊 總:13828709518
雷 總(zong):13923457816
郵箱:yangdekai@pianyun.com.cn
QQ:417594796
2018-01-19 15:55:44
隨著高性能嵌入式處理器的普及和硬件成本的不斷降低,尤其是ARM 系列處理器的推出,嵌入式系統的功能越來越強。單色LCD液晶屏也因為色彩單調,存儲信息小,處理速度慢而不能符合人們的需求。
在多媒體應用的推動下,彩色LCD液晶屏越來越多地應用到了嵌入式系統中 如新一代手機和掌上電腦多采用TFT顯示器件,該顯示器件支持彩色圖形界面和視頻媒體播放。Linux作為開放源代碼的操作系統也在市場中占據了一席之地。由于Linux成本低廉,源代碼開放,因此成為國內外廠商極力發展的操作系統。在應用需求的推動下,Linux下也出現了許多圖形界面軟件包,如MiniGUI、Trolletech公司的Embedded QT等,其圖形界面及開發工具與Windows CE不相上下。在圖形軟件包的開發和移植工作中都牽涉到底層LCD的驅動問題。筆者有幸參與了Linux操作系統下LCD部分的開發,其主要功能是點亮液晶屏,將在攝像頭上采集的BMP圖片在液晶屏上顯示并將BMP 格式壓縮成JPEG格式,使得存儲量減少。因此筆者就在開發過程中遇到的問題一一闡述。
背景知(zhi)識(shi)
在切入正題之前,先來了(le)解在做驅動過程中需要預先知道(dao)的知識。
1.硬(ying)件平臺
MC9328MX1(以下簡稱MX1)是Motorola 公(gong)司基于ARM核心的第一款MCU,主要面向高端嵌(qian)入式應(ying)用。內(nei)部(bu)采用ARM920T內(nei)核,并(bing)集成了SDRAM/Flash、LCD,USB、藍(lan)牙.多媒(mei)體閃存卡(MMC/SD、Memory Stick)和CMOS攝像頭等控制(zhi)器(qi)。
LCD控(kong)制(zhi)器(qi)的功能是(shi)產生顯(xian)示(shi)驅動(dong)信號,驅動(dong)LCD顯(xian)示(shi)屏(ping)。用戶只需要通(tong)過讀(du)寫一(yi)系列的寄(ji)存(cun)器(qi),完成配(pei)制(zhi)和顯(xian)示(shi)控(kong)制(zhi)。MX1中的LCD控(kong)制(zhi)器(qi)可支(zhi)持(chi)單色(se)(se)/彩色(se)(se)LCD 顯(xian)示(shi)器(qi)。支(zhi)持(chi)彩色(se)(se)TFT時(shi),可提供4/8/12/16位顏色(se)(se)模式,其中16位顏色(se)(se)模式下(xia)可以(yi)顯(xian)示(shi)64k種(zhong)顏色(se)(se)。配(pei)置LCD控(kong)制(zhi)器(qi)重(zhong)要的一(yi)步(bu)是(shi)指定顯(xian)示(shi)緩(huan)沖(chong)區(qu),顯(xian)示(shi)的內容就(jiu)是(shi)從緩(huan)沖(chong)區(qu)中讀(du)出的,其大小由(you)屏(ping)幕分辨率和顯(xian)示(shi)顏色(se)(se)數(shu)決定。在本(ben)例中,采用KYocera 公司的KCS057QV1AJ液晶屏(ping),在240×320分辨率下(xia)可提供8位彩色(se)(se)顯(xian)示(shi),即(ji)最大256色(se)(se)位圖。
2.Linux下的設備驅動
在Linux操(cao)(cao)作(zuo)系統下(xia)有兩類(lei)主要(yao)的(de)設備文件類(lei)型,一(yi)種(zhong)是字符設備,另一(yi)種(zhong)是塊(kuai)設備。字符設備和塊(kuai)設備的(de)主要(yao)區別是在對(dui)字符設備發(fa)出(chu)讀/寫請求時(shi),實際的(de)硬件I/O一(yi)般就緊接(jie)著發(fa)生了,塊(kuai)設備則不然(ran),它(ta)利用一(yi)塊(kuai)系統內(nei)存作(zuo)緩(huan)沖(chong)區,當(dang)用戶(hu)進程對(dui)設備請求讀/寫時(shi),它(ta)首(shou)先察(cha)看緩(huan)沖(chong)區的(de)內(nei)容,如(ru)果緩(huan)沖(chong)區的(de)數(shu)據能(neng)滿(man)足(zu)用戶(hu)的(de)要(yao)求,就返回(hui)請求的(de)數(shu)據,如(ru)果不能(neng),就調用請求函數(shu)來進行實際的(de)I/O操(cao)(cao)作(zuo)。
Linux的(de)(de)(de)(de)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)管(guan)(guan)理(li)是和文(wen)(wen)(wen)件(jian)(jian)(jian)系統(tong)解密結(jie)合的(de)(de)(de)(de),各種設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)都(dou)以文(wen)(wen)(wen)件(jian)(jian)(jian)的(de)(de)(de)(de)形(xing)式存(cun)放在/dev目(mu)錄下(xia),稱為(wei)(wei)(wei)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)文(wen)(wen)(wen)件(jian)(jian)(jian)。應(ying)用(yong)程序可以打(da)開、關閉和讀寫這(zhe)些設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)文(wen)(wen)(wen)件(jian)(jian)(jian),完成對設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)的(de)(de)(de)(de)操作(zuo),就像操作(zuo)普通的(de)(de)(de)(de)數(shu)據文(wen)(wen)(wen)件(jian)(jian)(jian)一樣。為(wei)(wei)(wei)了管(guan)(guan)理(li)這(zhe)些設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei),系統(tong)為(wei)(wei)(wei)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)編(bian)了號(hao),每個設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)又分(fen)(fen)為(wei)(wei)(wei)主設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)和次(ci)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)。主設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)用(yong)來區(qu)分(fen)(fen)不同種類的(de)(de)(de)(de)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei),而次(ci)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)標識使用(yong)同一個設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)驅動程序的(de)(de)(de)(de)不同的(de)(de)(de)(de)硬件(jian)(jian)(jian)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei),比如有兩個軟盤(pan),就可以用(yong)從(cong)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)來區(qu)分(fen)(fen)它(ta)們。設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)文(wen)(wen)(wen)件(jian)(jian)(jian)的(de)(de)(de)(de)主設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)必(bi)須(xu)與設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)驅動程序在登記(ji)時申請的(de)(de)(de)(de)主設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)一致,否則用(yong)戶進程將(jiang)無法訪問到驅動程序。幀緩沖設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)為(wei)(wei)(wei)標準字符設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei),主設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)為(wei)(wei)(wei)29,次(ci)設(she)(she)(she)備(bei)(bei)(bei)(bei)(bei)號(hao)則從(cong)0到31。
3.Linux的幀(zhen)緩沖設備
幀(zhen)(zhen)緩(huan)沖(chong)(chong)區(qu)(qu)是出現在(zai)Linux 2.2.xx及以后(hou)版(ban)本內(nei)核當中的(de)(de)(de)(de)(de)(de)一(yi)(yi)種(zhong)驅動(dong)(dong)程序接(jie)口,這(zhe)種(zhong)接(jie)口將顯(xian)(xian)示(shi)設(she)(she)備(bei)抽(chou)象為(wei)(wei)幀(zhen)(zhen)緩(huan)沖(chong)(chong)區(qu)(qu)設(she)(she)備(bei)區(qu)(qu)。它(ta)允許(xu)上層應(ying)用(yong)(yong)程序在(zai)圖(tu)形(xing)模式下直接(jie)對顯(xian)(xian)示(shi)緩(huan)沖(chong)(chong)區(qu)(qu)進行讀寫操作(zuo)。這(zhe)種(zhong)操作(zuo)是抽(chou)象的(de)(de)(de)(de)(de)(de)、統一(yi)(yi)的(de)(de)(de)(de)(de)(de),用(yong)(yong)戶不必關(guan)心物理顯(xian)(xian)存的(de)(de)(de)(de)(de)(de)位置(zhi)、換(huan)頁(ye)機制等(deng)具體細節(jie)。這(zhe)些都由Framebufer設(she)(she)備(bei)驅動(dong)(dong)來(lai)完成。幀(zhen)(zhen)緩(huan)沖(chong)(chong)設(she)(she)備(bei)對應(ying)的(de)(de)(de)(de)(de)(de)設(she)(she)備(bei)文件(jian)為(wei)(wei)/dev/fb*,如果系統有多(duo)個(ge)顯(xian)(xian)示(shi)卡(ka),Linux下還可支持(chi)多(duo)個(ge)幀(zhen)(zhen)緩(huan)沖(chong)(chong)設(she)(she)備(bei),最多(duo)可達32個(ge),分別為(wei)(wei)/dev/fb0到(dao)/dev/fb31,而/dev/fb則為(wei)(wei)當前缺省的(de)(de)(de)(de)(de)(de)幀(zhen)(zhen)緩(huan)沖(chong)(chong)設(she)(she)備(bei),通常指(zhi)向/dev/fb0。當然在(zai)嵌入式系統中支持(chi)一(yi)(yi)個(ge)顯(xian)(xian)示(shi)設(she)(she)備(bei)就(jiu)夠(gou)了。在(zai)使用(yong)(yong)Framebufer時,Linux是將顯(xian)(xian)卡(ka)置(zhi)于(yu)圖(tu)形(xing)模式下的(de)(de)(de)(de)(de)(de).在(zai)應(ying)用(yong)(yong)程序中,一(yi)(yi)般通過將Frame-Buffer設(she)(she)備(bei)映射(she)到(dao)進程地址空間的(de)(de)(de)(de)(de)(de)方(fang)式使用(yong)(yong),對于(yu)幀(zhen)(zhen)緩(huan)沖(chong)(chong)來(lai)說,可以把它(ta)看(kan)成是一(yi)(yi)段內(nei)存,用(yong)(yong)于(yu)讀寫內(nei)存的(de)(de)(de)(de)(de)(de)函數均可對這(zhe)段地址進行讀寫,只不過這(zhe)段內(nei)存被專門用(yong)(yong)于(yu)放置(zhi)要在(zai)LCD上顯(xian)(xian)示(shi)的(de)(de)(de)(de)(de)(de)內(nei)容,其目的(de)(de)(de)(de)(de)(de)就(jiu)是通過配置(zhi)LCDC寄存器(qi)在(zai)一(yi)(yi)段指(zhi)定內(nei)存與LCD 之間建立一(yi)(yi)個(ge)自(zi)動(dong)(dong)傳輸的(de)(de)(de)(de)(de)(de)通道。這(zhe)樣,任何程序只要修改這(zhe)段內(nei)存中的(de)(de)(de)(de)(de)(de)數據,就(jiu)可以改變LCD 上的(de)(de)(de)(de)(de)(de)顯(xian)(xian)示(shi)內(nei)容。
Contact Us
工(gong)廠地(di)址:深圳市(shi)寶(bao)安區(qu)福永街道鳳凰(huang)興業一路華倫科(ke)技(ji)園21棟(dong)2樓(lou)
楊 總:13828709518
雷 總(zong):13923457816
郵箱:yangdekai@pianyun.com.cn
QQ:417594796
郵箱:yangdekai@pianyun.com.cn
地址:深(shen)圳市(shi)寶安區福(fu)永街道鳳凰興業一路華倫科技(ji)園21棟2樓(lou)
掃(sao)(sao)一掃(sao)(sao),關注(zhu)我們