您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 07显示设备接口与帧缓冲
1显示设备接口与帧缓冲2LCD接口设计LCD显示模块液晶显示是一种被动的显示,它不能发光,只能使用周围环境的光。它显示图案或字符只需很小能量。液晶显示所用的液晶材料是一种兼有液态和固体双重性质的有机物,它的棒状结构在液晶盒内一般平行排列,但在电场作用下能改变其排列方向。LCD的背光:EL(场致发光):2000-3000小时LED光源:50000小时新CCFL:60000小时3LCD的显示方式反射型LCD:底偏光片后面加了一块反射板,它一般在户外和光线良好的办公室使用。透射型LCD:底偏光片是透射偏光片,它需要连续使用背光源,一般在光线差的环境使用。透反射型LCD:是处于以上两者之间,底偏光片能部分反光,一般也带背光源,光线好的时候,可关掉背光源;光线差时,可点亮背光源使用LCD。4常见的液晶显示器物理结构扭曲向列型(TN-TwistedNematic)超扭曲向列型(STN-SuperTN)双层超扭曲向列型(DSTN-DualScanTortuosityNomograph)薄膜晶体管型(TFT-ThinFilmTransistor)其中TN-LCD、STN-LCD和DSYN-LCD的基本显示原理都相同,只是液晶分子的扭曲角度不同而已。而TFT-LCD则采用截然不同的显示方式。5LCD通常由两种方式一种是带有LCD扫描芯片的LCD模块一种是通过LCD控制器,直接扫描LCD屏。比如:S3C2410处理器,带有LCD控制器,显示缓存和系统内存公用。可以支持STN(彩色/灰度)和TFT两种模式的LCD。TFT模式下最多支持24位色,800x600分辨率。LCD的驱动方式6嵌入式处理器与LCD的连接嵌入式处理器LCD模块数据总线寄存器选择使能信号有LCD控制器的嵌入式处理器LCDLCD控制信号线7片外的LCD控制器处理器内核SDRAM控制器SOC片内系统总线LCD控制器外部总线控制器SDRAM液晶显示屏或者VGA显示缓存外部总线8集成了LCD控制器的嵌入式处理器体系结构处理器内核SDRAM控制器SOC片内系统总线LCD控制器LCDDMAFIFOSDRAM液晶显示屏9典型的LCD模式信号线LDD17:0,数据线L_PCLK,点时钟L_LCLK,行频L_FCLK,帧频L_BIAS,CSTN的AC信号,TFT的开启信号10S3C2410的LCD扫描模式4/8位,单/双扫描模式,CSTN最多256级灰度显示缓冲区支持15、16、24位TFT模式支持RGB格式114位单扫描STN模式124位单扫描显示缓冲的对应关系1个字节存储两个点的信息16级灰度138位CSTN屏幕点阵:320x240148位单扫描CSTN模式158位单扫描显示缓冲的对应关系1个字节存储1个点的信息可以是用调色板RGB76543210R[2:0]G[2:0]B[1:0]标准映射:BGR76543210B[1:0]G[2:0]R[2:0]1616位单扫描TFT模式列0列1行0LDD[15:0]LDD[15:0]行1LDD[15:0]LDD[15:0]1716/15位显示缓冲的对应关系18Linux系统下Framebuffer设备帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。嵌入式系统下大多采用Framebuffer设备来实现显示设备LCD驱动。19Linux系统下Framebuffer设备Framebuffer在系统中的位置LinuxKernelFramebufferVFS虚拟文件系统系统调用VGALCDGUILIBUserApplication20Linux系统下Framebuffer设备帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0到/dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0。当然在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0到/dev/fb31。21Framebuffer驱动结构FrameBuffer设备驱动基于如下两个文件:linux/include/linux/fb.hlinux/drivers/video/fbmem.c与平台相关的设备驱动文件:linux/drivers/video/s3c-fb.c22Framebuffer驱动结构FrameBuffer帧缓冲的重要数据结构:fb_infofb_var_screeninfofb_fix_screeninfofb_cmapfb_ops在fb.h中定义23Framebuffer驱动结构structfb_info{intnode;intflags;structfb_var_screeninfovar;/*Currentvar*/structfb_fix_screeninfofix;/*Currentfix*/structfb_monspecsmonspecs;/*CurrentMonitorspecs*/…………};该结构是LINUX系统定义的framebuffer设备驱动接口。定义了当前显卡framebuffer设备状态,一个显卡可能有两个framebuffer,在这种情况下,就需要两个fb_info结构。这个结构是唯一在内核空间可见的。在这个结构中有一个fb_ops指针,指向驱动设备工作所需的函数集。24Framebuffer驱动结构structfb_fix_screeninfo{charid[16];/*identificationstringegTTBuiltin*/unsignedlongsmem_start;/*Startofframebuffermem*//*(physicaladdress)*/__u32smem_len;/*Lengthofframebuffermem*/__u32type;/*seeFB_TYPE_**/__u32visual;/*seeFB_VISUAL_**/…………};该结构用来描述设备无关,不可变更的信息。可以使用FBIOGET_FSCREENINFO命令来获取该结构相应信息。25Framebuffer驱动结构structfb_var_screeninfo{__u32xres;/*visibleresolution*/__u32yres;__u32xres_virtual;/*virtualresolution*/__u32yres_virtual;__u32xoffset;/*offsetfromvirtualtovisible*/__u32yoffset;…………};该结构用来描述设备无关,用户可变更的信息。可以使用FBIOGET_VSCREENINFO命令来获取该结构相应信息,使用FBIOPUT_VSCREENINFO命令来设置该结构相应信息。26Framebuffer驱动结构structfb_cmap{__u32start;/*Firstentry*/__u32len;/*Numberofentries*/__u16*red;/*Redvalues*/__u16*green;__u16*blue;__u16*transp;/*transparency,canbeNULL*/};该结构描述设备无关的颜色映射信息。可以通过FBIOGETCMAP和FBIOPUTCMAP对应的ioctl操作设定或获取颜色映射信息.27Framebuffer驱动APILinux系统中对帧缓冲设备的操作是通过,fb_ops结构来完成和定义的。用户可以通过ioctl接口来完成对fb_ops结构中定义的功能函数的调用。帧缓冲驱动程序的主要工作就是编写fb_ops结构中的接口函数。28Framebuffer驱动APIstructfb_ops{/*open/releaseandusagemarking*/structmodule*owner;int(*fb_open)(structfb_info*info,intuser);int(*fb_release)(structfb_info*info,intuser);ssize_t(*fb_read)(structfb_info*info,char__user*buf,size_tcount,loff_t*ppos);ssize_t(*fb_write)(structfb_info*info,constchar__user*buf,size_tcount,loff_t*ppos);int(*fb_mmap)(structfb_info*info,structvm_area_struct*vma);int(*fb_ioctl)(structfb_info*info,unsignedintcmd,unsignedlongarg);…………};29Framebuffer驱动APIfb_ops结构中常见的接口函数:fb_open:打开帧缓冲设备fb_release:关闭帧缓冲设备fb_read:帧缓冲设备的读操作fb_write:帧缓冲设备的写操作fb_mmap:帧缓冲设备的内存映射操作fb_ioctl:帧缓冲设备的ioctl操作30Framebuffer帧缓冲内核驱动核心fbmem.c实现了如下函数.register_framebuffer(structfb_info*fb_info);unregister_framebuffer(structfb_info*fb_info);这两个是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两函数向系统注册或注销自己。几乎底层设备驱动所要做的所有事情就是填充fb_info结构然后向系统注册或注销它。31Framebuffer帧缓冲设备驱动程序分析内核源码目录(driver/video/)下的s3c-fb.c文件是S5PV210处理器帧缓冲设备硬件相关的驱动程序。s3c-fb.c驱动程序主要完成以下工作:初始化LCD控制器、设置显示模式、分配显示缓存。分配并初始化fb_info结构,填充其成员函数。调用register_framebuffer(structfb_info*fb_info),函数向系统注册帧缓冲设备驱动程序。32Linux内核对framebuffer帧缓冲的支持Linux内核对framebuffer帧缓冲设备有着良好的支持。makemenuconfig配置菜单:-DeviceDrivers-Graphicssupport-Supportforframebufferdevices(FB[=y])33Linux内核对framebuffer帧缓冲的支持*Supportforframebufferdevices---34Linux内核对framebuffer帧缓冲的支持*SamsungS3Cframebuffersupport35Framebuffer帧缓冲设备的操作应用程序对framebuffer帧缓冲设备的操作有以下几种:读/写读/写(read/write)/dev/fb:相当于读/写屏幕缓冲区。例如:用cp/dev/fb0tmp命令可将当前屏幕的内容拷贝到一个文件中,而命令cptmp/dev/fb0则将图形文件tmp显示在屏幕上。36Framebuffer帧缓冲设备的操作映射(map)操作:由于Linux工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。为此,Linux在文件操作file_operations结构中提供了mmap函数,可将文件的内容映射到用户空间。对于帧缓冲设备,则可通过映射操作
本文标题:07显示设备接口与帧缓冲
链接地址:https://www.777doc.com/doc-1304291 .html