一、2440 LCD特点
TFT型LCD显示屏
-支持1 位、2 位、4 位和 8 位(每像素)调色板TFT显
-支持16位/像素非调色板真彩色TFT 显示
-支持24位/像素非调色板真彩色TFT 显示
-24位/像素模式下最大支持16M彩色 TFT
-支持多种屏幕尺寸
典型分辩率为 640*480、320*240、160*160 及其它多种
最大虚拟显示达4Mbytes。
虚拟显示尺寸在64K 模式下:2048×1024 及其它
二、TFT LCD 配置
1、CLKVAL,VCLK
CLKVAL在LCDCON1[17:8]中设置,这些位决定了VCLK的频率,VCLK便是LCD的操作频率。
VCLK=HCLK/((CLKVAL+1)*2)
TQ2440中FCLK设置为400M,FCLK:HCLK:PCLK=1:4:8,可知HCLK的的频率为100M,查阅LCD模组手册的操作频率,这里设置CLKVAL=6,则
VCLK=100M/((6+1)*2)=7.14M
2、SYNC 、HYNC,VDEN
VBPD、LINEVAL、VFPD、VSPW
HBPD、HOZVAL、HFPD、HSPW
VSYNC是垂直同步信号,在每进行一个帧(即一个屏)的扫描之前,该信号就有效一次,由该信号可以确定LCD的场频,即每秒屏幕刷新的次数(单位Hz)。
HSYNC是水平同步信号,在每进行一行的扫描之前,该信号就有效一次,由该信号可以确定LCD的行频,即每秒屏幕从左到右扫描一行的次数(单位Hz)。
其中VSYNC是帧同步信号,VSYNC每发出1个脉冲,就意味着新的1屏视频资料开始发送。
HSYNC为行同步信号,每个HSYNC脉冲都表明新的1行视频资料开始发送。
VDEN则用来标明视频资料的有效
在每一帧时钟信号中,还会有一些与屏显示无关的时钟出现,这就给确定行频和场频带来了一定的复杂性。如在HSYNC信号先后会有水平同步信号前肩(HFPD)和水平同步信号后肩(HBPD)出现,在VSYNC信号先后会有垂直同步信号前肩(VFPD)和垂直同步信号后肩(VBPD)出现,在这些信号时序内,不会有有效像素信号出现,另外HSYNC和VSYNC信号有效时,其电平要保持一定的时间,它们分别叫做水平同步信号脉宽HSPW和垂直同步信号脉宽VSPW,这段时间也不能有像素信号。因此计算行频和场频时,一定要包括这些信号。
关于VBPD、LINEVAL、VFPD、VSPW、HBPD、HOZVAL、 HFPD、HSPW的配置LCD手册上一般都会给出。
帧频(VSYNC频率)=1/(((VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1))*
((HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)) * (2*(CLKVAL+1)/(HCLK)) )
在TQ2440的测试程序中:
//Timing parameter for 3.5'' LCD
#define VBPD (12) //垂直同步信号的后肩
#define VFPD (4) //垂直同步信号的前肩
#define VSPW (5) //垂直同步信号的脉宽
#define HBPD (22) //水平同步信号的后肩
#define HFPD (33) //水平同步信号的前肩
#define HSPW (44) //水平同步信号的脉宽
#define HOZVAL_TFT (LCD_XSIZE_TFT-1)
#define LINEVAL_TFT (LCD_YSIZE_TFT-1)
//TFT_SIZE
#define LCD_XSIZE_TFT (320)
#define LCD_YSIZE_TFT (240)
所以帧频= 1/( ((5+1)+(12+1)+(239+1)+(4+1)) * ((5+1)+(22+1)+(33+1)+((319+1))*
(2*(6+1))/100M))
= 1/(264*380*0.14us)
= 71Hz
3、LCDBANK、LCDBASEU、LCDBASEL
OFFSIZE、PAGEWIDTH
(1)LCDBANK在LCDADDR11[29:21]中配置,存放的是显示缓存地址的A[30:22],即为显示缓存的基地址。
例1:显示缓存存放在如下:
volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
则LCDBANK=LCD_BUFFER>>22
(2)LCDBASEU在LCDADR11[20:0]中配置,显示缓存的开始地址A[21:1]。
例2:LCD_BUFFER的开始地址
#define M5D(n) ((n) & 0x1fffff) // 低21bits掩码
LCDBASEU=M5D((LCD_BUFFER)>>1); //取出A[21:1]位地址放入LCDBASEU
(3)LCDBASEL在LCDADDR2[20:0]中配置,显示缓存的结束地址A[21:1]。
LCDBASEL = ((the fame end address) >>1) + 1
= LCDBASEU +(PAGEWIDTH+OFFSIZE)*(LINEVAL+1)
例3:LCDBUFFER的结束地址.
LCD为16bitTFT,OFFSIZE=0,LINEVAL=240,PAGEWIDTH=320*16bit/16=320
LCDBASEL=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
(4)OFFSIZE:用于虚拟屏幕的偏移长度,如果我们不使用虚拟屏幕,就把它置为0 。
(5)PAGEWIDTH:定义了视口的宽,单位是半字.
三、LCD的初始化工作
#define MVAL (13)
#define MVAL_USED (0) //0=each frame 1=rate by MVAL
#define INVVDEN (1) //0=normal 1=inverted
#define BSWP (0) //Byte swap control
#define HWSWP (1) //Half word swap control
#define PNRMODE (3) // 设置为TFT屏
#define BPPMODE (12) // 设置为16bpp模式
//TFT_SIZE
#define LCD_XSIZE_TFT (320)
#define LCD_YSIZE_TFT (240)
#define SCR_XSIZE_TFT (320)
#define SCR_YSIZE_TFT (240)
#define HOZVAL_TFT (LCD_XSIZE_TFT-1)
#define LINEVAL_TFT (LCD_YSIZE_TFT-1)
//Timing parameter for 3.5'' LCD
#define VBPD (12) //垂直同步信号的后肩
#define VFPD (4) //垂直同步信号的前肩
#define VSPW (5) //垂直同步信号的脉宽
#define HBPD (22) //水平同步信号的后肩
#define HFPD (33) //水平同步信号的前肩
#define HSPW (44) //水平同步信号的脉宽
#define CLKVAL_TFT (6)
volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
rLCDCON4=(MVAL<<8)|(HSPW);
rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP);
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);
1、rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
通过CLKCAL设置VCLK
#define CLKVAL_TFT (6)
FCLK=400MHz,FCLK:HCLK:PCLK=1:4:8
HCLK=100MHz
VCLK=100MHz/((6+1)*2)=7.14MHz
设置LCD为TFT显示
设置LCD为16位TFT
视频输入和控制信号无效(ENVID),等完全配置好后再使能。
2、rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
配置VBPD,VFPD,VSPW,LINEVAL,这几个参数可以参考LCD手册
3、rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
配置HBPD,HOZVAL,HFPD,这几个参数可以参考LCD手册
4、rLCDCON4=(MVAL<<8)|(HSPW);
配置HSPW,此参数可以参考LCD手册
5、rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP);
RGB为5:6:5模式
VCLK下降沿时取数据
HSYNC,VSYNC极性反转
VD极性正常
VDEN极性正常
PWEN有效
不可字节交换
可以半字交换
6、rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
设置LCDBANK以及LCDBASEU
7rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 )
设置LCDBASEL
8、rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);
设置OFFSIZE以及PAGEWIDTH
9、
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL &= (~7) ; // Disable LPC3600
rTPAL=0; // Disable Temp Palette
Lcd_PowerEnable(0, 1);
Lcd_EnvidOnOff(1); //turn on vedio
小结:
仔细研读2440的LCD这一节,对LCD有了初步的理解,可以对TFTLCD进行相关的配置。
配置时还需参考LCD模组手册,得到相关的时序。
注意各个引脚以及各个寄存器的作用。