LCD硬件分析
项目使用3.5” TFT-LCD并且支持触摸控制。LCD的硬件可从几个方面学习:1)查看LCD的硬件连线。2)查看数据手册了解寄存器的控制。3)查看LCD DATASHEET了解硬件操作
1)LCD硬件连线
在图中有33个引脚,22根数据引脚和9根控制引脚。
LCD的工作原理:像素点是从左至右,从上至下逐个显示,LCD控制寄存器会从从内存中的framebuffer通过24位数据引脚写到LCD显示屏,同时会有VCLK,VLINE,VFRAME同步信号控制当像素当最右边会跳转到下一行,当以一帧完成会跳转到第一行第一列。
不同的LCD生产厂商对这些信号的名字有不同的叫法:
Ⅰ.VFRAME/VSYNC/STV:帧同步信号(STN)/垂直同步信号(TFT)/SEC TFT信号
帧同步信号的脉冲信号有效时表示新的一帧开始了,也就是新的画面出现了。即跳到最上边。
Ⅱ.VLINE/HSYNC/CPV:行同步信号/水平同步信号/ SEC TFT信号
行同步信号的脉冲信号有效时表示新的一行开始了。即跳到最左边。
Ⅲ.VCLK/LCD_HCLK : 像素时钟信号
LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿被LCD驱动器采样。
Ⅳ.VM/VDEN/TP :数据使能信号
控制像素的点的显示或熄灭。
Ⅴ.LEND/STH :行结束信号
Ⅵ.PWREN:电源使能信号
为了配置以上6种控制信号需要设置与其高度相关的时间参数,设置到哪里?就在S3C2410 LCD控制器中,在后面看手册时会分析。
TSXM,TSXP,TSYM,TSYP 四个引脚为控制触摸屏的功能引脚,会在分析触摸屏时再分析。
2)看s3c2410中LCD寄存器
LCD控制器由REGBANK, LCDCDMA,VIDPRCS, TIMEGEN, and LPC3600几个部分组成。
REGBANK: 有17个寄存器和256*16的调色板配置LCD控制器
LCDCDMA: 是一个专用的DMA,它可以自动从内存的framebuffer区域读取视频数据传给LCD驱动,通过使用这个特殊的DMA,这个视频数据能够不在CPU参入下显示在显示屏上。
注:DMA是一种无需CPU参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提高系统的吞吐量,DMA通常与硬件体系结构特别是外设的总线技术紧密相连。
解决由于DMA导致的cache的一致性问题的最简单的解决办法就是直接禁止DMA目标的地址范围内内存的cache功能,当然这将牺牲性能但却更可靠。
VIDPRCS:把LCDCDAM接收到的数据转换成合适的格式,通过VD[23:0]端口发送到LCD。
TIMEGEN: 由可编程逻辑组成以支持各种常见的LCD驱动器的定时和速率界面的
不要求。TIMEGEN模块产生帧同步,行同步,像素时钟,数据使能等信号。
当我们清楚了这些模块的功能,我们来看怎么操作硬件,对应我们用的TFT LCD屏幕,我们主要了解TFT 的操作:
上面已知TIMEGEN模块为外部LCD驱动器产生了控制信号,例如帧同步,行同步,
像素时钟,数据使能,行结束控制信号。这些控制信号与存放在REGBANK中的LCD1/2/3/4/5
寄存器相关。基于这些存放在REGBANK的寄存器的可编程的配置信息,TIMEGEN产生适合于各种各样的LCD驱动器的可编程的控制信号。
S3C2410 LCD控制器支持1,2,4,8bpp(bit per pixel)带调色板和16,24bpp不带调色板的显示。在这次项目设置为24bpp真彩显示,我们查看24bpp的数据存放格式:
当设置为24bpp,通过设置LCDCON5的[12]位来选择不同的数据存放顺序。当BSWP = 0, HWSWP = 0, BPP24BL = 0,高8为无效,蓝色[0:7],绿色[8:15],红色[16:23]。BSWP = 0, HWSWP = 0, BPP24BL = 1,低8位无效,蓝色[8:15],绿色[16:23],红色[24:31]。当应用层中显示视频时就需要根据内核设置来数据在framebuffer中的存放。
LCD 通用的时序图
图中显示一帧图片的时序过程,当VSYNC信号高电平表示一帧图像的开始,但VDEN像素有效信号会有VSPW+1,VBPD+1的延迟后才到达高电平,像素点才真正在LCD上显示出来,同样在VDEN无效后有VFPD+1的延迟后才到达下一个VSYNC信号。对HSYNC行同步信号是同样的,当HSYNC信号高电平有效时,会经过HSPW+1,HBPD+1的延迟后像素点才能显示在LCD屏,当下一个VDEN信号无效后会经过HFPD+1的延迟才有下一个HSYNC信号到来。
总的来说,在一帧图片的开始和下一个帧信号到来后会有一段时间延迟,在这段时间的像素点显示到LCD上无效,对一行的数据有同样的道理。所以我们要使图像正常的显示在LCD上,我们需要设置这些延迟的值到控制寄存器中。
VSPW: 垂直同步脉冲宽度
HSPW: 水平同步脉冲宽度
VBPD: 上边沿 帧回扫延时
VFPD: 下边沿 帧前扫延时
HBPD: 左边沿 行回扫延时
HFPD: 左边沿 行前扫延时
BPP: 像素24bpp or 16bpp
LINEVAL * HOZVAL :320*240..分辨率
但是这些值到底要设置为多少呢?这需要我们看对应LCD的DATESHEET。
3)看LCD的DATESHEET
这里是看WXCAT35-TG3#001F的datasheet,我们查看datasheet的目的就是为了设置时序图的中的参数,所以我们要找到datasheet中的时序图,看厂商给出的参考值然后设置。
在datasheet中的时序图:
通过查看上表格数据可得出需要设置LCDCON0~5的中数值。
HSPW+1 = Thp = 30 ; HSPW = 29
HBPD+1 = Thb = 38 ; HBPD =37
HFPD+1 = Thf = 20 ; HFPD =19
VSPW+1 = Tvp =3 ; VSPW =2
VBPD+1 = Tvd =15 ; VBPD =14
VFPD+1 = Tvf =12 ; VFPD=11
LINEVAL+1 = Thd = 320 ;LINEVAL = 219
HOZVAL+1 = Tvf = 240 ;HOZVAL = 239
通过看硬件原理和手册我们就知道了硬件需要设置什么值才能使LCD正常显示,当看代码时主要注意这些方面的设置,更加容易理解代码和找到代码的重要语句。