1、系统结构框图
2、LCD控制器
由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600组成。
REGBANK有17个可编程寄存器和256×16的调色板存储器,用来设定LCD控制器。LCDCDMA是一个专用DMA,自动从帧存储器传输视频数据到LCD控制器,用这个特殊的DMA,视频数据可不经过CPU干涉就显示在屏幕上。VIDPRCS接受从LCDCDMA来的视频数据并在将其改变到合适数据格式后经VD[23:0]将之送到LCD驱动器,如4/8单扫描或4双扫描显示模式。TIMEGEN由可编程逻辑组成,以支持不同LCD驱动器的接口时序和速率的不同要求。TIMEGEN产生VFRAME、VLINE、VCLK、VM信号等。
数据流描述如下:FIFO存储器位于LCDCDMA。当FIFO空或部分空时,LCDCDMA要求从基于突发传输模式的帧存储器中取来数据,存入要显示的图像数据,而这个帧存储器是LCD控制器在RAM中开辟的一片缓冲区。当这个传输请求被存储控制器中的总线仲裁器接收到后,从系统存储器到内部FIFO就会成功传输4个字。FIFO的总大小是28个字,其中低位FIFOL是12个字,高位FIFOH是16个字。S3C2410有两个FIFO来支持双扫描显示模式。在单扫描模式下,只使用一个FIFO(FIFOH)。
3、LCD控制器输出信号分析
VFRAME/VSYNC:LCD控制器和LCD驱动器之间的帧同步信号。该信号告诉LCD屏新一帧开始了。LCD控制器在一帧显示完成后立即插入一个VFRAME信号,开始新一帧的显示。VLINE/HSYNC--LCD控制器和LCD驱动器之间的行同步脉冲信号。该信号用于LCD驱动器将水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整行数据移人LCD驱动器后,插入一个VLINE信号。VCLK--LCD控制器和LCD驱动器之间的像素时钟信号。LCD控制在VCLK的上升沿处送出数据,LCD驱动器在VCLK的下降沿处采样。VM/VDEN--LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示。VM信号能够和每帧同步,也能够和可变数据的VLINE信号同步。VD[23:0]--LCD像素数据输出端口。
4、时序分析
需要注意的是:在帧的领域里,我们所说的周期单位是一行;而在行的时候,我们所说的周期单位是VCLK时钟周期。
以240*320的屏为例,一个VCLK周期传输一组VD信号,从而给一个像素着色。要点亮一行,那么要有240个VCLK周期将240个pixel的VD值输出,而且这240个周期内 VDEN应该一直是有效的。现在我们的思路从点扩展到了行,理想情况下,两行之间不需要间隔,也就是说这一行结束马上传输下一行的第一个pixel的 VD。但是这样做并不好,因为一个点的偏差会造成满盘皆输。因此我们引入了行同步HSYNC信号,也就是说在传输完一行的数据后,先歇一会儿,等待若干个时钟(我们称之为后插入等待周期);然后我们送一个行同步信号,当然这个信号的有效周期数我们也能控制(我们称之为同步周期);之后呢,我们在等一会,让 LCD驱动电路准备好接收,我们在把一行的数据发下去(这个等待时间我们称之为前插入等待周期)。下图为证:
从图中我们可以看到:HSPW+1、HBPD+1、HFPD+1就是我们分别定义了同步周期、前插入等待周期、后插入等待周期。而HOZVAL+1则是一行的有效象素数目。这些都可以在寄存器里面进行设置。说完行与行之间的显示,我们就可以扩展到帧与帧之间的显示。我们很容易想到,在帧的领域里面也应该是类似于行的结构,同样包含了同步周期、前插入等待周期、后插入等待周期。上图为证:
经过上述的分析,我们可以把TFT LCD的接口归纳到8个参数上:HSPW、HBPD、HFPD、HOZVAL、VSPW、VBPD、VFPD、LINEVAL。另外,通过上述分析,我们可以看到,显示一帧图像总共需要的VCLK周期为:(HSPW+HBPD+HFPD+HOZVAL+4)*(VSPW+VBPD+VFPD+ LINEVAL+4),VCLK是可调的,因此通过选择适当的分频比保证帧率在60Hz左右就可保证液晶的正常工作了。
举例说明:YFARM9-EDU-1 采用的是Samsung 公司的1 款3.5 寸TFT 真彩LCD 屏,分辨率为240*320,下图为该屏的时序要求。
于是:
VSPW+1=2 -> VSPW=1 HSPW+1=4 -> HSPW=3
VBPD+1=2 -> VBPD=1 HBPD+1=7 -> HBPW=6
VFPD+1=3 -> VFPD=2 HFPD+1=31 -> HFPD=30
LINVAL+1=320-> LINVAL=319 HOZVAL+1=240-> HOZVAL=239
5、LCD可编程寄存器
5.1、LCDCON1
LINECNT:行计数器的状态位。只读,不用配置。
CLKVAL:确定VCLK频率的参数。公式为VCLK=HCLK/[(CLKVAL+1)×2],单位为Hz。笔者所用的硬件系统HCLK=100 MHz,640×480的显示屏需要VCLK=20 MHz,故需配置CLKVAL=1。
MMODE:确定VM的改变速度。在此选择MMODE=O,为每帧变化模式。PNRMODE:确定扫描方式。选择PNRMODE=0x3,为TFT LCD面板扫描模式。BPPMODE:确定BPP(每像素位数)模式。在此选择BPPMODE=0xC,为TFT 16位模式。ENVID:数据输出和逻辑信号使能控制位。选择ENVID=1,为允许数据输出和逻辑控制。
5.2、LCDCON2
VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值。
LINEVAL:确定显示的垂直方向尺寸。公式:LINEVAL=YSIZE-1=479。
VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,是帧数据传输后延迟时间和行同步时钟间隔宽度的比值。
VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值。
5.3、 LCDCON3
HBPD:确定行同步信号和行数据传输前的一段延迟时间,描述行数据传输前延迟时间内VCLK脉冲个数。
HOZAL:确定显示的水平方向尺寸。公式HOZAL=XSIZE-1。
HFPD:确定行数据传输完成后到下一行同步信号到来的一段延迟时间,描述行数据传输后延迟时间内VCLK脉冲个数。
5.4、 LCDCON4寄存器
HSPW:确定行同步时钟脉冲宽度。描述行同步脉冲宽度时间内VCLK脉冲个数。
5.5、LCDCON5寄存器
VSTATUS:垂直方向状态。只读,不用配置。
HSTATUS:水平方向状态。只读,不用配置。
BPP24BL:确定显示数据存储格式。此处配置BPP24BL=0x0,为小端模式存放。
FRM565:确定16位数据输出格式。此处配置FRM565=0x1,为5:6:5格式输出。
INVVCLK:确定VCLK脉冲有效边沿极性。如INVVCLK=0xl,VCLK上升沿到来时数据传输开始。
INVVLlNE:确定HSYNC脉冲的极性。
INVVFRAME:确定VSYNC脉冲的极性。
INVVD:确定数据输出的脉冲极性。
INVVDEN:确定VDEN信号极性。
INVPWREN:确定PWREN信号极性。
INVLEND:确定LEND信号极性。
PWREN:PWREN信号输出允许。
ENLEND:LEND输出信号允许。
BSWP:字节交换控制位。如配置BSWP=0x0,禁止字节交换。
HWSWP:半字交换控制位。如配置HWSWP=0xl,使能半字节交换。