显示设备接口与帧缓冲_第1页
显示设备接口与帧缓冲_第2页
显示设备接口与帧缓冲_第3页
显示设备接口与帧缓冲_第4页
显示设备接口与帧缓冲_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12LCD接口设计接口设计LCDLCD显示模块显示模块 液晶显示是一种被动的显示,它不能发光,只能使用周围环境的光。它显示图案或字符只需很小能量。液晶显示所用的液晶材料是一种兼有液态和固体双重性质的有机物,它的棒状结构在液晶盒内一般平行排列,但在电场作用下能改变其排列方向。LCDLCD的背光:的背光:lEL(场致发光):2000-3000小时lLED光源:50000小时l新CCFL:60000小时3LCD的显示方式的显示方式l 反射型LCD:底偏光片后面加了一块反射板,它一般在户外和光线良好的办公室使用。l 透射型LCD:底偏光片是透射偏光片,它需要连续使用背光源,一般在光线差的环境使用。l

2、透反射型LCD:是处于以上两者之间,底偏光片能部分反光,一般也带背光源,光线好的时候,可关掉背光源;光线差时,可点亮背光源使用LCD。4常见的液晶显示器物理结构常见的液晶显示器物理结构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控制器,显示缓存和系统内存公用。可以支持STN(彩色/灰度)和TFT两种模式的LCD。TFT模式下最多支持24位色,800 x600分辨率。LCD的驱动方式的驱动方式6嵌入式处理器与嵌入式处理器与LCD的连接的连接嵌入嵌入式处式处理器理器LCD模块模块数据数据总线总线寄存器选择寄存器选择使能信号使能信号有有LCD控制控制器的嵌入式器的嵌入式处理器处理器LCDLCD控制信控制信号线号线7片外的片外的LCD控制器控制器 8集成了LCD控制器的嵌入式处理器体系结构 9典型的典型的LCD模

4、式信号线模式信号线l LDD,数据线l L_PCLK,点时钟l L_LCLK,行频l L_FCLK,帧频l L_BIAS,CSTN的AC信号,TFT的开启信号10S3C2410的的LCD扫描模式扫描模式l 4/8位,单/双扫描模式,CSTNl 最多256级灰度l 显示缓冲区支持15、16、24位TFT模式l 支持RGB格式114位单扫描位单扫描STN模式模式124位单扫描显示缓冲的对应关系位单扫描显示缓冲的对应关系l 1个字节存储两个点的信息l 16级灰度138位位CSTN屏幕点阵:屏幕点阵:320 x240148位单扫描位单扫描CSTN模式模式158位单扫描显示缓冲的对应关系位单扫描显示缓冲

5、的对应关系l 1个字节存储1个点的信息l 可以是用调色板RGB76543210R2:0G2:0B1:0标准映射:BGR76543210B1:0G2:0R2:01616位单扫描位单扫描TFT模式模式列0列1行0LDD15:0LDD15:0行1LDD15:0LDD15:01716/15位显示缓冲的对应关系位显示缓冲的对应关系18Linux系统下系统下Framebuffer设备设备l 帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机

6、制等等具体细节。这些都是由Framebuffer 设备驱动来完成的。l 嵌入式系统下大多采用Framebuffer设备来实现显示设备LCD驱动。19Linux系统下系统下Framebuffer设备设备Framebuffer在系统中的位置Linux KernelFramebufferVFS虚拟文件系统系统调用虚拟文件系统系统调用VGA LCDGUI LIBUser Application 20Linux系统下系统下Framebuffer设备设备帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux 下还可支持多个帧缓冲设备,最多可达 32 个,分别为/dev/fb0 到/d

7、ev/fb31,而/dev/fb 则为当前缺省的帧缓冲设备,通常指向/dev/fb0。当然在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0到/dev/fb31。21Framebuffer驱动结构驱动结构l FrameBuffer设备驱动基于如下两个文件:linux/include/linux/fb.hlinux/drivers/video/fbmem.cl 与平台相关的设备驱动文件:linux/drivers/video/s3c-fb.c22Framebuffer驱动结构驱动结构FrameBuffer帧缓冲的重要数据

8、结构:fb_infofb_var_screeninfo fb_fix_screeninfofb_cmap fb_ops在fb.h中定义23Framebuffer驱动结构驱动结构 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 */;该结构是LINUX系统定义的framebuf

9、fer设备驱动接口。定义了当前显卡framebuffer设备状态,一个显卡可能有两个framebuffer,在这种情况下,就需要两个fb_info结构。这个结构是唯一在内核空间可见的。在这个结构中有一个fb_ops指针,指向驱动设备工作所需的函数集。 24Framebuffer驱动结构驱动结构 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_* */;该结构用来描述设备无关,不可变更的信息。可以使用FBIOGET_FSCREENINFO 命令来获取该结构相应信息。25Framebuffer驱动结构驱动结构 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; ;该结构用来描述设备无关,用户可变更的信息。可以使用FBIOGET_VSCREENINFO 命令来获取该结构相应信息,使用FBIOPUT_VSCREENINFO 命令来设置该结构相应信息。26Framebuffer驱动结构驱动结构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 */;该结构描述设备无关的颜色映射信息。可以通过FBIOGETCMAP和FBIOPUTCMAP 对应的ioctl操作设定或获取颜色映射信息. 27Framebuffer驱动APIl Linux系统中对帧缓冲设备的操作是通过,fb_ops结构来完成和定义的。用户可以通过ioctl接口来完成对fb_ops结构中定义的功能函数的调用。帧缓冲驱动程序的主要工作就是编写fb_ops结构中的接口函数。28Framebuffe

13、r驱动驱动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驱动驱动APIl fb_ops结构中常见的接口函数:l fb_open: 打开帧缓冲设备l fb_release:关闭帧缓冲设备l fb_read: 帧缓冲设备的读操作

15、l fb_write: 帧缓冲设备的写操作l fb_mmap: 帧缓冲设备的内存映射操作l fb_ioctl:帧缓冲设备的ioctl操作30Framebuffer帧缓冲内核驱动核心帧缓冲内核驱动核心l fbmem.c 实现了如下函数. register_framebuffer(struct fb_info *fb_info);unregister_framebuffer(struct fb_info *fb_info); l 这两个是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两函数向系统注册或注销自己。几乎底层设备驱动所要做的所有事情就是填充fb_info结构然后向系统注册

16、或注销它。 31Framebuffer帧缓冲设备驱动程序分析帧缓冲设备驱动程序分析内核源码目录(driver/video/)下的s3c-fb.c文件是S5PV210处理器帧缓冲设备硬件相关的驱动程序。s3c-fb.c驱动程序主要完成以下工作:l初始化LCD控制器、设置显示模式、分配显示缓存。l分配并初始化fb_info结构,填充其成员函数。l调用 register_framebuffer(struct fb_info *fb_info),函数向系统注册帧缓冲设备驱动程序。32Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持Linux内核对framebuffer帧缓冲设备有着

17、良好的支持。make menuconfig配置菜单: - Device Drivers - Graphics support - Support for frame buffer devices (FB =y)33Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持 Support for frame buffer devices - 34Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持 Samsung S3C framebuffer support35Framebuffer帧缓冲设备的操作帧缓冲设备的操作 应用程序对framebuffer帧缓冲设备的操作有

18、以下几种:读/写读/写(read/write)/dev/fb:相当于读/写屏幕缓冲区。例如: 用 cp /dev/fb0 tmp 命令可将当前屏幕的内容拷贝到一个文件中,而命令 cp tmp /dev/fb0 则将图形文件tmp显示在屏幕上。36Framebuffer帧缓冲设备的操作帧缓冲设备的操作映射(map)操作 :由于 Linux 工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。为此,Linux 在文件操作 file_operations 结构中提供了 mmap 函数,可将文件的内容映射到用户空间。对于帧缓冲设备,则可通过映射操作,可将屏幕

19、缓冲区的物理地址映射到用户空间的一段虚拟地址中,之后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。 37Framebuffer帧缓冲设备的操作帧缓冲设备的操作IO操作 :对于帧缓冲设备,对设备文件的 ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率,显示颜色数,屏幕大小等等。ioctl 的操作是由底层的驱动程序来完成的。例如: ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)获取fb_fix_screeninfo结构的信息,在linux/include/linux/fb.h定义。ioctl(fbfd, FBIOGET_VSCREE

20、NINFO, &vinfo)获取fb_var_screeninfon结构的信息。在linux/include/linux/fb.h定义。38Framebuffer帧缓冲设备的操作l在应用程序中,操作/dev/fb的一般步骤如下: 1打开/dev/fb设备文件。 2用 ioctrl 操作取得当前显示屏幕的参数,如屏幕分 辨率,每个像素点的比特数。根据屏幕参数可计算屏幕缓冲区的大小。 3将屏幕缓冲区映射到用户空间(mmap)。 4映射后就可以直接读写屏幕缓冲区,进行绘图和图片显示了。 39Framebuffer帧缓冲设备的操作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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论