一、开发环境 主 机:ubuntu 8.10 开发板:FL2440--64MB Nand, Kernel:2.6.30.9 编译器:arm-linux-gcc-4.3.2 二、背景知识 1、LCD屏显示原理 TFT LCD彩色液晶屏可以看成由很多显示的点构成,这些显示的点称为像素,像素的多少就构成了分辨率,如我们使用的3.5寸屏分辨率为320*240,4.3寸屏为480*272. 对于彩色液晶屏,每一个像素相当于有3个不同颜色的发光管,分别为R、G、B,通过调节这三种颜色的光强,可以调出各种颜色。TFT LCD彩色屏的显示原理就是通过控制LCD屏幕上每个像素点的3个发光管的光强,来达到在LCD屏幕上显示各种文字和图形。 2、LCD硬件原理 LCD的硬件主要包括LCD玻璃基板、LCD驱动器和LCD控制器,LCD驱动器与LCD玻璃基板制作在一起,LCD控制器由S3C2440 CPU自带。 FL2440 LCD控制器借口原理图如下:
有图可以看出,LCD显示接口对LCD提供了VD0~VD23,VDEN,VCL,HSYNC,VSYNC,LCD_PWREN 控制信号,他们与GPC、GPD、GPG IO端口复用。
S3C2440 IO 端口
|
LCD控制信号
|
GPD0~GPD15
|
VD8~VD15
|
GPC8~GPC15
|
VD0~VD7
|
GPC1
|
VCLK
|
GPC2
|
VLINE
|
GPC3
|
VFRAME
|
GPC4
|
VDEN
|
GPG4
|
LCD_PWREN
|
S3C2440的LCD控制器与LCD屏上的HX8238LCD驱动器相连。通过相应借口发送控制信号,使液晶屏工作。 3、TFT LCD屏工作原理和时序
所有显示器显示图像的原理都是从上到下,从左到右的。这是什么意思呢?这么说吧,一副图像可以看做是一个矩形,由很多排列整齐的点一行一行组成,这些点称之为像素。那么这幅图在LCD上的显示原理就是: 显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上用时间线表示就为VCLK,我们称之为像素时钟信号;
当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为1 Line;接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换;如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。因此,这一行一行的显示在时间线上看,就是时序图上的HSYNC;然而,LCD的显示并不是对一副图像快速的显示一下,为了持续和稳定的在LCD上显示,就需要切换到另一幅图上(另一幅图可以和上一副图一样或者不一样,目的只是为了将图像持续的显示在LCD上)。那么这一副一副的图像就称之为帧,在时序图上就表示为1 Frame,因此从时序图上可以看出1 Line只
是1 Frame中的一行;同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么LCD整个显示的过程在时间线上看,就可表示为时序图上的VSYNC。
VBPD(ver tical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin;实际值= VBPD+1
VFPD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin;实际值= VFPD+1
VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len;实际值= VSPW+1
HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin;实际值= HBPD+1
HFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin;实际值= HFPD+1
HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len;实际值= HSPW+1
*注意这里的VBPD VFPD VSPW HBPD HFPD HSPW的值要根据LCD驱动器的参数时序来设置
|