S3C2440A下彩色液晶显示器的设计.docx

上传人:夺命阿水 文档编号:1473247 上传时间:2024-06-29 格式:DOCX 页数:10 大小:142.81KB
返回 下载 相关 举报
S3C2440A下彩色液晶显示器的设计.docx_第1页
第1页 / 共10页
S3C2440A下彩色液晶显示器的设计.docx_第2页
第2页 / 共10页
S3C2440A下彩色液晶显示器的设计.docx_第3页
第3页 / 共10页
S3C2440A下彩色液晶显示器的设计.docx_第4页
第4页 / 共10页
S3C2440A下彩色液晶显示器的设计.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《S3C2440A下彩色液晶显示器的设计.docx》由会员分享,可在线阅读,更多相关《S3C2440A下彩色液晶显示器的设计.docx(10页珍藏版)》请在课桌文档上搜索。

1、1.2时序和数据匹配电路由于S3C2440A的1.CD限捌器与1.CD屏1.Q035Q7DH01在数据格式及显示时序上无法印配,须饕选用一种时序限制IC或者用CP1.D(也就是通常所说的1.CD伴住;芯片)来对不同数据格式的数据接11进行映射-但CP1.D面积较大、成本较高,因而通常只在须要对电路进行收提配置的状况下才运用。木文时序限制IC选用爱普公司的1.Z9FC22该芯片专用于对TFT型QVGA屏幕(乔琳册别率320x240)的1.CD进行时序限制.这是一个18bit(R6G6B6)的限制器,由于本文采纳的是RGB56516位工作模式,所以将其怆入引脚RO和BO接地。时序和数据Pt配电路如

2、图2所示:3Vs三c国苣国Os3s三SSSS-2D231.Z9FC2251039工、J7_46上44TTDaxPP*TESTlVDlOTESTl0R5GNDOGOOGl0G20G30G40G5GNDVDDOWOBlOBOTJBT图2时序和做樵Kifc电路1.5显示系统整体结构框图显示系统整体结构框图如图5所示.图5显示系统结构框图21.inux下的*谖冲(framebuffer)设备1.inux下编写显示设备的夏动程序有两种方法:一种是把显示设备抽象成一般的字符设备,褒动铿序的写法和一般的字符设备胆动类似;其次种就是帧缓冲设备驱动程序的编写。由于第种方法不规范,而H.实现功能有限,故一般不提但

3、;而帧烦冲阴动程序比较简洁,也商沽实现,因而在嵌入式系统里得到了广泛应用.帕缓冲设生是一个供应显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的谀备,是1.inUX为图形设的供应的一个抽象接口,它将显示设各抽望为帧缓冲区.帧缓冲允许上层应用程序在图形模式下干脆对显示缓冲区进行读写操作.这种操作是抽象的、统的.应用程序不必关切物理显存的位词、换页机制等等详细细微环节,帧线冲设备M干字符设符,采纳文件层-驱动层”的接口方式.1.lnux内核include/fnux/fb.h中定义了物缓冲设备的驱动层接口fb_info结构体,fbjnf。定义了当前工作的显示卡的状态和帧缓冲设茶的操作函数,它仅

4、对内核可见.文件fb.h中还定义了fb_var_screeninfo(显示卡可变特性,这些特初始化.然后调用这两个函数对其注册或注料.帧缓冲设备郭动层接I干脆对1.CD设备硬件进行操作,而fbmem.c可以记录和管理多个底层设备涵动,3显示系统帽冲胆动的耳3.1 定义1.CD限制器结构体前面已经说过,1.CD限制器的功能是传箱图像数据并产生相应的双洌信号来骗动1.CD显示器,第动程序须要依据当前详细显示硬件的特性,通过诜写系列的1.CD限制寄存器来完成设定显示器辨别率和显示数据的格式,设置限制信号时序,指定品示徵中区地址等,从而供应应显示设备合适的数据信号和限制信号,文中依据须要为S3C244

5、0A的1.CD限制器定义了一个专用结构体s3c2440fb_machnfo:structs3c2440fb_mach_lnfou_longPixclock;/-像素时钟频率*/u_charbpp;/映像求须要的bit数/u_shortxres;/*显示器行辨别率*/u_shortyres;/*显示据列辨别率*/u_charhsyncen;/*行同步信号的长度*/u_CharVSyncen;/*帧同步信号的长度*/u_charleft.marginj三从本行图象数据输出结束到卜一行的行同步信号起先之间的像本时钟数*/1.Charright_margin;/*从行同步信号结束到该行的图象数据起先输

6、出之间的像素时钟数*/u_charUPpejmargin;/,从本帧图象数据输出结束到下帧的帧同步信号起先之间的无效行数*/u_char。WeJmargin;/*从帧同步信号结束到该帧图象数据起先输出之间的无效行数*/u_charsync;structs3c2440fb_lcd_regreg;*S3C2440A1.CD限制寄存器结构体/;加动程序通过定义一个s3c2440fb_mach_info结构变址并给该变城赋值来完成1.CD限制器的初始化.3.2 编写结构体fb_info中fb_ops时应的成其函数对于本嵌入式系统的实现,须要下列5个函数:staticstructfbopss3c2440

7、fb_ops=wner=THIS.MODU1.E,THIS-MODU1.E宏用来防止眼动模块在运用状态下被卸载/fb_get_fix:s3c2440fb_get_fix,fbget_var:s3c2440fbget_var,fb_set_var:s3c2440fb_set_var,fb_get_cmap:s3c2440fb_get_cmap,fb_set_cmap:s3c2440fb_set_cmap,;结构体fb_ops(f.1.inux内核indude/linux/fb.h中定义.这些函数都是用来设诋和获得驱动层接口fbjnfo结构体中的成变量的,前文已提过当应用程序对设各文件进行i。Ct

8、l操作时会调用它们.对于fb_get_fix()和fb_get_var()应用程序传入的是fbjnfo中的结构变鼠fix和var,fb_set_var()函数则是对var变显进行设置,同样fb_geJCmaP()和fb_seJCmaP()则是对结构变Iitcmap内容进行读取和设置“在这5个函数中,fb_set_var()设置了显示设备的显示模式,是最JR要的一个函数,文中依据须要为当前显示便件定义一个C行结构体s3c2440fbMo,该结构体包括一个fb_iMo结构变量,及其它与所选1.CD硬件有关的全郃参数.因此结构体fb_ops中成员函数对结构体fb_info的操作4实上就是对结构体s3

9、c2440fbnfo的操作。该结构体定义如下:structs3c2440fbjnfo(structfbjnfofb;*fb-info结构变Ift*/signedintcurrcon;/当前终端限制台的序号*/u_intmax_xres;/屏尊能显示的最大行辨别率*/u_intmax_yres;/屏幕能显示的最大列辨别率*/structs3c2440fb_lcd_regreg;*S3C2440A1.CD限制寄存器*/*其他1.j1.CD硬件行关的参数*/);结构体fb_ops中的成G函数流程相像,木文在此仅给出函数s3c2440fb_SeJVar()的流程图和程序代玛.函数s3c2440fb_s

10、et_var()流程图如图6所示:staticstructfb_opss3c2440fb_ops=Owner:THIS_MODU1.E,/THIS_MODU1.E宏用来防止亮动模块在运用状态下被卸我/fb_get_fix:s3c2440fb_get_fix,fb_get_var:s3c2440fb_get_var,fb_set_var:s3c2440fb_set_var,fb_get_cmap:s3c2440fb_get_cmap,fb_set_cmap:s3c2440fb_set_cmap,;结构体fb_ops在1.inux内核indude/linux/fb.h中定义.这些函数都是用来设徨和

11、狭得驱动层接口fb_inf。结构体中的成员变Jlt的,前文已提过当应用程序对设法文件进行i。Ctl操作时会调用它们。对于fb_get_fix()和fb_get_var()应川程序传入的是fbjnfo中的结构变量fix和var,fb_set_var()ff数则是对Var变fft进行设义向样fb_geJCm叩。和fb_seJemaP。则是时结构变量CmaP内容进行读取和设置。在这5个函数中,fb_set_var()设过了显示设备的显示模儿是她咆要的一个函数.文中依据须要为当前显示硬件定义一个专有结构体s3c2440fbnf。,该结构体包括一个fbjnfo结构变量,及其它与所选1.CD硬件有关的全部

12、参数.因此结构体fb_ops中成员函数对结构体fb_info的操作驿实上就是对结构体s3c2440fbjnfo的操作,该结构体定义如下:structs3c2440fbjnfo(structfbjnfofb;*fb_info结构变fit*/signedintCUrrcon;*当前终端限制台的序号*/u_intmax_xres;/屏份健显示的大行辨别率*/u_intmax_yres;/屏窑能显示的她大列辨别率*/structs3c2440fb_lcd_regreg;*S3C2440A1.CD限制寄存器*/*其他与1.CD硬件有关的多教*/;结构体fb_ops中的成访函数流程相像,本文在此仅给出函数

13、s3c2440fb_Set_var()的流程图和程序代码,函数s3c2440fb_set_var()流程图加图6所示:图6函数s3c2440fb_set_var()流程图函数s3c2440fb_setvar()程序如卜:staticints3c2440fb_set_var(structfb_var_screeninfo*var,intconstructfb_info*info)structs3c2440fbjnfo*fbi=(structs3c2440fbjnfo*)info;*将显示模式读入结构体s3c2440fb_info*/structfb_var_screeninfo*dvar=get

14、_con_var(&fbi-fb,con);Interr;err=s3c2440fb_validate_var(var,fbi);*显示模式是否有效/if(err)*无效返回*/returnerr;dvar-red=fbi-rgbrgbidx-red;/*将显示参数笃入结构体fb_var_SereenInfO*/dvar-green=fbi-rgbrgbidx-green;dvar-blue=fbi-rgbrgbidx-blue;dvar-transp=fbi-rgbrgbid-transp;display-var=*dvar;s3c2440fbhw_set_var(dvar,fbi);*设置

15、RGB颜色信息,设徨S3C2440A的1.CD限制寄存器*/return0;3.3 编写初始化函数初始化函数首先初始化1.CD限制潺和结构体s3c2440fbjnfozmcs3c2440fb_info中结构变量fb_lnfo的成坊变址,这叫成员变革的参数做由1.CD显示耦厂商的手册获得,然后通过COnSiStenJalloC函数安排一片连续的空间,显示系统采纳的1.CD显示方式为320x240,16位彩色.须要安排的显示缓冲区为32024016/8=ISOk字节海冲区通常安排在片外SDRAM中,起始地址和末地址保存在1.CD限制器寄存器1.CDSADDRI和1.CDSADDR2里,最终调用re

16、gisterramebuffer(Sfbi-fb)ifb_info结构变质fb量记入内核.初始化函数如下:int_inits3c2440fbjnit(void)(structs3c2440fbjnfo*fbi;intret;fbi=s3c2440fbJnitbinfo();*初始化1.CD限制器和s3c2440fb_Jnfo/ret=s3c2440fb_map_video_memory(fbi);/*安排150K字节大小的1.CD显示缓冲区*/if(ret)/*出措返回/if(fbi)kfree(fbi);returnret;s3c2440fb_set_var(8fbi-fb.var,-l,8

17、fbi-fb);ret=regiSteJframebUffer(&fbi-fb);/*将fb注册到内核*/if(ret)/*出槽返回/if(fbi)kfree(fbi);returnret;)printk(InstalledS3C2440framebufferkn);/*在限制台显示安装显示驱动程序胜利*/MODNC_USE_COUNT;/*该宏用来管理自己被运用的计数,模块在被运用时,是不允许被卸载的*/return0;4翼动程序收入到内核驱动程序嵌入到内核有两种方式:一种是干脆编译入内核,随1.inux启动的时候加装;另种是编译成模块,动态加我。假如要将其干脆编译入1.inUX内核,则须要

18、将源代码文件拷贝到Unux内核源代利的相应路径里,并修收Makefile文件和config.in文件,这种方法会增加内核的大小,而且不能动态和教,不利于网试,所以目前一般举荐采纳其次种方式,假如这样,在本驱动程序的最终还须要加上宏modulejnit(s3c244OfbIJn世);这是告知编谛器该业动程序的入U地址为初始化函数s3c2440fb_init().须要留意的是初始化函数必需在宏modulenlt(s3c2440fbnlt)运用前定义,否则会出现编译错误。而且在编译时至少要ME-D_KERNE1._-DMODU1.e-DUNUX这几个金数阉译完成后通过insmod吩咐将舞动模块加软进

19、内核,通过rmmod吩咐卸我驱动模块.5应用程序W冲设务的运用UnUX将全部的设在都当作文件迸行处理,各种设笛通常以文件的形式放在dev书目下.帧缓冲设备和其它位于dev书目下面的设备类似,其驱动程序的设备文件一般是devfbdevfbl等等.在应用程序中,操作devfb的般流程如图7所示:图7应用程序对岫缓冲设J的掾作流程其典型应用程序如下:Main()Intfbfd=O;structfb_var_screeninfovinfo;structfb_fix_screeninfofinfo;unsignedchar*fbp;fbfd=open(devfbO,0-RDWR);*打开设备文件*/if

20、(!fbfd)*失败返IUl*/printf(Error:cannotopenframebufferdevice.n);eit(l);Printf(Theframebufferdevicewasopenedsuccessfully.n);ioctl(fbfd,FBIOGET.FSCREENINFO,8finfo);*获得显示设备特性*/ioctl(fbfd,FBIOGET_VSCREENINFO,&vlnfo);screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8*计算地修缓冲区的大小*/fbp=(unsignedchar*)mmap(

21、0,screensize,PORT_READ|PORT_WRITE,MAP_SHARED,fbfd,0);/*将屏幕缓冲区映射到用户地址空间,然后应用程序就可以通过p访问镁冲区了*/memset(fbp,O,screensize);*川memset将屏幕清空*/6结束语在显示系统硬件设计中,显示硬件的整体设计考虑全面是设计过程中的重点,这就要求对显示硬件的各特性参数有全面的了解.软件设计中,由于其中涉及到的数据结构比较多,同时又和限制台账系在起,有肯定的难度,只行在深刻理解各个变域和操作函数的详细意义后,才能分析端写自己须要的1.CD第动程序,在编写的过程中,最好的参考莫过于1.inUX内核drivers/video的目下的源代码.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号