转载http://blog.chinaunix.net/uid-24666775-id-3237969.html
第一次调试lcd驱动的话是不是对下面的结构有点陌生,不知道那些值是如何得来的,当然我就属于其中的一个
点击(此处)折叠或打开
图1
我们先来理解下面引脚有寄存器中相关参数的意义吧
外部引脚信号:
VSYNC: 帧同步信号,表示扫描1帧的开始,一帧也就是LCD显示的一个画面。
HSYNC: 行同步信号,表示扫描1行的开始。
VDEN:数据使能信号。
VD[23:0] : LCD像素数据输出端口。
VCLK:像素时钟信号。
寄存器参数:
VSPW:帧同步信号的脉宽,单位为1行(Line)的时间。
VFPD: 帧同步信号的前肩,单位为1行(Line)的时间。
VBPD: 帧同步信号的后肩,单位为1行(Line)的时间。
LINEVAL :帧显示尺寸-1,即屏行宽-1,对于800*480分配率的LCD屏,那么LINEVAL=480-1=479,请记住,是屏行宽,也就是LCD屏显示一帧数据所需要的行的数目。
HBPD:行同步信号的后肩,单位为1VCLK的时间。
HFPD:行同步信号的前肩,单位为1VCLK的时间。
HSPW:行同步信号的脉宽,单位为1VCLK的时间。
HOZVAL:行显示尺寸-1,即屏列宽-1,对于800*480分配率的LCD屏,那么HOZVAL=800-1=799,请记住,是屏列宽,也就是LCD屏显示一行数据所需要的像素(pixel)的数目。
由图1可知:
扫描一帧所需的时间:
=((VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1))个行时间。
扫描一行所所需的时间:
= ((HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1))个VCLK时间。
而一个VCLK时间由LCD寄存器VIDCON0内的CLKVAL决定:
=HCLK/(CLKVAL+1) ------>这个公式是S3C2443的LCD控制器的,其他CPU的不一定一样
因此扫描一帧所需的时间:
T=[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]*[(HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1)]* HCLK/ (CLKVAL+1)
即帧频率为:1/T
1.首先来判断 HSYNC,VSYNC,VCLK, VDEN信号是否需要反转
这个其实还挺好判断的,主要就是通过你主控的介绍lcd的时序图,在结合你屏厂的spec文档的时序图就可以完全判断出来了
先看LCD控制器默认情况下送出来的TFT LCD屏的时序图:
再来看屏厂的提供的时序图
看上面的介绍应该知道需要反转HSYNC,VSYNC,VCLK信号输出,这样才能输出满足lcd所需要的时序图
再来看看timing这个结构体如何配置,如果提供下面这个参数就很好确定相关的数值了
h_fp = (horizontal total time)- 1024
f_sw = (horizontal total time)- 1024 - h_fp