《S3C2440上LCD驱动.docx》由会员分享,可在线阅读,更多相关《S3C2440上LCD驱动.docx(46页珍藏版)》请在优知文库上搜索。
1、S3C2440上1.CD驱动(FrameBUffer)实例开发讲解(一)一、开发环境主机:VWare-Fedora9二、背景学问1. 1.a)工作的硬件需求,要使一块1.CD正常的显示文字或图像,不仅须要1.CD驱动器,而且还须要相应的1.CD限制器。在通常状况下,生产厂商把1.CD驱动器会以COF/COG的形式与1.CD玻璃基板制作在起,而1.CD限制器则是由外部的电路来实现,现在许多的MCU内部都案成了1.CD限制器,如S3C2410/2440等。通过1.CD限制器就可以产生1.CD骄动落所须要的限制信号来限制STN/TFT屏了。2. S3C2440内部1.cD限制器结构图,SystemB
2、us1.PC3600tsaMingcontrollogicunitfor1.TS35OQ1-PD1or1.T335001.CC3600isatimingcontrollogicunitfor1.TS351PE1or1.TSa5OQ1我们依据数据手册来描述下这个集成在S3C2440内部的1.CD限制器:a:1.CD限制器由REGBANK、1.CDCDMA、TIMEGEN.VlDPRCS寄存得组成:b:REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置1.CD限制器的:c:1.CDCDYA是一个专用的DMA,它能自动地把在侦内存中的视频数据传送到1.CD驱动器,
3、通过运用这个DMA通道,视频数据在不须要CP1.的干预的状况下显示在1.CD屏上:d:VIDPRCS接收来自1.CDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口YD23:0传送视频数据到1.CD驱动器:e:TlMEGEN由可编程的逻辑组成,他生成1.CD驱动器须要的限制信号,比如VSYNC、HSYNC.VC1.K和1.END等等,而这些限制信号又与REGBANK寄存器组中的1.CDCOW/2/3/4/5的配置亲密相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形态,从而支持不同的1.CD驱动器(即不同的STNT11屏)。3. 常见
4、TFT屏工作时序分析:TFT屏工作时序图1.CD供应的外部接口信号:VSYNC/VFRAME/STV.垂直同步信号(TFT)/帧同步信号(STN)/SECTH信号;HSYNC/V1.INE/CPV.水平同步信号(TFT)/行同步脉冲信号(STN)/SECTl-T信号;VC1.K/1.CD_HC1.K.象素时钟信号CnTSTN)/SECTrT信号;VD23:0:1.CD像素数据输出端口(TFT/STN/SECTFT):VDEN/VWTPi数据使能信号(TFT)/1.CD驱动沟通偏置信号(SN/SECTFT信号;1.END/STH:行结束信号(TFn/SECTFT信号;1.CD_1.PC0ESEC
5、TFTOE信号:1.a1.1.PCREV:SECTFTREV信号;1.CD.UCREVBtSECTFTREVB信号。全部显示器显示图像的原理都是从上到下,从左到右的。这是什么意思呢?这么说吧,一副图像可以看做是一个矩形,由许多排列整齐的点一行一行组成,这些且称之为像整那么这幅图在1.eD上的显示原理就是:Ai显示指针从矩形左上角的第一行第一个点起先,一个点一个点的在1.CD上显示,在上面的时序图上用时间线表示就为VC1.K,我们称之为像素时钟信号;Bt当显示指针始终显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为11.ine;Ct接卜来显示指针又回到矩形的左边从其次行起先
6、显示,留意,显示指针在从第行的右边回到其次行的左边是须要肯定的时间的,我们称之为行切换:D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把-副图显示完成。因此,这一行一行的显示在时间线上看,就是时序图上的HSYNC;Et然而,1.CD的显示并不是对一副图像快速的显示一下,为J持续和稳定的在1.CD上显示,就须要切换到另一幅图上(另一幅图可以和上一副图一样或者不样,目的只是为了将图像持续的显示在1.CD上)。那么这一副一副的图像就称之为帧,在时序图上就表示为1Frame,因此从时序图上可以看出11.ine只是1Frame中的一行:F.同样的,在帧与帧切换之间也是须要挎定的时间的,我们称
7、之为帧切换,那么1.CD整个显示的过程在时间线上看,就可.表示为时序图上的VSYNCe上面时序图上.各时钟延时参数的含义如下:(这些参数的值1.CD产生J.商会供应相理的数据手册1.VBPD(verticalbackporch).表示在帧图像起先时,垂直同步信号以后的无效的行数,对应驱动中的UPPCrmargin:VFBD(verticalfrontporch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的IOWerjnargin:VSPf(verticalsyncpulsewidth)表示垂直同步脉冲的宽度,用行数计算,对应驱动中山VSyncen;HBPD(horizon
8、talbackporch);表示从水平同步信号起先到一行的有效数据起先之间的VC1.K的个数,对应驱动中的ICftmargin;HF11)(horizontalfrontPOrth)t表示行的有效数据结束到下个水平同步信号起先之间的YC1.K的个数,对应驱动中的rightmargin:HSPI(horizonUlsyncpulsewidth)t表示水平同步信号的宽度,用VC1.K计算,对应驱动中的hsynclen:对于以上这些参数的值将分别保存到REGBANK寄存罂组中的1.CDCONI/2/3/4/5寄存器中:(对寄存器的操作请查看S3c2440数据手册1.CD部分)1XDC0N1:17-8
9、位C1.KVA1.65位扫描模式(对于STN屏:4位单/双扫、8位单扫)4-1位色位模式(IBPP、8BPP、16BPP等)1.CDC0N2:3124位VBPD23-14位1.lNEVA1.136位VFPD5-O位VSPW1.CDC0N3:2519位HBPD18-8位HOZVA1.7-0位HFPD1.a)CON4:7-0位HSpW1.CDC0N5:4.幢线冲(FraTOBUffer):帧缓冲是1.inUX为显示设备供应的一个接口,它把一些显示设备描述成一个缓冲区,允许应用程序通过FrUmeBUffer定义好的接口访问这些图形设备,从而不用去关切详细的硬件细微环节。对于帧缓冲设备而言,只要在显示
10、缓冲区与显示点对应的区域写入颜色值,对应的颜色就会自动的在屏幕上显示。下面来看一下在不同色位模式下缓冲区与显示点的对应关系:三、慎畿冲(FraBeBUffer)设答驱动结构:就纵冲设备为标准的字符型设备,在1.inUX中主设备号29.定义在includMir三major.h中的FBMUoR,次设备弓定义帧援冲的个数,公人允许有32个FralIIeBUfrer,定义在/include/IinUXfb,h中的FBMAX.对应于文件系统下devfbd设各文件.1 .慎缓冲设备驱动在1.inUX子系统中的结构如下:用广空Iii应用程序内移空间fbmcn.CfiIjoperation*结构体fbradO
11、ft-wtster-frebuferO*fb-infoVUnreCISter-EranebuffervtrC*flqps结构体b_check_ver()ft_set_parO内核空间爰件1.CD控制器帧缓冲设备驱动程序结构图我们从上面这幅图存,帧爆冲设住在1.inUX中也可以看做是一个完整的子系统,大体由fbncm.c和XXXfb.c组成.向上给陶用程序供陶完善的设备文件操作接口(即对FrameUuffer设备进行read,Vrit、ioctl等操作),接口在1.inUX供应的fbneB1.C文件中实现:向下供应了硬件悚作的接门,只是这些接111.inux并没有供应实现,因为这要依据详细的1.
12、CD限制瑞硬件进行设置.所以这就是我们要做的事情(即xxxfb.c部分的实现).2 ,(疑冲相关的要数据结构:从帧缓冲设备张动程序结构看,该驱动主要跟fbinfo结构体有关,该结构体记录了帧缓冲设备的全部信息,包括设备的设置参数、状态以及对底层硬件操作的函数指针.在1.inUX中,每一个帧缓冲设备都必需对应一个fbjnfo,fbinf。在linuxb.h中的定义如下:(只列出重要的一些)structfbinfo(intnode;intflags:structfb_varscreeninfovar;*1.CD可2航Jtfr4ir珈4*/.涉奴:JPJ*/structfbfixscreeninfo
13、fix;*I.CD固a:参数结构体*/structfbmonspecsmonspecs:*1.CD显,-,ItuXlljj./JClI-J1MJ个/structfbpix11appixnap;structfbPiXmaPsprite;structfb-cmapcmap;*图像硬件mapper*/*光标硬件mapper*/*当前的颜色表structfbvideonode*moe;/*当前的显示模式*/Uifdef#endif#fdef*cndifCONFIG_FB_BACK1.1GHTstructbacklightdevice*bldev:structmutexblCUrVejnutex;u8b
14、lcurveFBBACK1.IGHT.1.EVE1.S;Co虾IGFB.DEFERREDIOstructdelayedworkleferred_workStrUClfbdeerredio*fbdefio;/“对应的背光设备*/背光调整*/;#ifdef#cndif大小*/structfb_ops*fbops;structdevice*levice:structdevice*dev;intclass_flag:CONFIG_FBTI1.EBl.i11iNGstructfb_tile_ops*tileops;char_ionem*screen_base;unsignedlongSCreen_size;void*pseudo-palette:#ar;void*par;其中,比较要的成员有SlrUClfbvar.screeninfoviustructfb_fix_screeninfofix和StrUCtfb_ops*fbops,他们也都是结构体。下面我心一个个的来看。fbvarSCrCeninf。结构体主要记录用户可以修改的限制器的参数,比如屏障的辨别率和每个像索的比特数等,该结构体定义如下:structfb_var_screeninfou32xres;/*可见