LCD控制器

来源:互联网 发布:炒股软件源码 编辑:程序博客网 时间:2024/05/01 15:10

LCD控制器  

S3c2440ALCD控制器配置实例


本文所用的是东华TFT液晶屏(WXCAT35,配置为常用的16BPP(5:6:5)模式。


先看一下TFT屏的操作时序图:


点击看大图


图一 一般TFTLCD时序图


外部引脚信号:


VSYNC: 垂直同步信号,表示扫描1帧的开始。


HSYNC: 水平同步信号,表示扫描1行的开始。


VDEN:数据使能信号。


VD[23:0] : LCD像素数据输出端口。


VCLK:像素时钟信号。


寄存器参数:


VSPW:垂直同步信号的脉宽,单位为1行(Line)的时间


VFPD: 垂直同步信号的前肩,单位为1行(Line)的时间


VBPD: 垂直同步信号的后肩,单位为1行(Line)的时间


LINEVAL :垂直显示尺寸-1,即屏行宽-1


HBPD:水平同步信号的后肩,单位为1VCLK时间


HFPD:水平同步信号的前肩,单位为1VCLK时间


HSPW:水平同步信号的脉宽,单位为1VCLK时间


HOZVAL:水平显示尺寸-1,即屏列宽-1


由上图可知:


扫描一帧所需的时间:


=((VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1))时间。


扫描一行所所需的时间:


= ((HSPW+1)+(HSPD+1+(HFPD+1+ (HOZVAL+1))VCLK时间。


而一个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东华TFTLCD(WXCAT35)时序图


//2440A寄存器参数


#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模式


//东华屏参数


#define VBPD (3-1) //12 垂直同步信号的后肩 参数见 东华pdf


#define VFPD (14-1) //4 垂直同步信号的前肩


#define VSPW (15-1) //5垂直同步信号的脉宽


#define HBPD (38-1) //(22)水平同步信号的后肩


#define HFPD (20-1) //(33)水平同步信号的前肩


#define HSPW (30-1) //(44)水平同步信号的脉宽


#define CLKVAL_TFT (6)


//屏大小


#define LCD_XSIZE_TFT (240)//屏实际列数


#define LCD_YSIZE_TFT (320)// 屏实际行数


#define SCR_XSIZE_TFT (240) //虚拟屏列数


#define SCR_YSIZE_TFT (320) //虚拟屏行数


#define HOZVAL_TFT (LCD_XSIZE_TFT-1)


#define LINEVAL_TFT (LCD_YSIZE_TFT-1)


以上有关东华屏参数设置,在PDF中如下所示:



点击看大图


我的板子设置HCLK=100M因此CLKVAL= int(HCLK/(VCLK*2)-1),其中VCLK即上图的DCLK=6.4M, CLKVAL="int"(100/12.8-1)=int(6.8)=6


因此 VCLK = HCLK/[(CLKVAL+1)x2]= 100/2*(6+1)= 7.14MHz


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



注意:有些液晶屏给的参数单位可能不一样,需要自己计算。



LCD控制器 - starjj - starjj的博客


方法如下:


VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值,如图,VBPD=t3t6=1.02 mS31.77μs=32


VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,


是帧数据传输后延迟时间和行同步时钟间隔宽度的比值,如图,VFPD=t5t6=0.35 ms31.77μs=11


VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值。如图,VSPW=t2t6=0.06 ms31.77μs=2


HBPD:确定行同步信号和行数据传输前的一段延迟时间,描述行数据传输前延迟时间内VCLK脉冲个数,如图,VBPD=t7×VCLK=1.89 μs×25MHz=47


HFPD:确定行数据传输完成后到下一行同步信号到来的一段延迟时间,描述行数据传输后延迟时间内VCLK脉冲个数,如图,HFPD=t9×VCLK=0.94 μs×25 MHz="24"


HSPW:确定行同步时钟脉冲宽度。描述行同步脉冲宽度时间内VCLK脉冲个数,如图,HSPW=3.77μs×25 MHz="94"





S3C2440A LCD控制器配置


1. LCDCON1寄存器



点击看大图


rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;


其中:CLKVAL_TFT = 6MMODE = MVAL_USED = 0PNRMODE=3BPPMODE=12


ENVID=0(关闭视屏输出,需要开启显示是设为1)


2. LCDCON2寄存器



点击看大图


rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW); 相关值见上文宏定义


3. LCDCON3寄存器



点击看大图


rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD); 相关值见上文宏定义


4. LCDCON4寄存器



点击看大图


rLCDCON4=(MVAL<<8)|(HSPW); 相关值见上文宏定义



5. LCDCON5寄存器



点击看大图


rLCDCON5 = (1<<11) | (1<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP);关于信号的极性 图二(东华TFTLCD(WXCAT35)时序图)


其中BSWP与数据存放有关见下文。


6. LCDSADDR1寄存器



点击看大图


volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];//全局变量


#define M5D(n) ((n) & 0x1fffff) // To get lower 21bits



rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);



7. LCDSADDR2寄存器



点击看大图


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


//单位为字节 一个点16bit=2字节



8. LCDSADDR3寄存器



点击看大图


rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);


// 1=*16bit/半字=16/16



LCD初始化程序:


void Lcd_Init(void)


{


//引脚功能初始化


rGPCUP = 0x00000000;


rGPCCON = 0xaaaa02a9;



rGPDUP = 0x00000000;


rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]


rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;


// TFT LCD panel,16bpp TFT,ENVID=off(Disable the video output and the LCD control signal)


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


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


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


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


//5:6:5


rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);


rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );//单位为字节一个点16bit=2字节


rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);// 1=*16bit/半字=16/16


rLCDINTMSK|=(3); // MASK LCD Sub Interrupt


rTCONSEL &= (~7) ; // Disable LPC3480


rTPAL=0; // Disable Temp Palette


}



16BPP模式特点:


内存数据格式:



点击看大图






点击看大图



点击看大图



数据引脚输出:没有用到的引脚可用作GPIO



点击看大图


系统结构图:




点击看大图


要显示图像,只要向LCD_BUFFER[]先入像素数据(R(5):G(6):B(5))LCD控制器会自动通过DMA读取数据送往TFT LCD显示。


这里介绍一个Bmp2RGB.exe,次程序可将bmp图转换为RGB(5:6:5)格式的c格式的数组。


LCD控制器 - starjj - starjj的博客


Bmp2RGB下载:



http://space.ednchina.com/Upload/2009/7/22/0002eaa2-bb78-421a-8985-cd118df51d6f.rar

0 0
原创粉丝点击