分享

s3c2440A LCD控制器 配置

 lifei_szdz 2012-05-31

一、2440 LCD特点

TFTLCD显示屏

-支持位、位、位和位(每像素)调色板TFT

-支持16/像素非调色板真彩色TFT 显示

-支持24/像素非调色板真彩色TFT 显示

24/像素模式下最大支持16M彩色 TFT

-支持多种屏幕尺寸

典型分辩率为 640*480320*240160*160 及其它多种

最大虚拟显示达4Mbytes

虚拟显示尺寸在64K 模式下:2048×1024 及其它

二、TFT LCD 配置

1CLKVAL,VCLK

CLKVALLCDCON1[17:8]中设置,这些位决定了VCLK的频率,VCLK便是LCD的操作频率。

VCLK=HCLK/((CLKVAL+1)*2)

TQ2440FCLK设置为400M,FCLK:HCLK:PCLK=1:4:8,可知HCLK的的频率为100M,查阅LCD模组手册的操作频率,这里设置CLKVAL=6,则

VCLK=100M/((6+1)*2)=7.14M

2SYNC HYNC,VDEN

VBPDLINEVALVFPDVSPW

HBPDHOZVALHFPDHSPW

VSYNC是垂直同步信号,在每进行一个帧(即一个屏)的扫描之前,该信号就有效一次,由该信号可以确定LCD的场频,即每秒屏幕刷新的次数(单位Hz)。

HSYNC是水平同步信号,在每进行一行的扫描之前,该信号就有效一次,由该信号可以确定LCD的行频,即每秒屏幕从左到右扫描一行的次数(单位Hz)。

其中VSYNC是帧同步信号,VSYNC每发出1个脉冲,就意味着新的1屏视频资料开始发送。

HSYNC为行同步信号,每个HSYNC脉冲都表明新的1行视频资料开始发送。

VDEN则用来标明视频资料的有效

 

在每一帧时钟信号中,还会有一些与屏显示无关的时钟出现,这就给确定行频和场频带来了一定的复杂性。如在HSYNC信号先后会有水平同步信号前肩(HFPD水平同步信号后肩(HBPD出现,在VSYNC信号先后会有垂直同步信号前肩(VFPD垂直同步信号后肩(VBPD出现,在这些信号时序内,不会有有效像素信号出现,另外HSYNCVSYNC信号有效时,其电平要保持一定的时间,它们分别叫做水平同步信号脉宽HSPW垂直同步信号脉宽VSPW,这段时间也不能有像素信号。因此计算行频和场频时,一定要包括这些信号。

关于VBPDLINEVALVFPDVSPWHBPDHOZVAL HFPDHSPW的配置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

 

3LCDBANKLCDBASEULCDBASEL

OFFSIZEPAGEWIDTH

(1)LCDBANKLCDADDR11[29:21]中配置,存放的是显示缓存地址的A[30:22],即为显示缓存的基地址。

1:显示缓存存放在如下:

volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];

LCDBANK=LCD_BUFFER>>22

 

(2)LCDBASEULCDADR11[20:0]中配置,显示缓存的开始地址A[21:1]

2LCD_BUFFER的开始地址

#define M5D(n)                          ((n) & 0x1fffff)     // 21bits掩码

LCDBASEU=M5D((LCD_BUFFER)>>1);   //取出A[21:1]位地址放入LCDBASEU

 

 

 

(3)LCDBASELLCDADDR2[20:0]中配置,显示缓存的结束地址A[21:1]

LCDBASEL = ((the fame end address) >>1) + 1

= LCDBASEU +(PAGEWIDTH+OFFSIZE)*(LINEVAL+1)

3LCDBUFFER的结束地址.

LCD16bitTFT,OFFSIZE=0,LINEVAL=240,PAGEWIDTH=320*16bit/16=320

LCDBASEL=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );

 

(4)OFFSIZE:用于虚拟屏幕的偏移长度,如果我们不使用虚拟屏幕,就把它置为
(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);

 

 

1rLCDCON1=(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

设置LCDTFT显示

设置LCD16TFT

视频输入和控制信号无效(ENVID),等完全配置好后再使能。

2rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);

配置VBPD,VFPD,VSPWLINEVAL,这几个参数可以参考LCD手册

3rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);

配置HBPD,HOZVAL,HFPD,这几个参数可以参考LCD手册

4rLCDCON4=(MVAL<<8)|(HSPW);

配置HSPW,此参数可以参考LCD手册

5rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(BSWP<<1) | (HWSWP);

RGB5:6:5模式

VCLK下降沿时取数据

HSYNC,VSYNC极性反转

VD极性正常

VDEN极性正常

PWEN有效

不可字节交换

可以半字交换

 

6rLCDSADDR1=(((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

8rLCDSADDR3=(((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

 

小结:

仔细研读2440LCD这一节,对LCD有了初步的理解,可以对TFTLCD进行相关的配置。

配置时还需参考LCD模组手册,得到相关的时序。

注意各个引脚以及各个寄存器的作用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多