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

下載本文檔

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

文檔簡介

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

2、透反射型LCD:是處于以上兩者之間,底偏光片能部分反光,一般也帶背光源,光線好的時候,可關(guā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ū)動方式的驅(qū)動方式6嵌入式處理器與嵌入式處理器與LCD的連接的連接嵌入嵌入式處式處理器理器LCD模塊模塊數(shù)據(jù)數(shù)據(jù)總線總線寄存器選擇寄存器選擇使能信號使能信號有有LCD控制控制器的嵌入式器的嵌入式處理器處理器LCDLCD控制信控制信號線號線7片外的片外的LCD控制器控制器 8集成了LCD控制器的嵌入式處理器體系結(jié)構(gòu) 9典型的典型的LCD模

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

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

6、制等等具體細節(jié)。這些都是由Framebuffer 設(shè)備驅(qū)動來完成的。l 嵌入式系統(tǒng)下大多采用Framebuffer設(shè)備來實現(xiàn)顯示設(shè)備LCD驅(qū)動。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è)備對應的設(shè)備文件為/dev/fb*,如果系統(tǒng)有多個顯示卡,Linux 下還可支持多個幀緩沖設(shè)備,最多可達 32 個,分別為/dev/fb0 到/d

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

8、結(jié)構(gòu):fb_infofb_var_screeninfo fb_fix_screeninfofb_cmap fb_ops在fb.h中定義23Framebuffer驅(qū)動結(jié)構(gòu)驅(qū)動結(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ū)動接口。定義了當前顯卡framebuffer設(shè)備狀態(tài),一個顯卡可能有兩個framebuffer,在這種情況下,就需要兩個fb_info結(jié)構(gòu)。這個結(jié)構(gòu)是唯一在內(nèi)核空間可見的。在這個結(jié)構(gòu)中有一個fb_ops指針,指向驅(qū)動設(shè)備工作所需的函數(shù)集。 24Framebuffer驅(qū)動結(jié)構(gòu)驅(qū)動結(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)相應信息。25Framebuffer驅(qū)動結(jié)構(gòu)驅(qū)動結(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)相應信息,使用FBIOPUT_VSCREENINFO 命令來設(shè)置該結(jié)構(gòu)相應信息。26Framebuffer驅(qū)動結(jié)構(gòu)驅(qū)動結(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 對應的ioctl操作設(shè)定或獲取顏色映射信息. 27Framebuffer驅(qū)動APIl Linux系統(tǒng)中對幀緩沖設(shè)備的操作是通過,fb_ops結(jié)構(gòu)來完成和定義的。用戶可以通過ioctl接口來完成對fb_ops結(jié)構(gòu)中定義的功能函數(shù)的調(diào)用。幀緩沖驅(qū)動程序的主要工作就是編寫fb_ops結(jié)構(gòu)中的接口函數(shù)。28Framebuffe

13、r驅(qū)動驅(qū)動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ū)動驅(qū)動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ū)動核心幀緩沖內(nèi)核驅(qū)動核心l fbmem.c 實現(xiàn)了如下函數(shù). register_framebuffer(struct fb_info *fb_info);unregister_framebuffer(struct fb_info *fb_info); l 這兩個是提供給下層FrameBuffer設(shè)備驅(qū)動的接口,設(shè)備驅(qū)動通過這兩函數(shù)向系統(tǒng)注冊或注銷自己。幾乎底層設(shè)備驅(qū)動所要做的所有事情就是填充fb_info結(jié)構(gòu)然后向系統(tǒng)注冊

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

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

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

19、緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上繪圖了。 37Framebuffer幀緩沖設(shè)備的操作幀緩沖設(shè)備的操作IO操作 :對于幀緩沖設(shè)備,對設(shè)備文件的 ioctl操作可讀取/設(shè)置顯示設(shè)備及屏幕的參數(shù),如分辨率,顯示顏色數(shù),屏幕大小等等。ioctl 的操作是由底層的驅(qū)動程序來完成的。例如: 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在應用程序中,操作/dev/fb的一般步驟如下: 1打開/dev/fb設(shè)備文件。 2用 ioctrl 操作取得當前顯示屏幕的參數(shù),如屏幕分 辨率,每個像素點的比特數(shù)。根據(jù)屏幕參數(shù)可計算屏幕緩沖區(qū)的大小。 3將屏幕緩沖區(qū)映射到用戶空間(mmap)。 4映射后就可以直接讀寫屏幕緩沖區(qū),進行繪圖和圖片顯示了。 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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論