WINCE基于AT050TN22屏的时序描述
********************************LoongEmbedded*****************
作者:LoongEmbedded(kandi)
时间:2011.06.4
类别:WINCE驱动开发
********************************LoongEmbedded*****************
根据AT050TN22屏时序的描述,可以知道
VBPD=10
VFPD=31
VSPW=1
LIINEVAL=479
HBPD=133
VFPD=15
VSPW=9
HOZVAL=639
1.像素时钟CLK时序的确定,用示波器测出的时序图如下
图1
可以知道CLK一个周期的时间是39ns,频率为25.6MHz左右,而AT050TN22屏对此参数的描述见下图
图2
结合图1和图2可知LCD控制器为AT050TN22屏配置的时钟CLK符合其要求。那么我们是通过如何配置得出这个CLK的呢?我们先来看看系统控制器部分是如何提供时钟给LCD控制器的
图3
下图是eboot中的startup.s文件中使能APLL、MPLL和EPLL为时钟输出的代码
图4
下图是对CLK_DIV0寄存器第4位的描述
图5
根据图5可知DOUTmpll=MOUTmpll/(MPLL_RATIO+1),而我们就是选择DOUTmpll作为LCD控制器的时钟源的,见CLK_SRC寄存器的相关描述部分
图6
对CLK_SRC[27:26]的配置是在eboot中调用的InitializeDisplay()函数中配置的,当然了,CLK_SRC相关位在nboot,eboot,oal或者驱动中都可以设置,这需要根据相关位的功能来定。在结合LCD控制器中VIDCON0寄存器的相关描述
图7
结合图5、6和7,我们可以推算出LCD屏像素时钟VCLK=DOUTmpll/(CLKVAL+1)= MOUTmpll/((MPLL_RATIO+1)*( CLKVAL+1)-à(1),我们LCD控制器部分下面的公式
图8
再结合图8,我们可以推算出VCLK= { (VSPW+1) + (VBPD+1) + (LIINEVAL + 1) + (VFPD+1) } x{(HSPW+1) + (HBPD +1)+ (HFPD+1) + (HOZVAL + 1) } x (Frame Rate) =VSYNC x HSYNC x FrameRate=25.6MHZà(2),结合(1)和(2)可以推算出CLKVAL=MOUTmpll/(( MPLL_RATIO+1)*( VSYNC x HSYNC x FrameRate))-1,而VSYNC= VBPD+ VFPD+ VSPW+ Height=525,HSYNC= HBPD+HFPD+HSPW+Width=800,FrameRate=60(一般为60),MPLL_RATIO=1,MOUTmpll=266MHz,可以算出CLKVAL=4。如果我们要输出的VCLK的时钟周期为39ns,也就是频率为25.6MHz的VCLK时钟信号,结合公式(2),那么有256.MHZ= VSYNC x HSYNC x FrameRate,这样我就可以结合LCD屏对VSYNC、HSYNC和VCLK时序的要求来调整VSYNC、HSYNC和FrameRate的值了。
2.用示波器测试HSYNC时序图如下:
图9
而我们知道HSYNC=(HSPW+1) + (HBPD +1)+ (HFPD+1) + (HOZVAL + 1)=800*VCLK=800*39ns=31.2us,而图中显示的是30.1us,这应该是由我测试时候的误差引起的。
3. 用示波器测试VSYNC时序图如下:
图10
而我们知道VSYNC=(VSPW+1) + (VBPD+1) + (LIINEVAL + 1) + (VFPD+1) =525*HSYNC=525*31.2us=16.380ms,而图中显示的是15.85ms,这应该是由我测试时候的误差引起的。
4.DE引脚时序
AT050TN22屏的相关时序如下,可知DE和HSYNC的周期是一致的,比较图9和图12可知,但占空比不一样。
图11
用示波器测试DE时序图如下: