




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式Linux顯示驅(qū)動(dòng)和圖形應(yīng)用程序初步電子信息工程學(xué)院楊昕欣本講主要內(nèi)容nLCD顯示原理nMX1的LCD接口初始化配置n顯示驅(qū)動(dòng)原理及源代碼分析n基于幀緩沖設(shè)備的圖形應(yīng)用程序開(kāi)發(fā)LCD硬件原理圖LCD顯示原理nLCD是基于液晶光電效應(yīng)的顯示器件。液晶顯示器的工作原理是利用液晶的物理特性,在通電時(shí),液晶排列變得有秩序,使光線容易通過(guò);不通電時(shí),排列則變得混亂,阻止光線通過(guò)。即液晶工作時(shí),使用的是外部的光線,自己本身并不發(fā)光,所以與CRT相比,液晶顯示器的耗電量較低。 LCD分類nLCD可由為液晶照明的方式分為:傳送式和反射式q傳送式屏幕要使用外加光源照明,稱為背光(backlight),照明
2、光源要安裝在LCD的背后。傳送式LCD在正常光線及暗光線下,顯示效果都很好,但在戶外,尤其在日光下,很難辯清顯示內(nèi)容。 q反射式屏幕,則不需要外加照明電源,使用周?chē)h(huán)境的光線(或在某些筆記本中,使用前部照明系統(tǒng)的光線)。這樣,反射式屏幕就沒(méi)有背光,所以,此種屏幕在戶外或光線充足的室內(nèi),才會(huì)有出色的顯示效果,但在一般室內(nèi)光線下,這種顯示屏的顯示效果就不及背光傳送式的。 LCD分類nLCD可分為:主動(dòng)式和被動(dòng)式被動(dòng)矩陣顯示畫(huà)面的原理:q輸入的信號(hào)依次去驅(qū)動(dòng)每一排的電極,q當(dāng)某一排被選定的時(shí)候,列向上的電極將被觸發(fā)打開(kāi)位于排和列交叉上的那些像素。q優(yōu)點(diǎn):比較簡(jiǎn)單,而且對(duì)液晶屏的成本增加也不多。q缺點(diǎn)
3、:如果有太大的電流通過(guò)某個(gè)單元,附近的單元都會(huì)受到影響,引起虛影。如果電流太小,單元的開(kāi)和關(guān)就會(huì)變得遲緩,降低對(duì)比度和丟失移動(dòng)畫(huà)面的細(xì)節(jié)。 LCD分類主動(dòng)矩陣LCD的原理:q主動(dòng)在每個(gè)單元中都加入了很小的晶體管:q由晶體管來(lái)控制電流的開(kāi)和斷。晶體管電極是利用薄膜技術(shù)而做成的。薄膜晶體管LCD(TFTLCD)也因此得名。 q優(yōu)點(diǎn):晶體管可以迅速地控制每個(gè)單元,q由于單元之間的電干擾很小,所以可使用大電流,而不會(huì)有虛影和拖尾現(xiàn)象q更大的電流會(huì)提供更好的對(duì)比度、更銳利的和更明亮的圖像。MX1對(duì)LCD的支持nMX1 LCDC(液晶顯示控制器,Liquid Crystal Display Control
4、ler)提供了對(duì)單色,灰度,被動(dòng)式彩色點(diǎn)陣液晶和主動(dòng)式彩色點(diǎn)陣液晶屏的支持.主要特性如下:q支持自刷新方式LCDq最多16級(jí)灰度顯示q被動(dòng)式與主動(dòng)式彩色液晶屏接口q可編程刷新率q支持16/12/8/4/2/1位的數(shù)據(jù)總線寬度q支持4/8bpp的被動(dòng)式彩屏(CSTN)q支持4/8/12/16bpp的主動(dòng)式彩屏(TFT) 灰度顯示原理nLCD顯示屏并不是設(shè)置成不同的亮度去驅(qū)動(dòng)每一像素的。它對(duì)象素要么顯示,要么關(guān)閉。LCD顯示屏的一個(gè)常用指標(biāo)是它的反應(yīng)時(shí)間,反應(yīng)時(shí)間指的是一個(gè)像素從顯示到關(guān)閉所花費(fèi)的時(shí)間,典型的是幾十ms。 nLCD控制器內(nèi)部有1個(gè)16周期計(jì)數(shù)器,用于產(chǎn)生16周期的間隔。 16周期間
5、隔里像素顯示的次數(shù) 決定了該像素的灰度彩色顯示原理nR、G、B三種灰度的疊加顯示刷新率n刷新率是一個(gè)重要的顯示特性,指的是整個(gè)數(shù)據(jù)幀被重新寫(xiě)到顯示屏的頻率。如果數(shù)據(jù)寫(xiě)得太慢,將影響顯示質(zhì)量;太快則顯示器的反應(yīng)時(shí)間跟不上像素驅(qū)動(dòng)狀態(tài)的改變。大部分顯示屏推薦的速率是7080Hz。 MX1顯示屏幕大小MX1顯示屏幕大小n實(shí)際屏幕寬度(XMAX)n實(shí)際屏幕高度(YMAX)n虛擬顯示頁(yè)寬(VPW)規(guī)定最大頁(yè)寬,用來(lái)計(jì)算每一行的起始地址。每一頁(yè)的首行起始地址由SSA決定,第二行的起始地址為SSA+VPW,以此類推,第n行的起始地址為SSA+n*VPW。n虛擬顯示頁(yè)高(VPH) 只受顯式內(nèi)存大小限制,對(duì)LC
6、DC沒(méi)有影響nLCDC會(huì)掃描SSA寄存器指向的顯示內(nèi)存起始地址顯示數(shù)據(jù)映射顯示數(shù)據(jù)映射Big Endian vs. Little EndiannBig Endian: 數(shù)據(jù)高位字節(jié)存在內(nèi)存的低位地址上,低位字節(jié)保存在內(nèi)存的高位地址上。nLittle Endian:數(shù)據(jù)高位字節(jié)存在內(nèi)存的高位地址上,低位字節(jié)保存在內(nèi)存的低位地址上。n舉例:00000000 00000000 00000100 00000001 顯示數(shù)據(jù)映射顯示數(shù)據(jù)映射MX1的LCDC寄存器簡(jiǎn)介灰度顯示原理n最多16種灰度級(jí)別,用2bit或4bit表示n2bit最多表示4種灰度,4bit表示16種灰度n某像素的灰度是用每16幀中,該
7、像素顯示的幀數(shù)來(lái)表示的,這種機(jī)制稱為幀速率控制。n通常灰度等級(jí)不是線形劃分的,比如對(duì)于4級(jí)灰度,某種液晶需要按0,1/4,1/2,1的等級(jí)劃分,這比按0,1/3,2/3,1的線形劃分要有更好的效果灰度顯示原理幀速率控制(非線性)彩色顯示原理n被動(dòng)彩色矩陣顯示原理:q對(duì)于4bit和8bit模式,利用LCDC的顏色映射矩陣將4bit或8bit數(shù)據(jù)映射為12bit數(shù)據(jù)q上述12bit數(shù)據(jù)分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,分別通過(guò)控制三個(gè)獨(dú)立的FRC實(shí)現(xiàn)q對(duì)于12bit模式,自身就分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,因此不需要通過(guò)顏色映射矩陣,可以
8、直接控制相應(yīng)的FRCq對(duì)于MC9328,不支持超過(guò)12bit的被動(dòng)彩色顯示矩陣被動(dòng)式彩色顯示矩陣(顏色映射RAM)彩色顯示原理n主動(dòng)彩色矩陣顯示原理:q對(duì)于4bit和8bit模式,利用LCDC的顏色映射矩陣將4bit或8bit數(shù)據(jù)映射為12bit數(shù)據(jù)q上述12bit數(shù)據(jù)分為3部分,每部分4bit,分別表示不同深度的紅、綠、藍(lán)三色,q對(duì)于主動(dòng)模式,上述三個(gè)通道輸出的紅、綠、藍(lán)控制量直接送給液晶,不需要經(jīng)過(guò)MX1的LCDC的FRC(由LCD本身實(shí)現(xiàn)類似FRC的功能);被動(dòng)式則需要用到MX1的FRC.q對(duì)于MC9328,不支持超過(guò)16bit的主動(dòng)彩色顯示矩陣q對(duì)于12bit/16bit的像素信息,直
9、接送給液晶,不需要通過(guò)LCDC的顏色映射矩陣主動(dòng)式彩色顯示矩陣(顏色映射RAM)LCDC接口及時(shí)序n接口:1.像素?cái)?shù)據(jù)2.垂直同步信號(hào)3.水平同步信號(hào)4.移位時(shí)鐘信號(hào)5.刷新信號(hào)6.對(duì)比度信號(hào)7.夏普屏專用信號(hào)SPL_SPR、CLS、SP、REV被動(dòng)式矩陣液晶接口動(dòng)作流程1.LSCLK 將像素信號(hào)輸入液晶驅(qū)動(dòng)電路的內(nèi)部寄存器2.LP 標(biāo)志當(dāng)前一行像素的數(shù)據(jù)已經(jīng)傳送完成,并且將已傳來(lái)的數(shù)據(jù)鎖存到一個(gè)寬寄存器中3.FLM 標(biāo)志著當(dāng)前所顯示頁(yè)的第一行4.LD表示具體的像素信號(hào),在兩個(gè)LP脈沖之間的LD表示一行的像素5.ACD 每隔預(yù)定的若干幀之后就會(huì)翻轉(zhuǎn)一次,對(duì)液晶進(jìn)行一次刷新被動(dòng)式矩陣液晶接口動(dòng)作
10、時(shí)序單色、4bit數(shù)據(jù)寬度液晶的動(dòng)作時(shí)序(m為像素?cái)?shù)) 被動(dòng)式彩色、彩色、8bit數(shù)據(jù)寬度液晶的動(dòng)作時(shí)序數(shù)據(jù)寬度液晶的動(dòng)作時(shí)序(m為像素?cái)?shù)為像素?cái)?shù)) 主動(dòng)式矩陣液晶接口動(dòng)作流程1.在LSCLK 的下降沿,將像素信號(hào)輸入給液晶驅(qū)動(dòng)電路的內(nèi)部寄存器。也可以是上升沿,通過(guò)更改寄存器中相應(yīng)標(biāo)志位實(shí)現(xiàn)。2.HSYNC脈沖產(chǎn)生新的一行3.VSYNC脈沖產(chǎn)生新的一幀,每一個(gè)VSYNC脈沖內(nèi),至少產(chǎn)生一個(gè)HSYNC脈沖4.LD表示具體的像素信號(hào),在兩個(gè)LP脈沖之間的LD表示一行的像素5.OE為使能信號(hào),OE為低電平時(shí),數(shù)據(jù)無(wú)效,不顯示TFT 顏色通道分配在4bit、8bit和12bit模式:LD15:12定義
11、紅色,LD10:7定義綠色,LD4:1定義藍(lán)色在16bit模式:LD15:11定義紅色,LD10:5定義綠色,LD4:0定義藍(lán)色LCDC 原理框圖顯示的實(shí)現(xiàn)幀緩沖n幀緩沖(framebuffer)顯示緩沖區(qū)q是Linux為顯示設(shè)備提供的一個(gè)接口,是把顯存抽象后的一種設(shè)備,他允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫(xiě)操作。 q用戶不需要對(duì)底層驅(qū)動(dòng)有深入了解,也不必關(guān)心物理顯存的位置、換頁(yè)機(jī)制等細(xì)節(jié)qXwindow繪制窗口,顯示漢字都是通過(guò)fb幀緩沖設(shè)備nLinux可支持最多32個(gè)/dev/fb0/dev/fb31缺省是/dev/fb0n可以直接拷貝位圖到fb來(lái)顯示到屏幕qcp /bit
12、map/penguin.bin /dev/fb0幀緩沖設(shè)備驅(qū)動(dòng)原理n幀緩沖設(shè)備屬于字符設(shè)備,其目的就是通過(guò)配置MX1寄存器,在一段指定的內(nèi)存與LCD之間建立一個(gè)自動(dòng)傳輸?shù)耐ǖ?。這樣,任何程序只要修改這段內(nèi)存中的數(shù)據(jù),就可以改變LCD上的顯示內(nèi)容。 nMX1寄存器的初始化,特別是SSA幀緩沖設(shè)備驅(qū)動(dòng)n三個(gè)關(guān)鍵文件:一個(gè)模板文件:1.S相關(guān)頭文件:1. fb.h幀緩沖設(shè)備驅(qū)動(dòng)nFbmem.c功能一:注冊(cè)所有顯示驅(qū)動(dòng)的信息幀緩沖設(shè)備驅(qū)動(dòng)功能二:提供上層驅(qū)動(dòng)接口即給用戶程序提供通用接口,從而使用戶不必關(guān)心具體的顯示硬件。幀緩沖設(shè)備的接口nstatic struct file_operations fb
13、_fops = owner: THIS_MODULE, read: fb_read, /* 讀操作 */ write: fb_write, /* 寫(xiě)操作 */ ioctl: fb_ioctl, /* 控制操作 */ mmap: fb_mmap, /* 映射操作 */ open: fb_open, /* 打開(kāi)操作 */ release: fb_release, /*關(guān)閉操作*/ ; 其中的成員函數(shù)都在文件linux/driver/video/fbmem.c中定義 fb_readfb_read(struct file *file, char *buf, size_t count, loff_t *
14、ppos)unsigned long p = *ppos;struct inode *inode = file-f_dentry-d_inode;int fbidx = GET_FB_IDX(inode-i_rdev);struct fb_info *info = registered_fbfbidx;struct fb_ops *fb = info-fbops;struct fb_fix_screeninfo fix; .幀緩沖設(shè)備驅(qū)動(dòng)n四個(gè)重要的結(jié)構(gòu)體:1.fb_fix_screeninfo/include/linux/fb.h中定義,用于定義圖形卡的信息,用戶不能更改幀緩沖設(shè)備驅(qū)動(dòng)2.f
15、b_var_screeninfo在/include/linux/fb.h中定義,提供由用戶設(shè)置的圖形卡信息幀緩沖設(shè)備驅(qū)動(dòng)3.xxfb_info定義具體設(shè)備的底層接口,記錄設(shè)備狀態(tài),每個(gè)幀緩沖設(shè)備都與一個(gè)xxfb_infor結(jié)構(gòu)相對(duì)應(yīng)。其中的display_switch結(jié)構(gòu)在/include/video/fbcon.h中定義。幀緩沖設(shè)備驅(qū)動(dòng)4.fb_info4.fb_info 1) Linux為幀緩沖設(shè)備定義的驅(qū)動(dòng)層接口2) Fb_info中紀(jì)錄了幀緩沖設(shè)備的全部信息,包括設(shè)備的設(shè)置參數(shù),狀態(tài)以及操作函數(shù)指針。每一個(gè)幀緩沖設(shè)備都必須對(duì)應(yīng)一個(gè)fb_info結(jié)構(gòu)。3)Fb_info包括下列成員mod
16、ename設(shè)備名稱fontname顯示字體,fbops指向底層操作的函數(shù)的指針fb_var_screeninfo記錄用戶可修改的顯示控制器參數(shù), xres定義屏幕一行有多少個(gè)點(diǎn), yres定義屏幕一列有多少個(gè)點(diǎn), bits_per_pixel定義每個(gè)點(diǎn)用多少個(gè)字節(jié)表示fb_fix_screeninfo記錄用戶不能修改的顯示控制器的參數(shù),如屏幕緩沖區(qū)的物理地址,長(zhǎng)度。當(dāng)對(duì)幀緩沖設(shè)備進(jìn)行映射操作的時(shí)候,就是從fb_fix_screeninfo中取得緩沖區(qū)物理地址的4)上面所說(shuō)的數(shù)據(jù)成員都是需要在驅(qū)動(dòng)程序中初始化和設(shè)置的。幀緩沖設(shè)備驅(qū)動(dòng) fb_info 定義幀緩沖設(shè)備驅(qū)動(dòng) fb_ops 定義注意與f
17、bmem.c中的fb_fops結(jié)構(gòu)體有區(qū)別幀緩沖設(shè)備驅(qū)動(dòng)n模板:Skeleton.cq核心是_init xxfb_init(void)qXxfb_init中調(diào)用的函數(shù)和結(jié)構(gòu)體Xxfb_init中調(diào)用的函數(shù)和結(jié)構(gòu)體(續(xù))如何寫(xiě)fb設(shè)備驅(qū)動(dòng)n遵循設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu),設(shè)備注冊(cè)、定義file_operations接口、初始化LCDC寄存器n初始化一個(gè)fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer(&fb_info),將fb_info登記入內(nèi)核。 n實(shí)現(xiàn)定義的各個(gè)接口函數(shù)設(shè)備驅(qū)動(dòng)源代碼nmx1fb.h定義LCDC寄存器nmx1fb.c初始化LCDC,fb_
18、ops,填充fb_infonFbmem.c實(shí)現(xiàn)file_operations接口,設(shè)備注冊(cè)注銷nFb.h定義fb_var_screeninfo,fb_fix_screeninfo,fb_ops,fb_info設(shè)備驅(qū)動(dòng)源代碼設(shè)備驅(qū)動(dòng)源代碼dbmx1fb_set_var流程幀緩沖設(shè)備的注冊(cè)與注銷n在linux/driver/video/fbmem.c中定義 n注冊(cè)qdevfs_register_chrdev(FB_MAJOR,fb,&fb_fops)qfb_info-devfs_handle = devfs_register (devfs_handle, name_buf, DEVFS_F
19、L_DEFAULT, FB_MAJOR, i, S_IFCHR | S_IRUGO | S_IWUGO, &fb_fops, NULL);n注銷:qdevfs_unregister (fb_info-devfs_handle);Fb設(shè)備驅(qū)動(dòng)Ioctl的主要操作n通過(guò)以下CMD來(lái)傳遞控制命令qFBIOGET_VSCREENINFOqFBIOPUT_VSCREENINFOqFBIOGET_FSCREENINFO如何寫(xiě)fb應(yīng)用程序n在應(yīng)用程序中,操作/dev/fb的一般步驟如下 1 打開(kāi)/dev/fb設(shè)備文件。 2 用ioctrl操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分辨率,每個(gè)像素點(diǎn)的比特?cái)?shù)。
20、根據(jù)屏幕參數(shù)可計(jì)算屏幕緩沖區(qū)的大小。 3 將屏幕緩沖區(qū)映射到用戶空間。 4 映射后就可以直接讀寫(xiě)屏幕緩沖區(qū),進(jìn)行繪圖和圖片顯示典型應(yīng)用結(jié)構(gòu)代碼(一)nint main() int fbfd = 0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; /*打開(kāi)設(shè)備文件*/ fbfd = open(/dev/fb0, O_RDWR); 典型應(yīng)用結(jié)構(gòu)代碼(二)n/*取得屏幕相關(guān)參數(shù)*/ ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo); ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo); n/*計(jì)算屏幕緩沖區(qū)大小*/ screensize = vinfo.xres * vinfo.yres * vinfo.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CBMCA 058-2024道路用鋼渣磚
- T/CECS 10396-2024鋁?;炷劣媒缑嫣幚韯?/a>
- 盤(pán)扣架租賃合同4篇
- 專業(yè)標(biāo)準(zhǔn)化題庫(kù)及答案
- 上海市考編小學(xué)數(shù)學(xué)試題
- 上海安全b證考試題庫(kù)及答案
- 版權(quán)登記合同轉(zhuǎn)讓協(xié)議5篇
- 解除三方協(xié)議范文5篇
- 理論聯(lián)系實(shí)際談一談如何維護(hù)政治安全?參考答案1
- 民間借貸合同范本(借款人為個(gè)人)4篇
- 2025年中國(guó)冷庫(kù)用叉車(chē)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年高考第二次模擬考試物理(浙江卷)(參考答案)-20250416-113627
- 2025年化妝師職業(yè)技能考試試題及答案
- GA 1812.1-2024銀行系統(tǒng)反恐怖防范要求第1部分:人民幣發(fā)行庫(kù)
- 2025中信建投證券股份限公司校園招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《陸上風(fēng)電場(chǎng)工程概算定額》NBT 31010-2019
- 干部人事檔案轉(zhuǎn)遞單表樣
- 關(guān)于中國(guó)文化遺產(chǎn)北京故宮的資料
- 新中考考試平臺(tái)-考生端V2.0使用手冊(cè)
- 集裝袋噸袋項(xiàng)目建議書(shū)范文
- 高空作業(yè)專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論