锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

S3C2440的LCD控制

时间:2022-08-20 06:00:01 板线连接器s3b

LCD ( Liquid Crystal Display 液晶显示器。LCD 液晶盒放置在两个平行玻璃基板中,下基板玻璃设置TFT(薄膜晶体管)通过在基板玻璃上设置彩色滤光片TFT上部信号和电压的变化可以控制液晶分子的旋转方向,从而控制每个像素点的偏振光出射。现在LCD已经替代CRT成为主流,价格大幅下跌,并得到充分普及。

s3c2440通过lcd显示图像存在于2440内部lcd结构图如下:

在这里插入图片描述

其中,REABANK一些寄存器组主要包括17个设置参数和256个x16调色板内存,每个寄存器的作用将在下面逐一展开;LCDCDMA是供LCD专用的DMA通道用于获取总线上的图像数据;TIMEGEN和LPC3600用来产生LCD控制时序,VIDRCS,将DMA获得的数据以设定的格式传输到LCD。LPC3600和LCC3600为三星公司生产的lcd,如果不使用三星生产的话lcd,需要禁止LPC3600和LCC3600。

数据手册给出了两种类型的数据lcd,一种是STN(Super Twisted Nematic)lcd,这里就不介绍了,一个是TFT LCD这里只介绍TFT LCD。

在介绍LCD在显示之前,首先介绍LCD显示的几个重要的名词,首先看图:

在图片中,它实际上是整个图片的总结。其中,深蓝色部分为实际显示部分,其余部分为非显示部分,但非显示部分为LCD也是必须的。如图所示,箭头部分,LCD它按照从上到下、从左到右的顺序显示。图中HSYNC和VSYNC它是一个跳转信号,在每一行结束,下一行开始时,会产生一个HSYNC当一张图片(帧)显示信号并显示下一张图片时,它会发出VSYNC信号。

值得注意的是,除了深蓝色部分外,周围还有其他颜色部分。也就是说,当像素点扫描到每行深蓝色部分(可以显示给用户的部分)时右边在跳转到下一行之前,还需要扫描几个无用的像素点并发出它们HSYNC信号(无用点对应的右紫色部分),此时发出HSYNC信号发出后,您仍然需要扫描几个无用的点(此时的无用点是指无法显示的点,所谓的无用点是指左紫色部分)来扫描显示给用户的点。

从垂直的角度来看。当像素扫描到显示图像的最右端时,即图中对应的A点。此时,扫描点不会立即转向左上角显示下一帧,而是不断扫描几条无用的线,然后跳转并发出VSYNC发出的信号(此时对应图中的黄色部分)VSYNC信号发出后,需要扫几行无用的像素点(对应图中的红色部分)才能显示图像。

所有需要扫描的像素点都称为一帧,即扫描图片中的所有像素点都称为一帧(有用和无用的点),因此VSYNC信号出现的频率称为垂直频率,代表每秒可以显示的图像数。简单地说,解释是每次出现VSYNC证明显示了一张图片。对应的HSYNC称为水平频率。简单的解释是每次出现HSYNC信号证明一行扫描完成。

图中的深蓝色部分,即有效数据的行数列数称为分辨率。

基本名词及其lcd介绍了基本显示原理,然后进行控制lcd要显示你想显示的东西,首先要控制的是有时序图。接下来,让我们看看lcd控制器时序图:

首先图中可以看出,VSYNC一个周期是一帧周期,VSYNC高电平时间(脉宽)为VSPW 1个HSYNC时序图中的信号周期;VBPD 1部分对应上图上方的红色部分;下一步是有效显示行数LINEVAL 一个有效的行数(对应上图蓝色部分的行数);后面需要VFPD 1个HSYNC下一帧的显示始于周期时间后,这里VFPD 1个HSYNC周期时间是对应图中下方的黄色部分;一般来说,一帧(即显示图片的时间)是(VSPW 1) (VBPD 1) (LINEVAL 1) (VFPD 1)个HSYNC周期。

然后在时序图中放一个HSYNC周期放大,图中HSYNC高电平持续时间(脉宽)为HSPW 1个VCLK周期;下一步需要HBPD 1个VCLK有效数据只能在一个周期内显示,此时HBPD 1个VCLK周期时间对应上图左侧紫色部分;然后开始显示有效数据部分,一共需要HOZVAL 1个VCLK周期(这里对应的是上图的蓝色部分的列数);再往后就是需要HFPD 1个VCLK只有周期时间才能继续显示下一行,HFPD 1个VCLK周期时间是图中右侧紫色的对应部分。扫描这里所需的时间是(HSPW 1) (HBPD 1) (HOZVAL 1) (HFPD 1)个VCLK周期。

具体确定VSPW VBPD LINEVAL VFPD HSPW HBPD HOZVAL HFPD根据具体值,必须根据具体值LCD对比芯片手册得出结果。比较一下LCD图中有两种芯片数据手册,其中H代表HSYNC,其中的CLK时钟周期是像素。

比较上图可以知道VSPW=9 VBPD=1 LINEVAL=271 VFPD=1 HSPW=40 HBPD=1 HOZVAL=479 HFPD=1

通过以上两段的分析,可以看出:

一帧周期(即显示图片的时间)是(VSPW 1) (VBPD 1) (LINEVAL 1) (VFPD 1)个HSYNC周期,

一个HSYNC周期为(HSPW 1) (HBPD 1) (HOZVAL 1) (HFPD 1)个VCLK周期

因此,一帧周期= {(VSPW 1) (VBPD 1) (LINEVAL 1) (VFPD 1) } * { (HSPW 1) (HBPD 1) (HOZVAL 1) (HFPD 1)}个VCLK周期

这里的数据手册给出:

VCLK的频率(hz)=VCLK(Hz) = HCLK / [ ( CLKVAL 1) * 2 ]

其中CLKVAL最小值0。

所以一帧的频率是:

Frame Rate = 1 / [ { (VSPW 1 ) (VBPD 1 ) (LIINEVAL 1 ) (VFPD 1 ) } * {(HSPW 1 ) (HBPD 1 ) (HFPD 1 ) (HOZVAL 1 ) } *{ 2 x (CLKVAL 1 ) / ( HCLK ) } ]

因此,数据显示只需设置上述公式的变量值,然后给出帧内存的地址。

接下来,让我们谈谈图像是如何存储的。在说之前,我们需要了解一个概念BPP:

BPP(像素深度):像素深度是指存储每个像素的位数,也用于测量图像的分辨率。像素深度决定了彩色图像的每个像素的可能颜色数,或确定灰度图像的每个像素的可能灰度等级。

例如,使用彩色图像的每个像素R,G,B三个重量表示,如果每个重量为8位,则一个像素共用24位,即像素深度为24,每个像素可为16位 777 其中一种颜色是216(24次)。从这个意义上说,像素深度通常被描述为图像深度。像素的位数越多,它能表达的颜色就越多,它的深度就越深。

2440数据手册BPP、4BPP、8BPP、16BPP、24BPP,这里只介绍16BPP其余的也差不多。

假如LCD采用,16BPP显示2440使用的方法是用四个字节存储两个像素点BPP,给个像素点BPP有两种存储方式可以占用两个字节:

当BSWP = 0, HWSWP = 0时,2440采用上述存储方法BSWP = 0, HWSWP = 2440采用以下存储方式:

在LCD中,像素点P1、P2、P3.排列方式为:

采用16BPP存储方式,即红绿蓝RGP一个占有16个bit,它们有两种分布方式:5:6:5和5:5:5:1。对于第二种方法,最后一个强度位可以看作是GRB每一种颜色的最低位置,就像下图中的下表一样,VD18位,10位,2位分别有一位,所以5:5:5:1和R(5 1):G(5 1):B(4 1)是一样的(但不能理解为2)^18色值)。

lcd采用24位数据线传输数据,两种方式在24位传输过程中分别安排:

至于其他格式bpp你可以参考数据手册。接下来,让我们谈谈调色板。说白了,调色板是256*16块内存,使用8块BPP模式的时候,可以通过索引值查找调色板,调色板跟16BPP可采用5:6:5和5:5:5:1两种模式,其存储格式如下图所示:

可见调色板深度为0-0Xff(也就是有多少行),宽度为16bit,从图中可以看出,调色板的起始地址为0X4D000400,结束地址为0X4D0007FC,这里只使用32个内存的低16位调色板DATA[31 :1 6]上述数据为无效数据。以5:5:5:1的形式存储和传输VD1 8, VD1 0 和VD2者都是相同的传输值data(l)。

开始一一介绍控制lcd的寄存器:

先看下LCDCON1.功能如下图所示:

ENVID:LCD 输出信号控制位 为1表示使能

BPPMODE:对应屏幕类型BPP的选择

PNRMODE:选择屏幕类型

MMODE :对于STN LCD设置VM的反转频率

CLKVAL :设置像素时钟

        对于TFT: VCLK=HCLK/((CLKVAL 1)*2)           HCLK=100Mhz的情况下,lcd手册说明VCLK典型的是9Mhz,CLKVAL=4或者5 

LINECNT :只读位,每次扫描一行LINECNT值减去1,直到0

LCDCON5寄存器主要是包含包含一些状态的只读寄存器和有关一些信号的极性设置:

HWSWP:半字交换使能位

BSWP:字交换是使能位

(上面两个寄存器用来设置像素点在内存的存储排列格式)

ENLEND:LEND使能寄存器

PWREN: LCD_PWREN使能寄存器

INVLEND:LEND信号的极性,是否反转

INVWREN:pwren信号极性是否反转

INVVEN:VDEN信号的极性,是否反转

INVVD:VD数据传输的极性是否反转

INVVFRAME:VFINE/HSYNC信号的极性是否反转

INVVLINE:VLINE/HSYNC信号的极性是否反转

INVVCLK:设置为0在VCLK下降沿读数据;设置为10在VCLK上升沿读数据

FRM565:设置16BPP时候,是565还是5551

BPP24BL:24BPP模式下,是低字节数据有效还是高字节数据有效

HSTATUS/ VSTATUS:只读寄存器,用来获取当前像素扫描到什么部分。

LCDCON1到LCDCON5寄存器介绍完毕,这5个寄存器主要是设置与硬件密切相关的参数,接下来说的是有关帧内存方面的寄存器,介绍之前需了解一些概念,在LCD显示的图中,可以看到真正的显示有效数据周围还有许多无用的数据,这些所有的数据(有效数据+无效数据)称为一帧,而真正显现出来的有效数据称为VIEW PORT,其图可表示为:

通过图可以看出来,view port的大小就是实际LCD屏幕的大小,一帧中包含着view port,而且view port在一帧当中的位置是是可以移动的,其位置有LCDBASEU 、LCDBASEL(view port上下两点显示的起始地址),PAGEWIDTH(view port的宽度也就是lcd的宽度)决定的。这些值具体的设定需要看下面的寄存器。

首先是LCDSADDR1寄存器:

LCDBASEU:对于TFT LCD,用来保存视口(view port)对应的内存的起始地址(view port的第一个数值的地址即对应图中view port左上角的位置地址),也就是帧缓冲区的开始地址。(可以参考上面的位移图来理解)。其存放的是帧内存首地址(32位的数值)的第21~1位。

LCDBANK:保存帧内存的起始地址(保存帧内存首地址(首地址为32位的数值)的第30~22位),为了当移动view port窗口的时候不影响LCDBANK的值,必须4m对齐。

总的来说LCDBASEU存放的是帧内存起始地址的【21:1】位,LCDBANK保存的是帧内存起始地址的【30:22】位

接下来LCDSADDR2:

LCDBASEL:具体的含义可以看上面的那个VIEW PORT的移动的图理解,对于TFT LCD,保存的是view port最后一行的起始地址,其计算公式为:

LCDBASEL = ((the frame end address) >>1 ) +1
= LCDBASEU +(PAGEWIDTH+OFFSIZE) x (LINEVAL+1 )

上面的公式通过上面的那个位移图应该不难理解,只是要注意的就是这里的OFFSIZE是view port位图上的左右两个标出的OFFSIZE的和。一般情况下LCDBASEL存放的是缓存区的大小的【21:1】(帧内存最大是4m,也就是最大为22位)+偏移地址(帧内存的首地址)。

接下来就是

PAGEWIDTH:view port的宽度,以半字为单位(32位的cpu 半字就是16bit)

OFFSIZE:表示上一行最后一个数据与下一行第一个数据间的地址差的一半,以半字为单位。假如OFFSIZE数值2代表相差4个半字。

设置一且完毕后,再来看一下调色板的信息设置:

TPALVAL:这只调色板的GPG的数值

TPAL调色板的使能位。

设置前面的这些寄存器lcd就可以稳定的工作了,但是lcd控制器为了更可能的节约时间,满足不同需求,其拱了一个lcd中断等的操作,具体的看下面的几个寄存器:

LCDINTPND中断挂起寄存器,主要是表示lcd的中断挂起的情况

INT_FiCnt:中断挂起位,该位为0表示没有发生中断请求,当该位是1表明lcd的FIFO的已经达到指定的阈值。

INT_FrSyn:帧同步中断挂起位,该位为0表示没有帧同步中断请求,该位为1表明帧发出中断请求(lcd已经显示完一帧)。

与中断挂起寄存器LCDINTPND雷同的另一个寄存器是,中断源挂起寄存器,他们的功能相同,这里解释一下中断源,大家都知道中断是指由于某种事件的发生(硬件或者软件的),计算机暂停执行当前的程序,转而执行另一程序,以处理发生的事件,处理完毕后又返回原程序继续作业的过程。中断是处理器一种工作状态的描述。我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源。

对应的中断源挂起寄存器为中断源挂起寄存器,表明中断源挂起状态

INT_FiCnt:中断挂起位,该位为0表示没有发生中断请求,当该位是1表明lcd的FIFO的已经达到指定的阈值。

INT_FrSyn:帧同步中断挂起位,该位为0表示没有帧同步中断请求,该位为1表明帧发出中断请求(lcd已经显示完一帧)。

既然lcd有前面的这两个状态寄存器那么一定有与之对应的中断屏蔽寄存器来屏蔽中断的发生,这里的寄存器是LCDINTMSK,中断屏蔽寄存器可以决定屏蔽那个中断源(被屏蔽掉的中断源将不会发生作用)。

INT_FiCnt:屏蔽lcd FIFO中断位,该位设置为0表明相应lcd的FIFO的中断,该位设置为1表示屏蔽lcd的FIFO的中断。

INT_FrSyn:屏蔽lcd 帧同步中断位,该位是指为1表明屏蔽帧同步中断。

FIWSEL: 决定lcd的FIFO出发的阈值,设置为0阈值为4字,设置为1表示深度为8字

总结:

1、初始化有关连接lcd的引脚,连接方式看开发板原理图

2、LCDCON1到LCDCON5 用于选择lcd的类型,设置一些硬件的信息。

3、LCDSADDR1到LCDSADDR3设置帧内存的地址

4、TPAL设置,是否使用调色板暂存器

5、设置抖动模式寄存器

6、根据自身是否使用三星公司的 lpc3600 和lcc3600 LCD,假如不使用的话需要禁止相应模块

可以通过TCONSEL来设置。

7、设置是否使用中断,可通过LCDINTMSK来设置

8、控制lcd的打开或者关闭。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章