999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FrameBuffer的嵌入式系統LCD圖像顯示的實現

2017-05-08 13:52:21孫靜
智能計算機與應用 2016年6期

孫靜

摘要:本文以OMAP3530為處理器,S3C2410 LCD控制器為基礎,基于嵌入式Linux 2.6內核,研究了FrameBuffer機制下的LCD驅動程序,介紹了相關的數據結構,FrameBuffer的加載和卸載的完整過程。實現了在LCD上顯示字符、圖形、圖像的應用。

關鍵詞: 幀緩沖; LCD; 圖像顯示

中圖分類號: TP311

文獻標志碼: A

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

0引言

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

[BT4]1基于FrameBuffer的驅動設計

[BT5]1.1FrameBuffer機制

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

[BT5]1.2基于FrameBuffer的驅動設計

FrameBuffer幀緩沖設備給用戶設計指定的讀寫接口file_operations實際由fbmem.c文件里的特定file_operatins結構對象來展現提供,而特定幀緩沖設備fb_info結構體的注冊、注銷及其中成員的維護,尤其是fb_ops中的成員函數的實現則由對應的xxxfb.c文件來構造調取顯示,fb_ops中的成員函數最終會操作LCD控制器的寄存器。圖1即給出了幀緩沖設備驅動的程序結構。

1.2.1FrameBuffer相關的數據結構

本節,將研究給出與幀緩沖相關的數據結構的功能設計概述如下:

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

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

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

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

5)fb_cmap。記錄設備無關的顏色表信息。

1.2.2FrameBuffer設備驅動的模塊加載和卸載

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

1)申請fb_info結構體的內存空間,初始化fb_info結構體中固定和可變的屏幕參數,即填充fb_info的fb_var_screeninfo var和fb_fix_screeninfo fix成員。

2)根據LCD屏幕的特點,執行LCD控制器硬件的初始化。

3)申請FrameBuffer設備的顯示緩沖區空間。

4)注冊FrameBuffer設備。

FrameBuffer設備驅動的模塊卸載,則需依次釋放fb_info結構體內存、關閉LCD、釋放顯示緩沖區以及注銷FrameBuffer設備的流程也將移交到平臺驅動的移除函數中順序操控完成。

[BT4]2基于FrameBuffer的LCD圖像顯示的實現

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

[BT5]2.1LCD刷新函數

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

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

[BT5]2.2顯示像素點

LCD上顯示圖像的基礎設計操作即是顯示像素點,基于FrameBuffer顯示像素點就是把屏幕對應坐標位置的顏色值賦值到LCDFRAMEBUFFER數組里。本系統使用的是640×480 TFT液晶屏,通過如下方法可處理實現像素點的最終顯示,關鍵代碼如下:

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基本圖形繪制

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

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

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

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

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

3結束語

基于Linux的FrameBuffer和OMAP3530處理器的開發平臺,在LCD上顯示實現了清晰、穩定的圖形、字符和圖像。該方法移植修改簡單、方便,為嵌入式產品的顯示系統構建了具體模式設計基礎,對嵌入式LCD的應用提供了通用的實現方法。

參考文獻:[HT]

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

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

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

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

主站蜘蛛池模板: 成年网址网站在线观看| 国产肉感大码AV无码| 9999在线视频| 国产成人一区在线播放| 美女啪啪无遮挡| 日本一本在线视频| 日日碰狠狠添天天爽| 精品1区2区3区| 国产乱视频网站| 久久精品免费国产大片| 久久人人爽人人爽人人片aV东京热 | 国产精品欧美在线观看| 一级毛片在线直接观看| 有专无码视频| 亚洲第一区欧美国产综合| www.99在线观看| 深夜福利视频一区二区| 91人妻在线视频| 精品久久久久久中文字幕女| 亚洲精品黄| av性天堂网| 无码精油按摩潮喷在线播放 | 最新国产在线| 久久久久免费精品国产| 天天爽免费视频| 思思99热精品在线| 欧美亚洲综合免费精品高清在线观看 | 亚洲浓毛av| 人妻中文字幕无码久久一区| 97精品伊人久久大香线蕉| 欧美精品一区二区三区中文字幕| 国产精品美女自慰喷水| a级毛片免费播放| 日韩无码真实干出血视频| 在线欧美a| 欧美va亚洲va香蕉在线| 中文字幕人成人乱码亚洲电影| 制服丝袜一区| 欧美精品1区2区| 中文字幕一区二区视频| 99福利视频导航| 国产精品亚洲天堂| 91在线精品麻豆欧美在线| 中文无码伦av中文字幕| 国内丰满少妇猛烈精品播 | 国产在线拍偷自揄观看视频网站| 国产区人妖精品人妖精品视频| 四虎影视库国产精品一区| 伊人久久久大香线蕉综合直播| 国产成人AV综合久久| 国产亚洲视频免费播放| 日韩精品亚洲一区中文字幕| 日韩黄色精品| 成人在线亚洲| 高清国产在线| 免费人成在线观看视频色| 亚洲福利片无码最新在线播放| 国产欧美视频综合二区| 国产亚洲精品97在线观看| 香蕉精品在线| 亚洲欧美极品| 久久精品91麻豆| 久久国产亚洲偷自| 精品欧美一区二区三区久久久| 天堂在线亚洲| 狠狠亚洲五月天| 国产区精品高清在线观看| 欧美影院久久| 日本一区高清| 亚洲精品日产精品乱码不卡| 久久国产乱子| 日韩免费成人| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 午夜一区二区三区| 国产亚洲精| 高清亚洲欧美在线看| 国产h视频在线观看视频| 免费人成在线观看成人片| 中文字幕无码电影| 91蜜芽尤物福利在线观看| 亚洲国产精品久久久久秋霞影院| 综合亚洲色图|