本文共 3285 字,大约阅读时间需要 10 分钟。
发布: 2009-8-15 12:20
本文所用的是东华TFT液晶屏(WXCAT35),配置为常用的16BPP(5:6:5)。
先看一下TFT屏的操作图:
图一
外部引脚信号:
VSYNC:
HSYNC:
VDEN:数据使能信号。
VD[23:0] : LCD像素数据输出端口。
VCLK:像素时钟信号。
参数:
VSPW:垂直同步信号的脉宽,单位为1行(Line)的时间。
VFPD:
VBPD:
LINEVAL
HBPD:水平同步信号的后肩,单位为1VCLK的时间。
HFPD:水平同步信号的前肩,单位为1VCLK的时间。
HSPW:水平同步信号的脉宽,单位为1VCLK的时间。
HOZVAL:水平显示尺寸-1,即屏列宽-1。
由上图可知:
扫描一帧所需的时间:
=((VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1))个行时间。
扫描一行所所需的时间:
=
而一个VCLK时间由LCD寄存器LCDCON1内的CLKVAL决定:
=HCLK/[2*(CLKVAL+1)]
因此扫描一帧所需的时间:
T=[(VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1)]* [(HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1)]* HCLK/[2*(CLKVAL+1)]
即帧频率为:1/T
注意:以上的时序图为一般TFT的时序图。实际TFT对应的时序图时序可能不一样(比如极性,符号等)。下文中详述。
图2东华TFT型LCD(WXCAT35)时序图
//2440A寄存器参数
#define MVAL
#define MVAL_USED
#define INVVDEN
#define BSWP
#define HWSWP
#define PNRMODE
#define BPPMODE
//东华屏参数
#define VBPD
#define VFPD
#define VSPW
#define HBPD
#define HFPD
#define HSPW
#define CLKVAL_TFT
//屏大小
#define LCD_XSIZE_TFT
#define LCD_YSIZE_TFT
#define SCR_XSIZE_TFT
#define SCR_YSIZE_TFT
#define HOZVAL_TFT
#define LINEVAL_TFT
以上有关东华屏参数设置,在PDF中如下所示:
我的板子设置HCLK=100M因此CLKVAL= int(HCLK/(VCLK*2)-1),其中VCLK即上图的DCLK=6.4M, CLKVAL="int"(100/12.8-1)=int(6.8)=6
因此
VFRAME=HCLK/[(CLKVAL+1)x2]/{(VSPW+1+VBPD+1+LCD_YSIZE_TFT+VFPD+1)*(HSPW+1+HSPD+1+HFPD+1+LCD_XSIZE_TFT)}=64.4HZ
注意:有些液晶屏给的参数单位可能不一样,需要自己计算。
方法如下:
VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值,如图,VBPD=t3/t6=1.02 mS/31.77μs=32。
VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,
是帧数据传输后延迟时间和行同步时钟间隔宽度的比值,如图,VFPD=t5/t6=0.35 ms/31.77μs=11。
VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值。如图,VSPW=t2/t6=0.06 ms/31.77μs=2。
HBPD:确定行同步信号和行数据传输前的一段延迟时间,描述行数据传输前延迟时间内VCLK脉冲个数,如图,VBPD=t7×VCLK=1.89 μs×25MHz=47。
HFPD:确定行数据传输完成后到下一行同步信号到来的一段延迟时间,描述行数据传输后延迟时间内VCLK脉冲个数,如图,HFPD=t9×VCLK=0.94 μs×25 MHz="24"。
S3C2440A LCD配置
1.
rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;
其中:CLKVAL_TFT =
ENVID=0(关闭视屏输出,需要开启显示是设为1)。
2.
rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
3.
rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
4.
rLCDCON4=(MVAL<<8)|(HSPW);
5.
rLCDCON5 = (1<<11) | (1<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)
其中BSWP与数据存放有关见下文。
6.
volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];//全局变量
#define M5D(n)
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
7.
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
//单位为字节
8.
转载地址:http://ussci.baihongyu.com/