一、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 。
三、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模组手册,得到相关的时序。 注意各个引脚以及各个寄存器的作用。 |
联系客服