亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于FrameBuffer的嵌入式系統(tǒng)LCD圖像顯示的實(shí)現(xiàn)

        2017-05-08 13:52:21孫靜
        智能計算機(jī)與應(yīng)用 2016年6期

        孫靜

        摘要:本文以O(shè)MAP3530為處理器,S3C2410 LCD控制器為基礎(chǔ),基于嵌入式Linux 2.6內(nèi)核,研究了FrameBuffer機(jī)制下的LCD驅(qū)動程序,介紹了相關(guān)的數(shù)據(jù)結(jié)構(gòu),F(xiàn)rameBuffer的加載和卸載的完整過程。實(shí)現(xiàn)了在LCD上顯示字符、圖形、圖像的應(yīng)用。

        關(guān)鍵詞: 幀緩沖; LCD; 圖像顯示

        中圖分類號: TP311

        文獻(xiàn)標(biāo)志碼: A

        文章編號: 2095-2163(2016)06-0127-03

        0引言

        隨著嵌入式技術(shù)的發(fā)展,顯示模塊在嵌入式產(chǎn)品中得到了日趨廣泛的設(shè)計應(yīng)用。LCD可顯示字符、漢字和圖形,具有低功耗、體積小、綠色環(huán)保等特點(diǎn),因而在嵌入式產(chǎn)品的顯示系統(tǒng)上已然成為重點(diǎn)優(yōu)先研究首選。LCD的驅(qū)動程序針對不同的處理器通用性較差,本文為此研討提出了一種移植性較好的LCD驅(qū)動程序,即基于Linux的FrameBuffer機(jī)制,同時采用S3C2410 LCD控制器,進(jìn)而開發(fā)生成了嵌入式LCD的字符、圖形、圖像顯示方法。

        [BT4]1基于FrameBuffer的驅(qū)動設(shè)計

        [BT5]1.1FrameBuffer機(jī)制

        FrameBuffer是Linux操作系統(tǒng)為顯示設(shè)備提供的一種驅(qū)動程序接口,可將顯示緩沖區(qū)實(shí)現(xiàn)抽象處理,屏蔽圖像硬件的底層,上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進(jìn)行讀寫操作。用戶不必關(guān)心顯示緩沖區(qū)的具體物理位置、存放方式。FrameBuffer的顯示緩沖區(qū)位于Linux核心態(tài)地址空間,每個應(yīng)用程序均有自己的虛擬地址空間。用戶通過調(diào)用mmap函數(shù),可將文件的內(nèi)容映射到應(yīng)用空間。對于FrameBuffer設(shè)備而言,通過映射操作,可將屏幕緩沖區(qū)的物理地址應(yīng)用到程序空間的一段虛擬地址中,然后通過讀寫對應(yīng)段虛擬地址而訪問屏幕緩沖區(qū),從而在屏幕上繪制各種圖形、圖像、文字等。FrameBuffer的優(yōu)點(diǎn)是可高度靈活地支持不同的硬件,減少了新處理器的開發(fā)工作。

        [BT5]1.2基于FrameBuffer的驅(qū)動設(shè)計

        FrameBuffer幀緩沖設(shè)備給用戶設(shè)計指定的讀寫接口file_operations實(shí)際由fbmem.c文件里的特定file_operatins結(jié)構(gòu)對象來展現(xiàn)提供,而特定幀緩沖設(shè)備fb_info結(jié)構(gòu)體的注冊、注銷及其中成員的維護(hù),尤其是fb_ops中的成員函數(shù)的實(shí)現(xiàn)則由對應(yīng)的xxxfb.c文件來構(gòu)造調(diào)取顯示,fb_ops中的成員函數(shù)最終會操作LCD控制器的寄存器。圖1即給出了幀緩沖設(shè)備驅(qū)動的程序結(jié)構(gòu)。

        1.2.1FrameBuffer相關(guān)的數(shù)據(jù)結(jié)構(gòu)

        本節(jié),將研究給出與幀緩沖相關(guān)的數(shù)據(jù)結(jié)構(gòu)的功能設(shè)計概述如下:

        1)fb_info。記錄了FrameBuffer的全部信息,包括設(shè)備的定制參數(shù)、狀態(tài)以及操作函數(shù)指針。每一個幀緩沖設(shè)備必須對應(yīng)唯一fb_info。

        2)fb_ops。fb_info的成員變量fb_ops即為指向底層操作的函數(shù)的指針,這些函數(shù)是需要驅(qū)動程序開發(fā)人員來制定編寫的。包括打開、釋放函數(shù),用于檢查可以修改的屏幕參數(shù)并調(diào)整到適當(dāng)值,同時設(shè)置color寄存器,使用戶設(shè)置的屏幕參數(shù)在硬件上能夠呈現(xiàn)事實(shí)有效等具體功能的分配操作。

        3)fb_var_screeninfo和fb_fix_screeninfo。這2個結(jié)構(gòu)體也是fb_info的成員。其中,fb_var_screeninfo記錄用戶可修改的顯示控制器參數(shù),包括屏幕分辨率和每個像素點(diǎn)的比特數(shù)。fb_fix_screeninfo記錄用戶不能修改的顯示控制器的參數(shù),如屏幕緩沖區(qū)的物理地址、長度。當(dāng)對幀緩沖設(shè)備展開執(zhí)行映射操作的時候,就是從fb_fix_screeninfo中取得緩沖區(qū)物理地址的。

        4)fb_bitfield。描述每一像素顯示緩沖區(qū)的組織方式,包括位域偏移、位域長度和MSB指示。

        5)fb_cmap。記錄設(shè)備無關(guān)的顏色表信息。

        1.2.2FrameBuffer設(shè)備驅(qū)動的模塊加載和卸載

        FrameBuffer設(shè)備驅(qū)動的模塊加載,可解析描述為如下4個步驟:

        1)申請fb_info結(jié)構(gòu)體的內(nèi)存空間,初始化fb_info結(jié)構(gòu)體中固定和可變的屏幕參數(shù),即填充fb_info的fb_var_screeninfo var和fb_fix_screeninfo fix成員。

        2)根據(jù)LCD屏幕的特點(diǎn),執(zhí)行LCD控制器硬件的初始化。

        3)申請F(tuán)rameBuffer設(shè)備的顯示緩沖區(qū)空間。

        4)注冊FrameBuffer設(shè)備。

        FrameBuffer設(shè)備驅(qū)動的模塊卸載,則需依次釋放fb_info結(jié)構(gòu)體內(nèi)存、關(guān)閉LCD、釋放顯示緩沖區(qū)以及注銷FrameBuffer設(shè)備的流程也將移交到平臺驅(qū)動的移除函數(shù)中順序操控完成。

        [BT4]2基于FrameBuffer的LCD圖像顯示的實(shí)現(xiàn)

        在LCD上顯示圖像的主流程如圖2所示。首先調(diào)用open函數(shù)打開設(shè)備,然后調(diào)用ioctl獲取設(shè)備相關(guān)信息,接下來就是讀取圖形文件數(shù)據(jù),把圖像的RGB值映射到顯存中,這部分也是圖像顯示的設(shè)計核心。

        [BT5]2.1LCD刷新函數(shù)

        本系統(tǒng)采用RGB565模式,即Red占5位(bit[11:15]),Green占6位(bit[5:10]),Blue占5位(bit[0:4])。LCD刷新函數(shù)的功能是把二級緩存LCDBuffer的數(shù)據(jù)由32位彩色圖形信息轉(zhuǎn)換成16位圖形信息,而后存送至fbp指向的一級緩存。轉(zhuǎn)換方法如下:

        pixcolor = ((pbuf[0]&0xf8)>>3)|(((pbuf[1]&0xfc)>>2)<<5)|(((pbuf[2]&0xf8)>>3)<<11);

        [BT5]2.2顯示像素點(diǎn)

        LCD上顯示圖像的基礎(chǔ)設(shè)計操作即是顯示像素點(diǎn),基于FrameBuffer顯示像素點(diǎn)就是把屏幕對應(yīng)坐標(biāo)位置的顏色值賦值到LCDFRAMEBUFFER數(shù)組里。本系統(tǒng)使用的是640×480 TFT液晶屏,通過如下方法可處理實(shí)現(xiàn)像素點(diǎn)的最終顯示,關(guān)鍵代碼如下:

        typedef unsigned long tOff;

        void LCD_WRITE_MEM( U32 off,U16 Data)

        {

        (* ((U16*)LCDFRAMEBUFFER + (off)) ) = Data;

        }static void SetPixel(U16 x, U16 y, U32 c)

        {

        tOff Off = (tOff)((tOff)y*(tOff)640 + (x));

        LCD_WRITE_MEM(Off, Data);

        }

        [BT5]2.3基本圖形繪制

        得到了像素點(diǎn)的研究顯示,就可以在LCD上繪制基本圖形了。其中,水平線和垂直線是原始功能線型。本次研究指出,水平線的繪制就是保持點(diǎn)的縱坐標(biāo)不變,橫坐標(biāo)從x0變化到x1,依次顯示像素點(diǎn),這樣就得到一條從(x0,y0)到(x1,y0)的水平線。同樣道理,橫坐標(biāo)不變,縱坐標(biāo)從y0變化到y(tǒng)1,依次顯示像素點(diǎn),即可得到一條從(x0,y0)到(x0,y1)的垂直線。在此基礎(chǔ)上,矩形的繪制是給出矩形的左上角坐標(biāo)和右下角坐標(biāo),而后根據(jù)這2個坐標(biāo)在矩形范圍內(nèi)畫線即可得到實(shí)現(xiàn)。

        由于嵌入式系統(tǒng)不能處理浮點(diǎn)數(shù),在LCD屏上顯示圓形則較復(fù)雜。本系統(tǒng)采用改進(jìn)的Bresenham畫圓算法,分別給出了空心圓和實(shí)心圓的繪制方法,空心圓程序設(shè)計流程如圖3所示。實(shí)心圓就是把空心圓內(nèi)的像素點(diǎn)顯示出來。

        .4漢字及BMP位圖圖像顯示方法

        漢字是以點(diǎn)陣字模形式存儲的,采用16×16點(diǎn)陣(32字節(jié))、24×24點(diǎn)陣(72字節(jié)),每個點(diǎn)用一個二進(jìn)制位表示,將其在屏幕上顯示出來,就是研究指定刻畫的漢字。

        BMP位圖文件和大多數(shù)圖形文件一樣,分為文件描述區(qū)(頭文件信息)和圖像存儲區(qū)(像素數(shù)據(jù))兩部分。圖像的顯示方法和漢字類似,區(qū)別之處只是需要從位圖文件里讀出頭文件信息,BMP位圖LCD顯示的程序流程如圖4所示。

        3結(jié)束語

        基于Linux的FrameBuffer和OMAP3530處理器的開發(fā)平臺,在LCD上顯示實(shí)現(xiàn)了清晰、穩(wěn)定的圖形、字符和圖像。該方法移植修改簡單、方便,為嵌入式產(chǎn)品的顯示系統(tǒng)構(gòu)建了具體模式設(shè)計基礎(chǔ),對嵌入式LCD的應(yīng)用提供了通用的實(shí)現(xiàn)方法。

        參考文獻(xiàn):[HT]

        張策, 楊緒劍, 王君君. 基于 FrameBuffer 的 LCD 驅(qū)動設(shè)計[J]. 計算機(jī)工程與設(shè)計,2009,30 (23):5372-5375.

        [2] 葛化敏,鄭靜,楊利青. 基于ARM-Linux的LCD顯示模塊設(shè)計[J]. 儀表技術(shù)與傳感器,2009(7):75-77,86.

        [3] 王海霞,武一. 基于SOPC的LCD顯示模塊的設(shè)計與實(shí)現(xiàn)[J]. 液晶與顯示,2012,27(4):508-514.

        [4] 馬舜峰,金龍旭,安少婷,等. 一種基于ARM9的彩色TFT-LCD模塊設(shè)計及實(shí)現(xiàn), 液晶與顯示,2010,25(5):718-723.

        日韩av高清无码| 亚洲美女av一区二区在线| 曰韩无码无遮挡a级毛片| 亚洲老妇色熟女老太| 中文字幕久久久久久久系列| 日本在线一区二区三区四区| 男人天堂这里只有精品| 四虎影视免费永久在线观看| 国产小毛片| 91精品国产乱码久久久| 国产主播一区二区三区蜜桃| 忘忧草社区www日本高清| 国内精品久久久影院| 精品国产亚洲av成人一区| 激情五月我也去也色婷婷| 青春草在线视频免费观看| 9191在线亚洲精品| 都市激情亚洲综合一区| 男人天堂这里只有精品| 精品国产一区二区三区免费| 亚洲欧洲日产国产AV无码| 色妞一区二区三区免费视频| 日本少妇又色又爽又高潮| 色八区人妻在线视频免费| 久久久久亚洲精品天堂| 亚洲综合新区一区二区| 高h小月被几个老头调教| 亚洲色偷拍区另类无码专区| 国产精品女丝袜白丝袜| 亚洲综合中文字幕日韩| 免费成人在线电影| 欧美日韩性视频| 亚洲精品女同在线观看| 久久精品免费一区二区喷潮| 男人扒开女人下面狂躁小视频| 国产女奸网站在线观看| 国产在线一区二区三区香蕉| 亚洲精品久久久av无码专区| 欧美日韩在线免费看| 日韩久久免费精品视频 | 色综合久久中文字幕综合网|