顯示設(shè)備接口與幀緩沖_第1頁
顯示設(shè)備接口與幀緩沖_第2頁
顯示設(shè)備接口與幀緩沖_第3頁
顯示設(shè)備接口與幀緩沖_第4頁
顯示設(shè)備接口與幀緩沖_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、12LCD接口設(shè)計(jì)接口設(shè)計(jì)LCDLCD顯示模塊顯示模塊 液晶顯示是一種被動(dòng)的顯示,它不能發(fā)光,只能使用周圍環(huán)境的光。它顯示圖案或字符只需很小能量。液晶顯示所用的液晶材料是一種兼有液態(tài)和固體雙重性質(zhì)的有機(jī)物,它的棒狀結(jié)構(gòu)在液晶盒內(nèi)一般平行排列,但在電場(chǎng)作用下能改變其排列方向。LCDLCD的背光:的背光:lEL(場(chǎng)致發(fā)光):2000-3000小時(shí)lLED光源:50000小時(shí)l新CCFL:60000小時(shí)3LCD的顯示方式的顯示方式l 反射型LCD:底偏光片后面加了一塊反射板,它一般在戶外和光線良好的辦公室使用。l 透射型LCD:底偏光片是透射偏光片,它需要連續(xù)使用背光源,一般在光線差的環(huán)境使用。l

2、透反射型LCD:是處于以上兩者之間,底偏光片能部分反光,一般也帶背光源,光線好的時(shí)候,可關(guān)掉背光源;光線差時(shí),可點(diǎn)亮背光源使用LCD。4常見的液晶顯示器物理結(jié)構(gòu)常見的液晶顯示器物理結(jié)構(gòu)l扭曲向列型(TNTwisted Nematic)l超扭曲向列型(STNSuper TN)l雙層超扭曲向列型(DSTNDual Scan Tortuosity Nomograph)l薄膜晶體管型(TFTThin Film Transistor)其中TNLCD、STNLCD和DSYNLCD的基本顯示原理都相同,只是液晶分子的扭曲角度不同而已。而TFTLCD則采用截然不同的顯示方式。 5LCD通常由兩種方式l 一種是

3、帶有LCD掃描芯片的LCD模塊l 一種是通過LCD控制器,直接掃描LCD屏。比如:S3C2410處理器,帶有LCD控制器,顯示緩存和系統(tǒng)內(nèi)存公用??梢灾С諷TN(彩色/灰度)和TFT兩種模式的LCD。TFT模式下最多支持24位色,800 x600分辨率。LCD的驅(qū)動(dòng)方式的驅(qū)動(dòng)方式6嵌入式處理器與嵌入式處理器與LCD的連接的連接嵌入嵌入式處式處理器理器LCD模塊模塊數(shù)據(jù)數(shù)據(jù)總線總線寄存器選擇寄存器選擇使能信號(hào)使能信號(hào)有有LCD控制控制器的嵌入式器的嵌入式處理器處理器LCDLCD控制信控制信號(hào)線號(hào)線7片外的片外的LCD控制器控制器 8集成了LCD控制器的嵌入式處理器體系結(jié)構(gòu) 9典型的典型的LCD模

4、式信號(hào)線模式信號(hào)線l LDD,數(shù)據(jù)線l L_PCLK,點(diǎn)時(shí)鐘l L_LCLK,行頻l L_FCLK,幀頻l L_BIAS,CSTN的AC信號(hào),TFT的開啟信號(hào)10S3C2410的的LCD掃描模式掃描模式l 4/8位,單/雙掃描模式,CSTNl 最多256級(jí)灰度l 顯示緩沖區(qū)支持15、16、24位TFT模式l 支持RGB格式114位單掃描位單掃描STN模式模式124位單掃描顯示緩沖的對(duì)應(yīng)關(guān)系位單掃描顯示緩沖的對(duì)應(yīng)關(guān)系l 1個(gè)字節(jié)存儲(chǔ)兩個(gè)點(diǎn)的信息l 16級(jí)灰度138位位CSTN屏幕點(diǎn)陣:屏幕點(diǎn)陣:320 x240148位單掃描位單掃描CSTN模式模式158位單掃描顯示緩沖的對(duì)應(yīng)關(guān)系位單掃描顯示緩沖

5、的對(duì)應(yīng)關(guān)系l 1個(gè)字節(jié)存儲(chǔ)1個(gè)點(diǎn)的信息l 可以是用調(diào)色板RGB76543210R2:0G2:0B1:0標(biāo)準(zhǔn)映射:BGR76543210B1:0G2:0R2:01616位單掃描位單掃描TFT模式模式列0列1行0LDD15:0LDD15:0行1LDD15:0LDD15:01716/15位顯示緩沖的對(duì)應(yīng)關(guān)系位顯示緩沖的對(duì)應(yīng)關(guān)系18Linux系統(tǒng)下系統(tǒng)下Framebuffer設(shè)備設(shè)備l 幀緩沖(framebuffer)是 Linux 為顯示設(shè)備提供的一個(gè)接口,把顯存抽象后的一種設(shè)備,他允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫操作。這種操作是抽象的,統(tǒng)一的。用戶不必關(guān)心物理顯存的位置、換頁機(jī)

6、制等等具體細(xì)節(jié)。這些都是由Framebuffer 設(shè)備驅(qū)動(dòng)來完成的。l 嵌入式系統(tǒng)下大多采用Framebuffer設(shè)備來實(shí)現(xiàn)顯示設(shè)備LCD驅(qū)動(dòng)。19Linux系統(tǒng)下系統(tǒng)下Framebuffer設(shè)備設(shè)備Framebuffer在系統(tǒng)中的位置Linux KernelFramebufferVFS虛擬文件系統(tǒng)系統(tǒng)調(diào)用虛擬文件系統(tǒng)系統(tǒng)調(diào)用VGA LCDGUI LIBUser Application 20Linux系統(tǒng)下系統(tǒng)下Framebuffer設(shè)備設(shè)備幀緩沖設(shè)備對(duì)應(yīng)的設(shè)備文件為/dev/fb*,如果系統(tǒng)有多個(gè)顯示卡,Linux 下還可支持多個(gè)幀緩沖設(shè)備,最多可達(dá) 32 個(gè),分別為/dev/fb0 到/d

7、ev/fb31,而/dev/fb 則為當(dāng)前缺省的幀緩沖設(shè)備,通常指向/dev/fb0。當(dāng)然在嵌入式系統(tǒng)中支持一個(gè)顯示設(shè)備就夠了。幀緩沖設(shè)備為標(biāo)準(zhǔn)字符設(shè)備,主設(shè)備號(hào)為29,次設(shè)備號(hào)則從0到31。分別對(duì)應(yīng)/dev/fb0到/dev/fb31。21Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu)l FrameBuffer設(shè)備驅(qū)動(dòng)基于如下兩個(gè)文件:linux/include/linux/fb.hlinux/drivers/video/fbmem.cl 與平臺(tái)相關(guān)的設(shè)備驅(qū)動(dòng)文件:linux/drivers/video/s3c-fb.c22Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu)FrameBuffer幀緩沖的重要數(shù)據(jù)

8、結(jié)構(gòu):fb_infofb_var_screeninfo fb_fix_screeninfofb_cmap fb_ops在fb.h中定義23Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu) struct fb_info int node; int flags; struct fb_var_screeninfo var; /* Current var */ struct fb_fix_screeninfo fix; /* Current fix */ struct fb_monspecs monspecs; /* Current Monitor specs */;該結(jié)構(gòu)是LINUX系統(tǒng)定義的framebuf

9、fer設(shè)備驅(qū)動(dòng)接口。定義了當(dāng)前顯卡framebuffer設(shè)備狀態(tài),一個(gè)顯卡可能有兩個(gè)framebuffer,在這種情況下,就需要兩個(gè)fb_info結(jié)構(gòu)。這個(gè)結(jié)構(gòu)是唯一在內(nèi)核空間可見的。在這個(gè)結(jié)構(gòu)中有一個(gè)fb_ops指針,指向驅(qū)動(dòng)設(shè)備工作所需的函數(shù)集。 24Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu) struct fb_fix_screeninfo char id16; /* identification string eg TT Builtin */ unsigned long smem_start; /* Start of frame buffer mem */ /* (physical add

10、ress) */ _u32 smem_len; /* Length of frame buffer mem */ _u32 type; /* see FB_TYPE_* */ _u32 visual; /* see FB_VISUAL_* */;該結(jié)構(gòu)用來描述設(shè)備無關(guān),不可變更的信息??梢允褂肍BIOGET_FSCREENINFO 命令來獲取該結(jié)構(gòu)相應(yīng)信息。25Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu) struct fb_var_screeninfo _u32 xres; /* visible resolution */ _u32 yres; _u32 xres_virtual; /* virt

11、ual resolution */ _u32 yres_virtual; _u32 xoffset; /* offset from virtual to visible */ _u32 yoffset; ;該結(jié)構(gòu)用來描述設(shè)備無關(guān),用戶可變更的信息??梢允褂肍BIOGET_VSCREENINFO 命令來獲取該結(jié)構(gòu)相應(yīng)信息,使用FBIOPUT_VSCREENINFO 命令來設(shè)置該結(jié)構(gòu)相應(yīng)信息。26Framebuffer驅(qū)動(dòng)結(jié)構(gòu)驅(qū)動(dòng)結(jié)構(gòu)struct fb_cmap _u32 start; /* First entry */ _u32 len; /* Number of entries */ _u16

12、 *red; /* Red values */ _u16 *green; _u16 *blue; _u16 *transp; /* transparency, can be NULL */;該結(jié)構(gòu)描述設(shè)備無關(guān)的顏色映射信息??梢酝ㄟ^FBIOGETCMAP和FBIOPUTCMAP 對(duì)應(yīng)的ioctl操作設(shè)定或獲取顏色映射信息. 27Framebuffer驅(qū)動(dòng)APIl Linux系統(tǒng)中對(duì)幀緩沖設(shè)備的操作是通過,fb_ops結(jié)構(gòu)來完成和定義的。用戶可以通過ioctl接口來完成對(duì)fb_ops結(jié)構(gòu)中定義的功能函數(shù)的調(diào)用。幀緩沖驅(qū)動(dòng)程序的主要工作就是編寫fb_ops結(jié)構(gòu)中的接口函數(shù)。28Framebuffe

13、r驅(qū)動(dòng)驅(qū)動(dòng)APIstruct fb_ops /* open/release and usage marking */ struct module *owner; int (*fb_open)(struct fb_info *info, int user); int (*fb_release)(struct fb_info *info, int user); ssize_t (*fb_read)(struct fb_info *info, char _user *buf, size_t count, loff_t *ppos); ssize_t (*fb_write)(struct fb_inf

14、o *info, const char _user *buf, size_t count, loff_t *ppos); int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,unsigned long arg); ;29Framebuffer驅(qū)動(dòng)驅(qū)動(dòng)APIl fb_ops結(jié)構(gòu)中常見的接口函數(shù):l fb_open: 打開幀緩沖設(shè)備l fb_release:關(guān)閉幀緩沖設(shè)備l fb_read: 幀緩沖設(shè)備的讀操作

15、l fb_write: 幀緩沖設(shè)備的寫操作l fb_mmap: 幀緩沖設(shè)備的內(nèi)存映射操作l fb_ioctl:幀緩沖設(shè)備的ioctl操作30Framebuffer幀緩沖內(nèi)核驅(qū)動(dòng)核心幀緩沖內(nèi)核驅(qū)動(dòng)核心l fbmem.c 實(shí)現(xiàn)了如下函數(shù). register_framebuffer(struct fb_info *fb_info);unregister_framebuffer(struct fb_info *fb_info); l 這兩個(gè)是提供給下層FrameBuffer設(shè)備驅(qū)動(dòng)的接口,設(shè)備驅(qū)動(dòng)通過這兩函數(shù)向系統(tǒng)注冊(cè)或注銷自己。幾乎底層設(shè)備驅(qū)動(dòng)所要做的所有事情就是填充fb_info結(jié)構(gòu)然后向系統(tǒng)注冊(cè)

16、或注銷它。 31Framebuffer幀緩沖設(shè)備驅(qū)動(dòng)程序分析幀緩沖設(shè)備驅(qū)動(dòng)程序分析內(nèi)核源碼目錄(driver/video/)下的s3c-fb.c文件是S5PV210處理器幀緩沖設(shè)備硬件相關(guān)的驅(qū)動(dòng)程序。s3c-fb.c驅(qū)動(dòng)程序主要完成以下工作:l初始化LCD控制器、設(shè)置顯示模式、分配顯示緩存。l分配并初始化fb_info結(jié)構(gòu),填充其成員函數(shù)。l調(diào)用 register_framebuffer(struct fb_info *fb_info),函數(shù)向系統(tǒng)注冊(cè)幀緩沖設(shè)備驅(qū)動(dòng)程序。32Linux內(nèi)核對(duì)內(nèi)核對(duì)framebuffer幀緩沖的支持幀緩沖的支持Linux內(nèi)核對(duì)framebuffer幀緩沖設(shè)備有著

17、良好的支持。make menuconfig配置菜單: - Device Drivers - Graphics support - Support for frame buffer devices (FB =y)33Linux內(nèi)核對(duì)內(nèi)核對(duì)framebuffer幀緩沖的支持幀緩沖的支持 Support for frame buffer devices - 34Linux內(nèi)核對(duì)內(nèi)核對(duì)framebuffer幀緩沖的支持幀緩沖的支持 Samsung S3C framebuffer support35Framebuffer幀緩沖設(shè)備的操作幀緩沖設(shè)備的操作 應(yīng)用程序?qū)ramebuffer幀緩沖設(shè)備的操作有

18、以下幾種:讀/寫讀/寫(read/write)/dev/fb:相當(dāng)于讀/寫屏幕緩沖區(qū)。例如: 用 cp /dev/fb0 tmp 命令可將當(dāng)前屏幕的內(nèi)容拷貝到一個(gè)文件中,而命令 cp tmp /dev/fb0 則將圖形文件tmp顯示在屏幕上。36Framebuffer幀緩沖設(shè)備的操作幀緩沖設(shè)備的操作映射(map)操作 :由于 Linux 工作在保護(hù)模式,每個(gè)應(yīng)用程序都有自己的虛擬地址空間,在應(yīng)用程序中是不能直接訪問物理緩沖區(qū)地址的。為此,Linux 在文件操作 file_operations 結(jié)構(gòu)中提供了 mmap 函數(shù),可將文件的內(nèi)容映射到用戶空間。對(duì)于幀緩沖設(shè)備,則可通過映射操作,可將屏幕

19、緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上繪圖了。 37Framebuffer幀緩沖設(shè)備的操作幀緩沖設(shè)備的操作IO操作 :對(duì)于幀緩沖設(shè)備,對(duì)設(shè)備文件的 ioctl操作可讀取/設(shè)置顯示設(shè)備及屏幕的參數(shù),如分辨率,顯示顏色數(shù),屏幕大小等等。ioctl 的操作是由底層的驅(qū)動(dòng)程序來完成的。例如: ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)獲取fb_fix_screeninfo結(jié)構(gòu)的信息,在linux/include/linux/fb.h定義。ioctl(fbfd, FBIOGET_VSCREE

20、NINFO, &vinfo)獲取fb_var_screeninfon結(jié)構(gòu)的信息。在linux/include/linux/fb.h定義。38Framebuffer幀緩沖設(shè)備的操作l在應(yīng)用程序中,操作/dev/fb的一般步驟如下: 1打開/dev/fb設(shè)備文件。 2用 ioctrl 操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分 辨率,每個(gè)像素點(diǎn)的比特?cái)?shù)。根據(jù)屏幕參數(shù)可計(jì)算屏幕緩沖區(qū)的大小。 3將屏幕緩沖區(qū)映射到用戶空間(mmap)。 4映射后就可以直接讀寫屏幕緩沖區(qū),進(jìn)行繪圖和圖片顯示了。 39Framebuffer幀緩沖設(shè)備的操作Framebuffer操作典型程序 int main() int fb = 0; void *fb_mem; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論