1.LCD即液晶显示器,控制原理是控制其中的电子枪,在n行*n列的屏幕上投射不一样颜色从而造成图像编程
2.编程步骤:指针
①打开LCD背光
将LCD背光对应的GPIO设置为禁止上拉(GPxUP相应位写入1),选择output类型(GPxCON相应位写入01),输出为高电平(GPxDAT相应位写入1)。视频
②打开LCD电源
能够将GPG4选择为LCD_PWREN(GPGCON:9-8写入11),这时候LCD电源的打开/关闭能够经过LCDCON5:3来控制。
也能够自定义其余GPIO用做LCD电源开关,只需将此GPIO设置为禁止上拉(GPxUP相应位写入1),选择output类型(GPxCON相应位写入01),输出为高电平(GPxDAT相应位写入1)打开LCD电源。blog
③设置其余信号线
其余信号线包括VD0-VD23和VFRAME、VLINE、VCLK等,分别在GPCCON,GPDCON中选择相应功能。内存
④设置LCD的频率(VCLK)
LCD的Datasheet上通常会写有一个推荐的频率,好比我使用的屏幕推荐频率为6.4M,我须要经过一些计算选择一个合适的CLKVAL以产生这个频率:
对于TFT LCD,S3C2440提供的VCLK的计算公式为:
VCLK = HCLK / ((CLKVAL+1)*2)
能够得出:
CLKVAL = HCLK / (VCLK * 2) - 1
个人HCLK是100Mhz(CPU运行在400Mhz, CLKDIV_VAL设置为5,Fclk:Hclk:Pclk = 1:4:8),VCLK使用屏幕推荐的6.4M,获得:
CLKVAL = 100000000 / (6400000 * 2) - 1 = 6.8
选择最接近的整数值7,写入LCDCON1:17-8。
(VCLK其实就是根据 每秒帧数*帧行数*行像素 计算出来的,帧行数和行像素须要包含空白数和同步数)同步
⑤设置其余相关参数
LCD相关的参数主要还有这几个:
LINEVAL: LCD水平像素-1,如320-1 = 319
HOZVAL: LCD垂直像素-1,如240-1 = 239
HFPD: 行开始前的VCLK时钟数(LCD屏幕的Datasheet通常有推荐值)
HBPD: 行结束后的VCLK时钟数(LCD屏幕的Datasheet通常有推荐值)
HSPW: 行之间水平同步的无效VCLK时钟数(LCD屏幕的Datasheet通常有推荐值)
VFPD: 帧数据开始前的空白行数(LCD屏幕的Datasheet通常有推荐值)
VBPD: 帧数据结束后的空白行数(LCD屏幕的Datasheet通常有推荐值)
VSPW: 帧之间垂直同步的无效行数(LCD屏幕的Datasheet通常有推荐值)
(相关寄存器LCDCON2, LCDCON3, LCDCON4)原理
⑥设置视频缓冲区的地址
2440支持虚拟屏幕,能够经过改变LCD寄存器实现屏幕快速移动
PAGEWIDTH:虚拟屏幕一行的字节数,若是不使用虚拟屏幕,设置为实际屏幕的行字节数,如16位宽320像素,设为320 * 2
OFFSIZE:虚拟屏幕左侧偏移的字节数,若是不使用虚拟屏幕,设置为0
LCDBANK: 视频帧缓冲区内存地址30-22位
LCDBASEU: 视频帧缓冲区的开始地址21-1位
LCDBASEL: 视频帧缓冲区的结束地址21-1位
(相关寄存器LCDSADDR1,LCDSADDR2,LCDSADDR3)im
⑦肯定信号的极性
2440的LCD控制器容许设置VCLK、VLINE、VFRAME等信号的极性(上升沿有效仍是降低沿有效),须要对照LCD的Datasheet一一确认。
(相关寄存器LCDCON5)数据
⑧禁止LPC3600/LCC3600模式!
若是不是使用三星LPC3600/LCC3600 LCD,必须禁止LPC3600/LCC3600模式(写入0到TCONSEL)!img
⑨打开视频输出
ENVID设为1 (LCDCON1:0写入1)
3.
4.
A:显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上用时间线表示就为VCLK,咱们称之为像素时钟信号;
B:当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动做在上面的时序图中就称之为1 Line;
C:接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是须要必定的时间的,咱们称之为行切换;
D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。所以,这一行一行的显示在时间线上看,就是时序图上的HSYNC
E:然而,LCD的显示并非对一副图像快速的显示一下,为了持续和稳定的在LCD上显示,就须要切换到另外一幅图上(另外一幅图能够和上一副图同样或者不同,目的只是为了将图像持续的显示在LCD上)。那么这一副一副的图像就称之为帧,在时序图上就表示为1 Frame,所以从时序图上能够看出1 Line只是1 Frame中的一行;F:一样的,在帧与帧切换之间也是须要必定的时间的,咱们称之为帧切换,那么LCD整个显示的过程在时间线上看,就可表示为时序图上的VSYNC