S3C44B0X内部具有一个LCD驱动控制器,自动产生LCD驱动控制所需的控制信号,因此S3C44B0X可以与黑白灰度、STN型彩色LCD屏直接接口,而不需要另外加LCD控制器。在这种接口方式下,LCD显示缓冲区映射在系统的存储器空间上,程序只需将像素点内容写入存储器对应地址就可以实现对应LCD屏上像素点颜色的显示,十分方便。 本实例以S3C44B0X与一个STN型320×240像素的彩色液晶接口为例,介绍S3C44B0X与彩色液晶的接口方法,及如何在LCD上显示某种色彩、如何绘制简单图形。重点掌握LCD控制器的初始化和绘制简单图形的编程方法。
3.1 STN型彩色LCD模块介绍 ARMSys上采用的是Sharp公司的LM057QC1T01型STN彩色液晶显示模块。该液晶模块的显示格式为320(×3)×240。即显示屏每行具有320个像素点,共240行;每个像素点由RGB(红、绿、蓝)三种颜色组成。
3.1.1 LCD模块的接口信号线定义
参考以下接口时序图,能够更好地理解每条接口信号线的作用:
图11-1 LM057QC1T01的接口时序图 ◎ 写满整个屏的数据称为1个“帧”的数据,YD是帧同步信号,该信号启动LCD屏的新一帧的数据。两个YD脉冲之间的时间长度就称之为“帧周期”。根据LCD模块的特性,帧刷新周期为12ms到14ms,频率为70Hz~80Hz。每1帧中包含240个LP脉冲。 ◎LP为行(共240行)数据输入锁存信号,该信号启动LCD屏新的一行的数据。也就是行同步脉冲信号。每1行中包括320×3/8个XCK脉冲信号。 ◎XCK为行数据输入信号,也就是每一行中像素点数据传输的时钟信号;每组8位的数据在XCK的下降沿处被输入锁存。 ◎D0~D7是8位的显示数据输入信号。
3.2 S3C44B0X的内部LCD控制器介绍 …… …… 3.2.1 LCD控制器的外部接口信号 ◎ VFRAME:LCD控制器和LCD驱动器之间的帧同步信号。该信号告诉LCD屏的新的一帧开始了。LCD控制器在一个完整帧显示完成后立即插入一个VFRAME信号,开始新一帧的显示;该信号与LCD模块的YD信号相对应。 ◎VLINE:LCD控制器和LCD驱动器之间的线同步脉冲信号,该信号用于LCD驱动器将水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整个水平线(整行)数据移入LCD驱动器后,插入一个VLINE信号;该信号与LCD模块的LP信号相对应。 ◎ VCLK:LCD控制器和LCD驱动器之间的像素时钟信号,由LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿处被LCD驱动器采样;该信号与LCD模块的XCK信号相对应。 ◎ VM:LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示或熄灭。VM信号可以与每个帧同步,也可以与可变数量的VLINE信号同步; ◎ VD[3:0]:LCD像素点数据输出端口。与LCD模块的D[3:0]相对应。 ◎ VD[7:4]:LCD像素点数据输出端口。与LCD模块的D[7:4]相对应。 ◎ DISP_ON:采用一个通用I/O口与LCD模块的DISP信号相对应(一般情况下高电平为开,低电平关)。 ◎ EL_ON:采用一个通用I/O口作为背光逆变器的开关。 3.2.2 LCD控制器的操作
3.2.2.1显示类型 S3C44B0X的LCD控制器支持3种LCD驱动器:4位双扫描,4位单扫描,8位单扫描显示模式。其中,8位单扫描方式如下图所示:
图11-2 8位单扫描方式 8位单扫描显示采用8位并行数据线进行“行”数据连续移位输出,直到整个帧的数据都被移出为止。彩色像素点的显示要求3种颜色的图像数据,这使得行数据移位寄存器需要传输3倍于每行像素点个数的数据。这个RGB数据通过平行数据线连续地移位至LCD驱动器。如上图11-2所示。 图11-3是LM057QC1T01的扫描模式图,可见LM057QC1T01是按照8位单扫描模式工作的。在8位单扫描方式中,LCD控制器的8条(VD[7:0])数据输出可以直接与LCD驱动器连接。
图11-3 LM057QC1T01的扫描模式
3.2.2.2像素点字节数据格式(BSWP=0) 在彩色模式下,1个字节8位(3位红色、3位绿色、2位蓝色)的图像数据对应于一个像素点。像素点字节在存储器中保存的格式为332模式,如下表所示:
3.2.2.3虚拟显示 S3C44B0X支持硬件方式的平行或垂直滚动。如果要使屏幕滚动,可以通过修改LCDSADDR1和LCDSADDR2寄存器中的LCDBASEU和LCDBASEL的值来实现。但不是通过修改PAGEWIDTH和OFFSIZE来实现。LCDBASEU、LCDBASEL、PAGEWIDTH和OFFSIZE的定义也可以通过下图来认识:
图11-4 在虚拟显示屏中实现滚动 从图中可以看出,如果要实现滚动,则显示缓冲区的大小要大于LCD显示屏的大小。 3.2.2.4查找表 S3C44B0X可以支持调色板表(即查找表),用于各种色彩选择或灰度级别的选择。这种方法给予用户很大的灵活性。查找表也称为调色板,在灰度模式中,通过查找表可以在16级灰度中选择4级灰度;在彩色模式中,1个字节的图像数据是用3位来表示红色,3位表示绿色,2位表示蓝色。通过查找表,可以选择16级红色中的8级红色,16级绿色中的8级绿色,16级蓝色中4级蓝色。256色意味着所有颜色都是由8种红色,8种绿色和4种蓝色构成(8×8×4=256)。参考后面小节关于查找表寄存器的说明,例如REDLUT(红色查找表寄存器),1个字节的3位是表示红色的,这3位可以取值000、001、010……111共8个值。取某个值时,对应的色彩级别究竟是多少,就在查找表中设定。每个色彩级别由4位数据表示,因此共有16个色彩级别可供选择。 3.2.3 LCD控制器专用寄存器
…… ……
实现方法与步骤
4.1 I/O口LCD功能设置 通常采用S3C44B0X的PC口和PD口作为LCD驱动接口,因此需要设置PC和PD工作在第3功能状态,设置I/O口控制寄存器的语句如下: rPCONC = 0x0f00ff54; rPCOND= 0xaaaa;
4.2 LCD初始化程序
4.2.1控制信号寄存器设置向导 S3C44B0X包括一个LCD控制器时序发生器TIMEGEN,由它来产生VFRAM, VLINE, VCLK和VM控制时序。这些控制信号由寄存器LCDCON1和LCDCON2进行配置。通过对寄存器中配置项目的设置,TIMEGEN就可以产生适应于各种LCD屏的控制信号了。 VFRAME和VLINE脉冲的产生通过对LCDCON2寄存器的HOZVAL和LINEVAL域进行配置来完成。每个域都与LCD的尺寸和显示模式有关。HOZVAL和LINEVAL可以通过下式计算出来: ◎ HOZVAL = (显示宽度/VD数据线的位数) -1; 在彩色模式下:显示宽度= 3×每行的像素点数目 例如对于我们采用的LCD,HOZVAL= (320×3/8)-1 ◎ LINEVAL = (显示宽度)-1;在单扫描显示类型下。 LINEVAL = (显示宽度/2)-1;在双扫描显示类型下。 例如对于我们采用的LCD,LINEVAL = 240-1
VCLK信号的频率可以通过LCDCON1寄存器的CLKVAL域来确定。它们存在以下关系: VCLK(Hz) = MCLK/ (CLKVAL×2) LCD控制器的最大VCLK频率为16.5MHz,这使得LCD控制器几乎支持所有已有的LCD驱动器。由于上述关系,CLKVAL的值决定了VCLK的频率,为了确定CLKVAL的值,应该计算一下LCD控制器向VD端口传输数据的速率,使得VCLK的值大于数据传输的速率。 数据传输速率通过以下的公式计算: ◎ 数据传输速率=HS×VS×FR×MV HS:LCD的行的尺寸; VS:LCD的列的尺寸; FR:帧速率; MV:模式值,取值如下表:
在ARMSys系统中: HS = 320;VS = 240;FR = 70;MV = 3/8。因此: 数据传输速率=320×240×70×3/8=2016000 VCLK的值应大于2M,小于16M,因此在我们的系统中CLKVAL可以取值3~15。
VFRAME信号的频率与LCDCON1和LCDCON2寄存器中的WLH(VLINE脉冲宽度),WHLY(VLINE脉冲之后VCLK的延时宽度),HOZVAL, VLINEBLANK, 和LINEVAL有关。大多数的LCD驱动器需要适应的帧频率,参考3.1.1节,LM057QC1T01的帧频率范围是70Hz~80Hz。液晶屏所需要的VCLK的值计算可以依据下式:
VCLK(Hz) = (HOZVAL+1) / [ (1 / (frame_rate x (LINEVAL+1))) - ((WLH+WDLY+LINEBLANK) / MCLK )]
|