S3C2410/2440 MCU内部都集成了LCD控制器,通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。
LCD控制器主要由REGBANK,LCDCDMA,VIDPRCS,TIMEGEN等寄存器组成,如果不是用的三星的LCD,LPC3600和LCC3600就不用管它,它们专门为三星的LCD设计的。
REGBANK由17个可编程的寄存器和一个256X16调色板内存组成,他们用来配置LCD控制器。
LCDCDMA是一个专用的DMA,它能自动将帧内存中的数据传送到LCD驱动器,通过这个DMA通道,数据不需要CPU干涉就能传送到LCD上显示。
VIDPRCS接收来自LCDCDMA的数据,并转换成合适的数据格式再送到LCD驱动器中。
TIMEGEN由可编程的逻辑组成,生成LCD驱动器需要的控制信号,比如VSYNC、HSYNC、VCLK和LEND等等,而这些控制信号又与REGBANK寄存器组中的 LCDCON1/2/3/4/5的配置密切相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形态,从而支持不同的LCD驱动器(即不同的 STN/TFT屏)。
我们在LCD上显示的一幅图像称为一帧图像。在LCD上显示一帧图像的原理:从第一行的最左边开始扫描,一行结束后跳到下一行继续扫描。当显示完一幅图像后,从新第一行接着扫描。
常见TFT屏工作时序图:
VSYNC:垂直同步信号
VSPW:表示垂直同步脉冲的宽度,用行数计算
VBPD:表示新一帧图像的开始,垂直同步信号以后无效的行数
VFPD:表示新一帧图像结束后,垂直同步信号以前的无效的行数
HSYNC:水平同步信号,表示新的一行的开始,即跳到最左边开始行的一行数据的扫描。
HSPW:表示水平同步信号的宽度,用VCLK计算
HBPD:表示水平同步信号从开始到一行的有效数据开始之间VCLK的个数
HFPD:表示一行有限数据结束到下一个水平同步信号开始之间VCLK的个数
VCLK:像素时钟信号
VD[23:0]:LCD像素数据输出端口
VDEN:数据使能信号
LEDN:行结束信号
这幅图在LCD上的显示原理就是:
A:显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上用时间线表示就为VCLK,我们称之为像素时钟信号;
B:当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为1 Line;
C:接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换;
D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。因此,这一行一行的显示在时间线上看,就是时序图上的HSYNC;
E:然
而,LCD的显示并不是对一副图像快速的显示一下,为了持续和稳定的在LCD上显示,就需要切换到另一幅图上(另一幅图可以和上一副图一样或者不一样,目
的只是为了将图像持续的显示在LCD上)。那么这一副一副的图像就称之为帧,在时序图上就表示为1 Frame,因此从时序图上可以看出1
Line只是1 Frame中的一行;
F:同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么LCD整个显示的过程在时间线上看,就可表示为时序图上的VSYNC。
显示器的频率: 当HCLK=100MHz时,
Frame Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x{2x(CLKVAL+1)/(HCLK)}]
= 60Hz
LCDCON1:17 - 8位 CLKVAL
6 - 5位扫描模式(对于STN屏:4位单/双扫、8位单扫)
4 - 1位色位模式(1BPP、8BPP、16BPP等)
LCDCON2:31 - 24位 VBPD
23 - 14位 LINEVAL
13 - 6位 VFPD
5 - 0位 VSPW
LCDCON3:25 - 19位 HBPD
18 - 8位 HOZVAL
7 - 0位 HFPD
LCDCON4: 7 - 0位 HSPW
LCDCON5: 1 - 0位用来设置数据存储方式,我们ARM上电默认的方式是小端模式,即数据的低位放在低地址处,数据的高位放在高地址处。第3位用来设置给LCD供电,我们LCD有两种供电方式,一种是外接电源,一种是我们IO口输出高电平供电,mini2440采用的是io口供电,采用IO供电的好处是当我们不用 LCD的时候可以通过软件来设置LCD的开启与关闭。第8、9位是设置信号极性的。第11位用来设置显示模式,我们采用的的是5:6:5模式。
帧缓冲:
帧内存就是图像数据的存放地址,我们将图像数据放入到帧内存中,然后自动通过LCDDMA将数据送到LCD上显示。
16BPP有两种表示方式,分别为5:5:5:1显示模式和5:6:5显示模式。
LCD控制器的地址寄存器LCDSADDR1~3:
1. LCDSADDR1: 设置LCDBANK、LCDBASEU
2. LCDSADDR2: 设置LCDBASEL: 帧缓冲区的结束地址A[21:1]
3. LCDSADDR3: 设置[21:11]位OFFSIZE等于0,我们用到[10:0]位PAGEWIDTH等于(320 LCD的宽度为320个像素)