顯示驅(qū)動和圖形應(yīng)用程序初步_第1頁
顯示驅(qū)動和圖形應(yīng)用程序初步_第2頁
顯示驅(qū)動和圖形應(yīng)用程序初步_第3頁
顯示驅(qū)動和圖形應(yīng)用程序初步_第4頁
顯示驅(qū)動和圖形應(yīng)用程序初步_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

嵌入式Linux顯示驅(qū)動

和圖形應(yīng)用程序初步電子信息工程學(xué)院 楊昕欣本講主要內(nèi)容LCD顯示原理MX1的LCD接口初始化配置顯示驅(qū)動原理及源代碼分析基于幀緩沖設(shè)備的圖形應(yīng)用程序開發(fā)LCD硬件原理圖LCD顯示原理LCD是基于液晶光電效應(yīng)的顯示器件。液晶顯示器的工作原理是利用液晶的物理特性,在通電時,液晶排列變得有秩序,使光線容易通過;不通電時,排列則變得混亂,阻止光線通過。即液晶工作時,使用的是外部的光線,自己本身并不發(fā)光,所以與CRT相比,液晶顯示器的耗電量較低。

LCD分類LCD可由為液晶照明的方式分為:傳送式和反射式傳送式屏幕要使用外加光源照明,稱為背光(backlight),照明光源要安裝在LCD的背后。傳送式LCD在正常光線及暗光線下,顯示效果都很好,但在戶外,尤其在日光下,很難辯清顯示內(nèi)容。反射式屏幕,則不需要外加照明電源,使用周圍環(huán)境的光線(或在某些筆記本中,使用前部照明系統(tǒng)的光線)。這樣,反射式屏幕就沒有背光,所以,此種屏幕在戶外或光線充足的室內(nèi),才會有出色的顯示效果,但在一般室內(nèi)光線下,這種顯示屏的顯示效果就不及背光傳送式的。

LCD分類LCD可分為:主動式和被動式被動矩陣顯示畫面的原理:輸入的信號依次去驅(qū)動每一排的電極,當(dāng)某一排被選定的時候,列向上的電極將被觸發(fā)打開位于排和列交叉上的那些像素。優(yōu)點(diǎn):比較簡單,而且對液晶屏的成本增加也不多。缺點(diǎn):如果有太大的電流通過某個單元,附近的單元都會受到影響,引起虛影。如果電流太小,單元的開和關(guān)就會變得遲緩,降低對比度和丟失移動畫面的細(xì)節(jié)。

LCD分類主動矩陣LCD的原理:主動在每個單元中都加入了很小的晶體管:由晶體管來控制電流的開和斷。晶體管電極是利用薄膜技術(shù)而做成的。薄膜晶體管LCD(TFT—LCD)也因此得名。

優(yōu)點(diǎn):晶體管可以迅速地控制每個單元,由于單元之間的電干擾很小,所以可使用大電流,而不會有虛影和拖尾現(xiàn)象更大的電流會提供更好的對比度、更銳利的和更明亮的圖像。MX1對LCD的支持MX1LCDC(液晶顯示控制器,LiquidCrystalDisplayController)提供了對單色,灰度,被動式彩色點(diǎn)陣液晶和主動式彩色點(diǎn)陣液晶屏的支持.主要特性如下:支持自刷新方式LCD最多16級灰度顯示被動式與主動式彩色液晶屏接口可編程刷新率支持16/12/8/4/2/1位的數(shù)據(jù)總線寬度支持4/8bpp的被動式彩屏(CSTN)支持4/8/12/16bpp的主動式彩屏(TFT)

灰度顯示原理LCD顯示屏并不是設(shè)置成不同的亮度去驅(qū)動每一像素的。它對象素要么顯示,要么關(guān)閉。LCD顯示屏的一個常用指標(biāo)是它的反應(yīng)時間,反應(yīng)時間指的是一個像素從顯示到關(guān)閉所花費(fèi)的時間,典型的是幾十ms。LCD控制器內(nèi)部有1個16周期計數(shù)器,用于產(chǎn)生16周期的間隔。16周期間隔里像素顯示的次數(shù)決定了該像素的灰度彩色顯示原理R、G、B三種灰度的疊加顯示刷新率刷新率是一個重要的顯示特性,指的是整個數(shù)據(jù)幀被重新寫到顯示屏的頻率。如果數(shù)據(jù)寫得太慢,將影響顯示質(zhì)量;太快則顯示器的反應(yīng)時間跟不上像素驅(qū)動狀態(tài)的改變。大部分顯示屏推薦的速率是70~80Hz。

MX1顯示屏幕大小MX1顯示屏幕大小實際屏幕寬度(XMAX)實際屏幕高度(YMAX)虛擬顯示頁寬(VPW)——規(guī)定最大頁寬,用來計算每一行的起始地址。每一頁的首行起始地址由SSA決定,第二行的起始地址為SSA+VPW,以此類推,第n行的起始地址為SSA+n*VPW。虛擬顯示頁高(VPH)——只受顯式內(nèi)存大小限制,對LCDC沒有影響LCDC會掃描SSA寄存器指向的顯示內(nèi)存起始地址顯示數(shù)據(jù)映射顯示數(shù)據(jù)映射BigEndianvs.LittleEndianBigEndian:數(shù)據(jù)高位字節(jié)存在內(nèi)存的低位地址上,低位字節(jié)保存在內(nèi)存的高位地址上。LittleEndian:數(shù)據(jù)高位字節(jié)存在內(nèi)存的高位地址上,低位字節(jié)保存在內(nèi)存的低位地址上。舉例:00000000000000000000010000000001顯示數(shù)據(jù)映射顯示數(shù)據(jù)映射MX1的LCDC寄存器簡介灰度顯示原理最多16種灰度級別,用2bit或4bit表示2bit最多表示4種灰度,4bit表示16種灰度某像素的灰度是用每16幀中,該像素顯示的幀數(shù)來表示的,這種機(jī)制稱為幀速率控制。通?;叶鹊燃壊皇蔷€形劃分的,比如對于4級灰度,某種液晶需要按0,1/4,1/2,1的等級劃分,這比按0,1/3,2/3,1的線形劃分要有更好的效果灰度顯示原理幀速率控制(非線性)彩色顯示原理被動彩色矩陣顯示原理:對于4bit和8bit模式,利用LCDC的顏色映射矩陣將4bit或8bit數(shù)據(jù)映射為12bit數(shù)據(jù)上述12bit數(shù)據(jù)分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,分別通過控制三個獨(dú)立的FRC實現(xiàn)對于12bit模式,自身就分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,因此不需要通過顏色映射矩陣,可以直接控制相應(yīng)的FRC對于MC9328,不支持超過12bit的被動彩色顯示矩陣被動式彩色顯示矩陣(顏色映射RAM)彩色顯示原理主動彩色矩陣顯示原理:對于4bit和8bit模式,利用LCDC的顏色映射矩陣將4bit或8bit數(shù)據(jù)映射為12bit數(shù)據(jù)上述12bit數(shù)據(jù)分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,對于主動模式,上述三個通道輸出的紅、綠、藍(lán)控制量直接送給液晶,不需要經(jīng)過MX1的LCDC的FRC(由LCD本身實現(xiàn)類似FRC的功能);被動式則需要用到MX1的FRC.對于MC9328,不支持超過16bit的主動彩色顯示矩陣對于12bit/16bit的像素信息,直接送給液晶,不需要通過LCDC的顏色映射矩陣主動式彩色顯示矩陣(顏色映射RAM)LCDC接口及時序接口:1.像素數(shù)據(jù)2.垂直同步信號3.水平同步信號4.移位時鐘信號5.刷新信號6.對比度信號7.夏普屏專用信號SPL_SPR、CLS、SP、REV被動式矩陣液晶接口動作流程1.LSCLK將像素信號輸入液晶驅(qū)動電路的內(nèi)部寄存器2.LP標(biāo)志當(dāng)前一行像素的數(shù)據(jù)已經(jīng)傳送完成,并且將已傳來的數(shù)據(jù)鎖存到一個寬寄存器中3.FLM標(biāo)志著當(dāng)前所顯示頁的第一行4.LD表示具體的像素信號,在兩個LP脈沖之間的LD表示一行的像素5.ACD每隔預(yù)定的若干幀之后就會翻轉(zhuǎn)一次,對液晶進(jìn)行一次刷新被動式矩陣液晶接口動作時序單色、4bit數(shù)據(jù)寬度液晶的動作時序(m為像素數(shù))被動式彩色、8bit數(shù)據(jù)寬度液晶的動作時序(m為像素數(shù))

主動式矩陣液晶接口動作流程1.在LSCLK的下降沿,將像素信號輸入給液晶驅(qū)動電路的內(nèi)部寄存器。也可以是上升沿,通過更改寄存器中相應(yīng)標(biāo)志位實現(xiàn)。2.HSYNC脈沖產(chǎn)生新的一行3.VSYNC脈沖產(chǎn)生新的一幀,每一個VSYNC脈沖內(nèi),至少產(chǎn)生一個HSYNC脈沖4.LD表示具體的像素信號,在兩個LP脈沖之間的LD表示一行的像素5.OE為使能信號,OE為低電平時,數(shù)據(jù)無效,不顯示TFT顏色通道分配在4bit、8bit和12bit模式: LD[15:12]定義紅色,LD[10:7]定義綠色,LD[4:1]定義藍(lán)色在16bit模式: LD[15:11]定義紅色,LD[10:5]定義綠色,LD[4:0]定義藍(lán)色LCDC原理框圖顯示的實現(xiàn)-幀緩沖幀緩沖(framebuffer)-顯示緩沖區(qū)是Linux為顯示設(shè)備提供的一個接口,是把顯存抽象后的一種設(shè)備,他允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進(jìn)行讀寫操作。

用戶不需要對底層驅(qū)動有深入了解,也不必關(guān)心物理顯存的位置、換頁機(jī)制等細(xì)節(jié)Xwindow繪制窗口,顯示漢字都是通過fb幀緩沖設(shè)備Linux可支持最多32個/dev/fb0~/dev/fb31缺省是/dev/fb0可以直接拷貝位圖到fb來顯示到屏幕cp/bitmap/penguin.bin/dev/fb0幀緩沖設(shè)備驅(qū)動原理幀緩沖設(shè)備屬于字符設(shè)備,其目的就是通過配置MX1寄存器,在一段指定的內(nèi)存與LCD之間建立一個自動傳輸?shù)耐ǖ馈_@樣,任何程序只要修改這段內(nèi)存中的數(shù)據(jù),就可以改變LCD上的顯示內(nèi)容。

MX1寄存器的初始化,特別是SSA幀緩沖設(shè)備驅(qū)動三個關(guān)鍵文件:1.fbmem.c2.xxfb.h3.xxfb.c一個模板文件:1.Skeleton.c相關(guān)頭文件:1.fb.h幀緩沖設(shè)備驅(qū)動Fbmem.c功能一:注冊所有顯示驅(qū)動的信息幀緩沖設(shè)備驅(qū)動 功能二:提供上層驅(qū)動接口即給用戶程序提供通用接口,從而使用戶不必關(guān)心具體的顯示硬件。幀緩沖設(shè)備的接口staticstructfile_operationsfb_fops={

owner:THIS_MODULE,

read:fb_read,/*讀操作*/

write:fb_write,/*寫操作*/

ioctl:fb_ioctl,/*控制操作*/

mmap:fb_mmap,/*映射操作*/

open:fb_open,/*打開操作*/

release:fb_release,/*關(guān)閉操作*/

};

其中的成員函數(shù)都在文件linux/driver/video/fbmem.c中定義

fb_readfb_read(structfile*file,char*buf,size_tcount,loff_t*ppos){ unsignedlongp=*ppos;

struct

inode*inode=file->f_dentry->d_inode;

int

fbidx=GET_FB_IDX(inode->i_rdev);

struct

fb_info*info=registered_fb[fbidx];

struct

fb_ops*fb=info->fbops;

struct

fb_fix_screeninfofix;

……….}幀緩沖設(shè)備驅(qū)動四個重要的結(jié)構(gòu)體:1.fb_fix_screeninfo/include/linux/fb.h中定義,用于定義圖形卡的信息,用戶不能更改幀緩沖設(shè)備驅(qū)動2.fb_var_screeninfo在/include/linux/fb.h中定義,提供由用戶設(shè)置的圖形卡信息幀緩沖設(shè)備驅(qū)動3.xxfb_info

定義具體設(shè)備的底層接口,記錄設(shè)備狀態(tài),每個幀緩沖設(shè)備都與一個xxfb_infor結(jié)構(gòu)相對應(yīng)。其中的display_switch結(jié)構(gòu)在/include/video/fbcon.h中定義。幀緩沖設(shè)備驅(qū)動4.fb_info

1)Linux為幀緩沖設(shè)備定義的驅(qū)動層接口2)Fb_info中紀(jì)錄了幀緩沖設(shè)備的全部信息,包括設(shè)備的設(shè)置參數(shù),狀態(tài)以及操作函數(shù)指針。每一個幀緩沖設(shè)備都必須對應(yīng)一個fb_info結(jié)構(gòu)。3)Fb_info包括下列成員modename——設(shè)備名稱fontname——顯示字體,fbops——指向底層操作的函數(shù)的指針fb_var_screeninfo——記錄用戶可修改的顯示控制器參數(shù),xres定義屏幕一行有多少個點(diǎn),yres定義屏幕一列有多少個點(diǎn),bits_per_pixel定義每個點(diǎn)用多少個字節(jié)表示fb_fix_screeninfo——記錄用戶不能修改的顯示控制器的參數(shù),如屏幕緩沖區(qū)的物理地址,長度。當(dāng)對幀緩沖設(shè)備進(jìn)行映射操作的時候,就是從fb_fix_screeninfo中取得緩沖區(qū)物理地址的4)上面所說的數(shù)據(jù)成員都是需要在驅(qū)動程序中初始化和設(shè)置的。幀緩沖設(shè)備驅(qū)動fb_info

定義幀緩沖設(shè)備驅(qū)動fb_ops

定義注意與fbmem.c中的fb_fops結(jié)構(gòu)體有區(qū)別幀緩沖設(shè)備驅(qū)動模板:Skeleton.c核心是_initxxfb_init(void)Xxfb_init中調(diào)用的函數(shù)和結(jié)構(gòu)體Xxfb_init中調(diào)用的函數(shù)和結(jié)構(gòu)體(續(xù))如何寫fb設(shè)備驅(qū)動遵循設(shè)備驅(qū)動程序的結(jié)構(gòu),設(shè)備注冊、定義file_operations接口、初始化LCDC寄存器初始化一個fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer(&fb_info),將fb_info登記入內(nèi)核。

實現(xiàn)定義的各個接口函數(shù)設(shè)備驅(qū)動源代碼mx1fb.h——定義LCDC寄存器mx1fb.c——初始化LCDC,fb_ops,填充fb_infoFbmem.c——實現(xiàn)file_operations接口,設(shè)備注冊注銷Fb.h——定義fb_var_screeninfo,fb_fix_screeninfo,fb_ops,fb_info設(shè)備驅(qū)動源代碼設(shè)備驅(qū)動源代碼

dbmx1fb_set_var流程幀緩沖設(shè)備的注冊與注銷在linux/driver/video/fbmem.c中定義

注冊devfs_register_chrdev(FB_MAJOR,"fb",&fb_fops)fb_info->devfs_handle=

devfs_register(devfs_handle,name_buf,DEVFS_FL_DEFAULT, FB_MAJOR,i,S_IFCHR|S_IRUGO|S_IWUGO, &fb_fops,NULL);注銷:devfs_unregister(fb_info->devfs_handle);Fb設(shè)備驅(qū)動Ioctl的主要操作通過以下CMD來傳遞控制命令FBIOGET_VSCREENINFOFBIOPUT_VSCREENINFOFBIOGET_FSCREENINFO如何寫fb應(yīng)用程序在應(yīng)用程序中,操作/dev/fb的一般步驟如下

1.

打開/dev/fb設(shè)備文件。

2.

用ioctrl操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分辨率,每個像素點(diǎn)的比特數(shù)。根據(jù)屏幕參數(shù)可計算屏幕緩沖區(qū)的大小。

3.

將屏幕緩沖區(qū)映射到用戶空間。

4.

映射后就可以直接讀寫屏幕緩沖區(qū),進(jìn)行繪圖和圖片顯示典型應(yīng)用結(jié)構(gòu)代碼(一)intmain()

{

int

fbfd=0;

struct

fb_var_screeninfo

vinfo;

struct

fb_fix_screeninfo

finfo;

longint

screensize=0;

/*打開設(shè)備文件*/

fbfd=open("/dev/fb0",O_RDWR);

典型應(yīng)用結(jié)構(gòu)代碼(二)/*取得屏幕相關(guān)參數(shù)*/

ioctl(fbfd,FBIOGET_FSCREENINFO,&finfo);

ioctl(fbfd,FBIOGET_VSCREENINFO,&vinfo);/*計算屏幕緩沖區(qū)大小*/

screensize=vinfo.xres*vinfo.yres*v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論