s3c2440 与LCD的浅析

来源:互联网 发布:七月十五插件数据下载 编辑:程序博客网 时间:2024/05/28 14:57

一、信号分析

 VFRAME/VSYNC:LCD控制器和LCD驱动器之间的帧同步信号。该信号告诉LCD屏新一帧开始了。LCD控制器在一帧显示完成后立即插入一个VFRAME信号,开始新一帧的显示。

VLINE/HSYNC:LCD控制器和LCD驱动器之间的行同步脉冲信号。该信号用于LCD驱动器将水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整行数据移人LCD驱动器后,插入一个VLINE信号。

VCLK:LCD控制器和LCD驱动器之间的像素时钟信号。LCD控制在VCLK的上升沿处送出数据,LCD驱动器在VCLK的下降沿处采样。

VM/VDEN:LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示。VM信号能够和每帧同步,也能够和可变数据的VLINE信号同步。

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

LCD_PWREN:LCD使能信号。如果外接的LCD有开/关等类似管脚的话,可以与这个信号连接。这个信号的输出值受ENVID控制,即LCDCON1的第0位。

    

以下以东华4.3寸屏(TFT)屏为例: 

二、LCD可编程寄存器介绍

1.LCDCON1

LINECNT:行计数器的状态位。只读,不用配置。

CLKVAL:确定VCLK频率的参数。

注意:VCLK的公式为VCLK=HCLK/[(CLKVAL+1)×2],单位为Hz。笔者所用的硬件系统HCLK=100 MHz,480×272的显示屏需要VCLK=10 MHz,故需配置CLKVAL=4。

MMODE:确定VM的改变速度。

注:为0时,每帧变化模式;为1时,由LCDCON4的MVAL决定

PNRMODE:确定扫描方式。选择PNRMODE=0x3,为TFT LCD面板扫描模式。

BPPMODE:确定BPP(每像素位数)模式。在此选择BPPMODE=0xC,为TFT 16位模式。

ENVID:数据输出和逻辑信号使能控制位。选择ENVID=1,为允许数据输出和逻辑控制。

2、LCDCON2

VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值。

LINEVAL:确定显示的垂直方向尺寸。公式:LINEVAL=YSIZE-1=479。

VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,是帧数据传输后延迟时间和行同步时钟间隔宽度的比值。

VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值。

3、 LCDCON3

HBPD:确定行同步信号和行数据传输前的一段延迟时间,描述行数据传输前延迟时间内VCLK脉冲个数。

HOZAL:确定显示的水平方向尺寸。公式HOZAL=XSIZE-1。

HFPD:确定行数据传输完成后到下一行同步信号到来的一段延迟时间,描述行数据传输后延迟时间内VCLK脉冲个数。

4、 LCDCON4寄存器

HSPW:确定行同步时钟脉冲宽度。描述行同步脉冲宽度时间内VCLK脉冲个数。

5、LCDCON5寄存器

VSTATUS:垂直方向状态。只读,不用配置。

HSTATUS:水平方向状态。只读,不用配置。

BPP24BL:确定显示数据存储格式。此处配置BPP24BL=0x0,为小端模式存放。

FRM565:确定16位数据输出格式。此处配置FRM565=0x1,为5:6:5格式输出。

INVVCLK:确定VCLK脉冲有效边沿极性。如INVVCLK=0xl,VCLK上升沿到来时数据传输开始。

INVVLlNE:确定HSYNC脉冲的极性。

INVVFRAME:确定VSYNC脉冲的极性。

INVVD:确定数据输出的脉冲极性。

INVVDEN:确定VDEN信号极性。

INVPWREN:确定PWREN信号极性。

INVLEND:确定LEND信号极性。

PWREN:PWREN信号输出允许。

ENLEND:LEND输出信号允许。

BSWP:字节交换控制位。如配置BSWP=0x0,禁止字节交换。

HWSWP:半字交换控制位。如配置HWSWP=0xl,使能半字节交换。

帧缓冲是Linux为显示设备提供的一个接口,它把一些显示设备描述成一个缓冲区,允许应用程序通过FrameBuffer定义好的接口访问这些图形设备,从而不用去关心具体的硬件细节。对于帧缓冲设备而言,只要在显示缓冲区与显示点对应的区域写入颜色值,对应的颜色就会自动的在屏幕上显示。

 

6.LCDSADDR1:帧缓存开始地址寄存器

 

LCDBANK:存储显存地址的[30:22]位

LCDBASEU:存储显存地址的[21:1]位

 

7.LCDSADDR2:帧缓存开始地址寄存器

 

LCDBASEL:分为双屏幕扫描和单屏幕扫描模式

 

用来存储显存结束地址

 

8.LCDSADDR3:帧缓存开始地址寄存器

 

OFFSIZE:虚拟屏幕偏移的大小

PAGEWIDTH:虚拟屏幕的页的大小

 

9.REDLUT:红色查找表寄存器

 

10.GREENLUT:绿色查找表寄存器

 

11.BLUELUT:红色查找表寄存器

 

12.DITHMODE:抖动模式寄存器

 

13.TPAL:临时调色板寄存器

TPLEN: 0无效, 1有效

 

14.LCDINTPND:中断挂起寄存器

 

15.LCDSRCPND:中断源挂起寄存器

 

16.LCDINTMSK:中断屏蔽寄存器

 

17.LPCSEL:LPC3600控制寄存器

三、应用介绍(以东华4.3寸屏480*272为例)

1.LCD的初始化

 

GPCUP  = 0x00000000;//pull up c's all ports

   GPCCON = 0xaaaa02a9; VD[7:0] and control signals

   GPDUP  = 0x00000000;

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

 

   LCDCON1=(4<<8)|(0<<7)|(3<<5)|(12<<1)|0;

   //HCLK=100MHz,VCLK = (HCLK/[(4+1)/2]) = 20MHz

// TFT:each frame; TFT LCD panel 16bpp; ENVID = 0;

 

   LCDCON2=(2<<24)|(LINEVAL<<14)|(4<<6)|8;

   //LINEVAL=LCD_YSIZE-1 = 272-1;

 

   LCDCON3=(10<<19)|(HOZVAL<<8)|19;

   //HOZVAL=LCD_XSIZE-1 = 480-1;

   LCDCON4=(MVAL<<8)|30;

   //MVAL:当MMODE=1时,VM信号变化的速度

 

  LCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(0<<1) | (1);

//5:6:5模式,数据下降沿有效,HSYNC极性反转,VSYNC极性反转,VD正常,VDEN正常,禁止字节交换,使能半字交换,LCD_PWEN使能;

注:HSYNC与VSYNC极性反转是因为CPU发出的是正脉冲,而LCD需要的是负脉冲

 

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

//LCD_BUFFER为显存数组的首地址

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

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

//SCR_XISIZE_TFT与LCD_YSIZE代表屏的尺寸(480*272)

   LCDSADDR3=((0)<<11)|(480);

//虚拟屏的设置

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

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

   TPAL=0; // 临时调色板无效

相关数据选择依据:

东华4.3寸屏资料:

由资料,得出

HBPD: 最小为2  ,   TQ选择10

HFPD: 最小为2  ,   TQ选择 19

HSPW: 最小为2,典型值为41,  TQ选择30

 

VBPD: 最小为1, 典型值为2,  TQ选择 2

VFPD: 最小为1, 典型值为2,   TQ选择4

VSPW: 最小为1, 典型值为10,  TQ选择8

 

VSYNC的频率即为帧频,它与LCDCON1/2/3/4均有关,计算公式如下:
FrameRate=1/{[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]×[(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)]×[2×(CLKVAL+1)/(HCLK)]}

注:LINEVAL=LCD_YSIZE-1,HOZVAL=LCD_XSIZE-1,CLKVAL设置为4,HCLK=100MHz,可得出帧频=64Hz,满足60Hz---90Hz

0 0
原创粉丝点击