LCD驱动分析(一):时序的分析

LCD驱动分析(一):时序的分析

第一次调试lcd驱动的话是不是对下面的结构有点陌生,不知道那些值是如何得来的,当然我就属于其中的一个



static struct s3cfb_lcd lte480wv = {
.width = 1024,//800,
.height = 600,//480,
.bpp = 24,//24,//32,
.freq = 45,//45,//60

.timing = { //这里主要会影响图像在LCD上显示的位置,偏移啥的
.h_fp = 160,//210,//8,
.h_bp = 160,//46,//13,
.h_sw = 16, // 3
.v_fp = 12,//12,//15,//22, liao
.v_fpe = 0,/*1,//0,*/
.v_bp = 23,//22, liao
.v_bpe = 0,/*1,//0,*/
.v_sw = 2,//
},

.polarity = { //这几个参数挺重要的,判断你极性是否要反转(0--normal,1---inverted)
.rise_vclk = 0,
.inv_hsync = 1,
.inv_vsync = 1,
.inv_vden = 0,
},
};

好吧,言归正传,首先有必要理解几个定义:



一般TFT型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文档的时序图就可以完全判断出来了


一般TFT型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屏的时序图:

http://blog.chinaunix.net/attachment/201206/10/24666775_13392917771pxD.jpg


再来看屏厂的提供的时序图

看上面的介绍应该知道需要反转HSYNC,VSYNC,VCLK信号输出,这样才能输出满足lcd所需要的时序图

 

再来看看timing这个结构体如何配置,如果提供下面这个参数就很好确定相关的数值了


h_fp  = (horizontal total time)- 1024

f_sw  =  (horizontal total time)- 1024 - h_fp    

 

当然,如果没有上面的介绍,其实也是可以通过时序图来得到的,不过限于篇幅的原因在这里就介绍了,有需要的话可以联系我[email protected]




你可能感兴趣的:(Linux驱动)