引言
S3C2410是三星公司生产的基于ARM920T内核的RISC微处理器,其主频可达203MHz[1],适用于信息家电、PDA、手持设备、移动终端等领域,本文介绍了基于S3C2410的显示系统的硬件电路及驱动软件设计方法。
TFT-LCD模块的时序要求
本显示模块选用的LQ080V3DG01是Sharp公司的TFT-LCD器件,该器件的分辨率为640×480,控制时序图如图1所示,时间参数如表1所列[2]。
硬件电路设计
在该显示系统的硬件电路中,S3C2410与LCD模块的连接是关键,S3C2410内部自
系统软件设计
S3C2410处理器中的LCD控制器内含寄存器LCDCOM1-LCDCON5。对于LQ080V3DG01,这些寄存器的具体设置如下:
(1)在LCDCON1中,CLKVAL是时钟参数,对于LQ080V3DG01,该域值取1。PNRMODE是显示模式参数,该域值取3,表示所用模块是TFT型CONTROL ENGINEERING China版权所有,BPPMODE是每个象素的数据位数参数,对于LQ080V3DG01模块,设计时可设置成16bpp,所以此域值取12。
(2)在LCDCON2中,VBPD对应于表1中的H参数,该域值取32。LINEVAL对应于表1中的I参数,该域值取479,VFPD对应于表1中的J参数,该域值取9,VSPW对应于表1中的G参数CONTROL ENGINEERING China版权所有,该域值取1。
(3)在LCDCON3中,HBPD对应于表1中的C参数,该域值取47。HOZVAL对应无于表1中的D参数,该域值取639,HFPD对应于表1中的E参数,该域值取15。
(4)在LCDCON4中只需要设置HSPW即可,它对应于表1中的B参数,该域值取95。
(5)LCDCON5中,BPP24BL用于决定24bpp视频存储器的大小端模式,该域值取0,FRM565决定16bpp视频输入数据的格式。
在设计中,还可在基于S3C2410的硬件平台上安装嵌入式Linux操作系统。为了使LCD能够正常显示控制工程网版权所有,还需要在嵌入式Linux系统下开发LCD的驱动程序。
Framebuffer是出现在Linux2.2.xx内核的一种驱动程序接口,对应的源文件在Linux/drivers/video/目录下,总的抽象设备文件为fbcon.c。这种接口将显示设备抽象为帧缓冲区,用户可以将它看成是显示内存的一个映象。在使用帧缓冲时,Linux将显卡置于图形模式下[3]。
根据上面对LCD各主要寄存器设置的分析所得出的结果,笔者开发了基于FrameBuffer机制的S3C2410fb驱动程序。下面是经过调试成功的部分代码,该程序可对显示屏幕进行初始化并设置LCD控制寄存器的值:
/*s3c2410fb.c*/
static struct s3c2410fb_mach_infoxxx_stn_info_initdata={
pixclock:174757,bpp:16,xres:640CONTROL ENGINEERING China版权所有,yres:480,hsync_len:96,vsync_len:2,left_margin:40,upper_margin:24,right_margin:32,lower_margin:11,