下面先看一下我从他人那转过来的一篇文章,我觉得很有用,看完之后我再说一下自己对这一块的了解,也能够先看看我的了解(下面红字标出)再看开端的这篇文章,由于我说的更浅显,O(∩_∩)O哈哈~。
1. LCD作业的硬件需求:
要使一块LCD正常的显现文字或图画,不只需求LCD驱动器,并且还需求相应的LCD操控器。在通常情况下,出产厂商把LCD驱动器会以COF/COG的方式与LCD玻璃基板制造在一同,而LCD操控器则是由外部的电路来完结,现在许多的MCU内部都集成了LCD操控器,如S 3C2410/2440等。经过LCD操控器就能够发生LCD驱动器所需求的操控信号来操控STN/TFT屏了。
2. S3C2440内部LCD操控器结构图:

咱们依据数据手册来描绘一下这个集成在S3C2440内部的LCD操控器:
a:LCD操控器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器组成;
b:REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来装备LCD操控器的;
c:LCDCDMA是一个专用的DMA,它能主动地把在侦内存中的视频数据传送到LCD驱动器,经过运用这个DMA通道,视频数据在不需求CPU的干涉的情况下显现在LCD屏上;
d:VIDPRCS接纳来自LCDCDMA的数据,将数据转化为适宜的数据格式,比方说4/8位单扫,4位双扫显现形式,然后经过数据端口VD[23:0]传送视频数据到LCD驱动器;
e:TIMEGEN由可编程的逻辑组成,他生成LCD驱动器需求的操控信号,比方VSYNC、HSYNC、VCLK和LEND等等,而这些操控信号又与REGBANK寄存器组中的LCDCON1/2/3/4/5的装备密切相关,经过不同的装备,TIMEGEN就能发生这些信号的不同形状,然后支撑不同的LCD驱动器(即不同的STN/TFT屏)。
3. 常见TFT屏作业时序剖析:

LCD供给的外部接口信号:
VSYNC/VFRAME/STV:笔直同步信号(TFT)/帧同步信号(STN)/SEC TFT信号; HSYNC/VLINE/CPV:水平同步信号(TFT)/行同步脉冲信号(STN)/SEC TFT信号; VCLK/LCD_HCLK:象素时钟信号(TFT/STN)/SEC TFT信号; VD[23:0]:LCD像素数据输出端口(TFT/STN/SEC TFT); VDEN/VM/TP:数据使能信号(TFT)/LCD驱动沟通偏置信号(STN)/SEC TFT 信号; LEND/STH:行完毕信号(TFT)/SEC TFT信号; LCD_LPCOE:SEC TFT OE信号; LCD_LPCREV:SEC TFT REV信号; LCD_LPCREVB:SEC TFT REVB信号。
|
一切显现器显现图画的原理都是从上到下,从左到右的。这是什么意思呢?这么说吧,一副图画能够看做是一个矩形,由许多摆放规整的点一行一行组成,这些点称之为像素。那么这幅图在LCD上的显现原理便是:
A:显现指针从矩形左上角的榜首行榜首个点开端,一个点一个点的在LCD上显现,在上面的时序图上用时刻线表明就为VCLK,咱们称之为像素时钟信号; B:当显现指针一向显现到矩形的右边就完毕这一行,那么这一行的动作在上面的时序图中就称之为1 Line; C:接下来显现指针又回到矩形的左面从第二行开端显现,留意,显现指针在从榜首行的右边回到第二行的左面是需求必定的时刻的,咱们称之为行切换; D:如此类推,显现指针就这样一行一行的显现至矩形的右下角才把一副图显现完结。因而,这一行一行的显现在时刻线上看,便是时序图上的HSYNC; E:但是,LCD的显现并不是对一副图画快速的显现一下,为了继续和安稳的在LCD上显现,就需求切换到另一幅图上(另一幅图能够和上一副图一样或许不一样,意图仅仅为了将图画继续的显现在LCD上)。那么这一副一副的图画就称之为帧,在时序图上就表明为1 Frame,因而从时序图上能够看出1 Line仅仅1 Frame中的一行; F:相同的,在帧与帧切换之间也是需求必定的时刻的,咱们称之为帧切换,那么LCD整个显现的进程在时刻线上看,就可表明为时序图上的VSYNC。
|
上面时序图上各时钟延时参数的意义如下:(这些参数的值,LCD发生厂商会供给相应的数据手册)
VBPD(vertical back porch):表明在一帧图画开端时,笔直同步信号今后的无效的行数,对应驱动中的upper_margin; VFBD(vertical front porch):表明在一帧图画完毕后,笔直同步信号曾经的无效的行数,对应驱动中的lower_margin; VSPW(vertical sync pulse width):表明笔直同步脉冲的宽度,用行数核算,对应驱动中的vsync_len; HBPD(horizontal back porch):表明从水平同步信号开端到一行的有用数据开端之间的VCLK的个数,对应驱动中的left_margin; HFPD(horizontal front porth):表明一行的有用数据完毕到下一个水平同步信号开端之间的VCLK的个数,对应驱动中的right_margin; HSPW(horizontal sync pulse width):表明水平同步信号的宽度,用VCLK核算,对应驱动中的hsync_len;
|
关于以上这些参数的值将别离保存到REGBANK寄存器组中的LCDCON1/2/3/4/5寄存器中:(对寄存器的操作请检查S3c2440数据手册LCD部分)
LCDCON1:17– 8位CLKVAL 6– 5位扫描形式(关于STN屏:4位单/双扫、8位单扫) 4– 1位色位形式(1BPP、8BPP、16BPP等) LCDCON2:31 – 24位VBPD 23 – 14位LINEVAL 13 – 6位VFPD 5 – 0位VSPW LCDCON3:25 – 19位HBPD 18 – 8位HOZVAL 7 – 0位HFPD LCDCON4: 7 – 0位HSPW LCDCON5:
|
4. 帧缓冲(FrameBuffer):
帧缓冲是Linux为显现设备供给的一个接口,它把一些显现设备描绘成一个缓冲区,答应应用程序经过 FrameBuffer界说好的接口拜访这些图形设备,然后不用去关怀详细的硬件细节。关于帧缓冲设备而言,只要在显现缓冲区与显现点对应的区域写入色彩值,对应的色彩就会主动的在屏幕上显现。下面来看一下在不同色位形式下缓冲区与显现点的对应联系:

我信任看完这些今后咱们会对这一块有稍一些了解了,下面是我自己的了解:
LCD是在咱们学习ARM9时觉得比较费事的一块,由于刚触摸的时分一眼望去觉得内容但是不少,不知道从哪里下手,呵呵,其实咱们慢慢来剖析就会逐步明亮起来。
首先说一下咱们平常所说的多少位的LCD,有24位的,有16位的指的是LCD数据的位数,LCD的数据实际上是LCD要显现的色彩,24位的是红绿蓝各占8位,16位则是红绿蓝依照565分配的,其实24的也能够只接16位,每个色彩位置接地就能够,所以要给LCD的缓冲区一个数据才干在LCD上显现出来。那究竟是怎样显现的呢,那就得先说一下像素了,LCD的像素实际上就LCD屏幕有多少个点,LCD显现的东西都是一个一个点凑集出来的,比方我用的是320*240的LCD,便是说LCD每一行有320个点,而每一列有240个点,所以总共有320*240个点,咱们让恰当的点显现恰当的色彩就达到了咱们的意图。
其实刚开端困扰咱们的是LCD的初始化的问题,要设置的东西比较多,其实咱们是记不住这些东西的,呵呵,作为入门咱们能够参阅他人的初始化程序,把里边的参数改成咱们自己的LCD的参数就OK了。
那么咱们到底是怎样把咱们要显现的数据送给LCD操控起的呢?是这样的,咱们能够界说一个二维数组,把咱们要显现的数据存到里边,然后把这个数组的地址赋给LCD的相应的寄存器,这个寄存器是LCDSADDRn,详细的设置咱们能够参阅数据手册,咱们能够把二维数组的坐标和LCD的坐标对应起来,那么咱们就能够随意的让哪一个像素点显现什么色彩就显现什么色彩了。这就把数据送出的进程,也便是显现一个像素点的进程。
到现在咱们现已知道怎么显现一个像素了,那接下来便是LCD显现最基本的东西了—-字符和图片。汉字和图片的显现都是根据像素点的显现的,咱们把要显现的字符和图片转化成相应的数据,然后传递给LCD即可。咱们能够专门的写一个显现字符的函数和一个显现图片的函数。显现字符的数据能够用取模软件生成,由于生成的字符数据是表明的每一个点要不要亮,亮的当地用1表明,不亮的当地用0表明,所以假如用LCD显现,咱们还要告知LCD显现什么色彩,这才是LCD需求的数据,比方说16*16的数据,有16行16列,咱们将一行的数据,也便是16位数据的每一位都取出来,为1的当地,咱们就给LCD一个16位的数据,为0的当地就不给数据,这样就能显现了,取模生成的数据都是按行来的。图片的显现直接就将16位的数据传递给LCD,这个图片数据的发生,咱们能够用软件LCD彩色图片转化东西(BMP_to_H)生成C言语文件,咱们只需对文件进行简略的修正就能加入到咱们的程序中,修正办法在软件的阐明中都有。
以上这些都是我自己的了解,话尽管不多,但这些都是我刚开端学的时分困扰我的当地,我信任看了这些对你了解LCD到底是怎样显现的会有必定的协助,说的不对的当地,请咱们及时帮我改正,呵呵。
下一篇文章中我将结合详细的代码剖析一下LCD的操作进程。