Chinaunix首页 | 论坛 | 博客
  • 博客访问: 132506
  • 博文数量: 64
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-26 18:44
文章分类

全部博文(64)

文章存档

2014年(64)

我的朋友

分类: LINUX

2014-04-26 18:51:28

原文地址:(十一)、LCD控制器 作者:machoe

LCD

LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。

的分类

液晶显示器按照控制方式不同可分为被动矩阵式LCD及主动矩阵式LCD两种。

被动矩阵式LCD

  被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但由于成本低廉的因素,市场上仍有部分的显示器采用被动矩阵式LCD。被动矩阵式LCD又可分为TN-LCD(Twisted Nematic-LCD,扭曲向列LCD)STN-LCD(Super TN-LCD,超扭曲向列LCD)DSTN-LCD(Double layer STN-LCD,双层超扭曲向列LCD)

主动矩阵式LCD

目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(Thin Film Transistor-LCD,薄膜晶体管LCD)TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。

接口

信号名称

描述

VSYNC

垂直同步信号

HSYNC

水平同步信号

HCLK

像素时钟信号

VD[230]

数据信号

LEND

行结束信号(非必须)

PWREN

电源开关信号

S3C2440 LCD控制器介绍 S3C2440 LCD控制器的特性与结构

S3C2440LCD控制器向LCD传输图像数据,并提供必要的控制信号:VFRAMEVLINEVCLKVM等。

下图为其内部框图。

REGBANKLCD控制器的寄存器组,包含了17个寄存器和一块256x16的调色板内存。LCDCDMALCD专用的DMA通道,使其可以在CPU不参预的状态下传输数据。VIDPRCSLCDCDMA中的数据组合成特定的格式,然后通过VD发送给LCD屏。

   

         其中LCDCDMA中有两个FIFOFIFOH容量为16个字,FIFOL12个。当采用“双扫”的方式时,分别传输上半屏和下半屏的数据。当采取“单扫”时,只采用FIFOH。当FIFO为空或者减少到设定的阈值时,LCDCDMA自动地发起DMA传输从内存中获得图像数据。

、图像显示的原理

一幅图像被称为一帧,每帧由多行组成,每行由多个像素组成,每个像素的颜色使用若干位的数据表示。对于单色的显示器,每个像素使用1位表示,称为1BPP;对于256色显示器,每个像素使用8位表示,2^8=256,称为8BPP.

显示器从屏幕的左上方开始,一行一行的取得每个像素的数据并显示出来,当显示到一行的最右边时,跳到下一行的最左边开始显示新的一行;当显示完所有行后,跳到左方方,显示下一帧。我们称这种显示方式为“Z”字行的扫描,使用HSYNCVSYNC信号来控制扫描路线的跳转,其中HSYNC表示:应该跳到下一行了;VSYNC表示:该跳到最上面了。

VSYNC频率:表示一秒中可以显示多少帧图像,称为垂直频率或场频率;

HSYNC频率:称为水平频率。

在了解对LCD操作之前,先来了解一下,图像数据是如何存储的。

显示器上的每个像素的颜色是由3部分组成:红、绿、蓝。这三种颜色的混合几乎可以表示人眼所能识别的所有颜色。可以根据颜色的浓烈程度按级区别,比如可以分成256个等级(0~255)。

白色:255级的红、255级的绿、255级的蓝三种混合组成;

黑色:0级的红、0级的绿、0级的蓝三种混合组成。

LCD的操作

每个HSYNC信号表示一数据的开始,每个VSYNC信号表示一数据的开始,无论数据是否有效。每个VCLK信号都表示正在传输一个像素的数据,无论它是否有效。数据的有效无效是对CPULCD控制器来说的,对于LCD,它只管读取数据和控制信号,不管是否有效。

参考下图,来分析一下时序:

(上图的上半部分,帧):

1)         VSYNC信号有效时,表示一帧数据的开始。

2)         VSPW表示VSYNC信号的脉冲宽度为(VSPW+1)个HSYNC信号的周期,即这个(VSPW+1)行的数据是无效的。

3)         VSYNC信号脉冲之后,还要经过(VBPD+1)个HSYNC信号周期,有效的行数据才出现,所以,当VSYNC信号之后,总共有(VSPW+1+VBPD+1)个行的数据之后,有效的数据才行出现。

4)         随后,发送出了(LINEVAL+1)行的有效数据。

5)         最后是(VFPD+1)个无效的行。

(上图的下半部分,行):

1)         HSYNC信号有效时,表示一行数据的开始。

2)         HSPW表示HSYNC信号的脉冲宽度为(HSPW+1)个VCLK信号周期,即(HSPW+1)个像素是无效的。

3)         HSYNC信号脉冲之后,还要经过(HBPD+1)个VCLK信号周期,有效的像素数据才出现。所以,在HSYNC信号有效之后,总共还需经过(HSPW+1+HBPD+1)个无效的像素。

4)         随后连续发出(HOZVAL+1)个有效的像素数据。

5)         最后是(HFPD+1)个无效的像素。

VCLK(Hz)  =  HCLK / [ ( CLKVAL + 1 ) ]

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

有了以上的知识,我们可以将VSYNCHSYNCVCLK等信号时间参数设置好后,并帧内存的地址告诉LCD控制器,它即可自动地发起DMA传输从帧内存中得到图像数据,并最终在上述信号的控制下出现在数据总线VD[230]上。

S3C2440控制器支持单色1BPP4级灰度2BPP16级灰度4BPP2568BPP的调色板显示模式;另外还支持64K16BPP16M24BPP非调色板显示模式。以16M24BPP为例,下面来介绍一下数据的具体存储格式:

16M25BPP就是用24位(红、绿、蓝各8位)来表示一个像素的颜色。LCD控制器从内存中获得某个像素的24位颜色值后,直接通过VD[230]发送给LCD。为了方便DMA传输,采用4Byte32位的方式,其中3Byte从高到低分别表示红、绿、蓝。剩余一个Byte无效,至于哪个无效是可以配置的。

LCD控制寄存器介绍

1)         LCDCON1

用于设置LCD类型、设置像素时钟、使能LCD信号的输出等。

这里请注意:[2718]是只读的。

2)         LCDCON2

用于设置垂直方向各种信号的时间参数。其中具体的数值要参考LCD屏的手册。东华3.5`TFT见手册P18

3)         LCDCON3

LCDCON2类型,LCDCON3用于水平方向的各种信号的参数。

4)         LCDCON4

用于设置脉冲宽度与VCLK的关系,即:脉冲宽度=HSPW+1VCLK

5)         LCDCON5

其中[1613]为只读状态,不需设置。

而低12位用于设置各种信号的极性和使能、禁止。第12位用于选择24BPP时有效模式是低地址有效还是高地址有效。第11位用于选择16BPP的格式是565还是5551

6)         LCDSADDR1~3 帧内存地址寄存器

 

内可以很大,而真正的在LCD屏幕显示的区域被称为view port,它处于帧内存之内。这3个寄存器用来配置帧内存的起始地址,view port在帧内存的位置。

l  LCDSADDR1

对于本寄存器中的LCDBANK的理解,请大家参考推荐阅读的第3条。

 

功能

说明

LCDBANK

[2921]

用来保存帧内存起始地址A[3022],帧内存起始地址必须为4MB对齐

LCDBASEU

[200]

对于TFT,用来保存view port所对应的内存起始地址A[210],这块内存也称为帧缓冲区,frame buffer

l  LCDSADDR2

LCDBASEL [20:0],对于TFT,用来保存LCD的帧缓冲区结束地址A[210],其值计算公式:

LCDBASEL=LCDBASEU+PAGEWIDTH+OFFSIZEXLINEVAL+1

注意:可以修改LCDBASEULCDBASEL的值来实现图像的移动,不过不能在一帧图像的结束阶段(LCDCON1寄存器的LINECNT0时)进行修改。因为此时LCD控制器会优先取得下一帧的数据,之后才改变这些值,这样的话,这些数据与新的帧缓冲区就不一致了。

l  LCDSADDR3

功能

说明

OFFSIZE

[2111]

参考上图,表示上一行最后一个数据与下一行第一个数据地址差值的一半,即以半字为单位地址差。

PAGEWIDTH

[100]

View port的宽度,以半字为单位。

、实例功能

本章我将为大家提供3个例程,我会打包上传到CSDN上面。包括,LCD-pictureLCD-HZLCD-machoe

其中LCD-picture是画图例程,将其烧写到nand flash中后,会看到在LCD上画出的圆形,该例程是赵春江老师写的,稍候我会将他的博客地址放在推荐阅读部分。

其中LCD-HZ是汉字显示程序,这里我要特别说明:本程序如果在LINUX下编译,千万不要用VIM等编辑器打开源文件,因为fedora10的编辑器对汉字支持不是很好。如果打开,再编译,结果在LCD上会是乱码。如果想更改其中的汉字,方法一:请在WINDOWS下用记事本打开修改。方法二:如果想在LINUX下完成,请先对VIM进行汉字的支持,我会把汉字支持的部分资料贴到推荐阅读部分,但不做讨论。

LCD-machoe是本章讨论的重点,该程序烧写到nand flash中,运行后,在串口和LCD上均输出提示:please input with your keyboard。这时请大家用键盘输入字母或数字,观察LCD上的现象。该程序参考了天嵌的TQ2440_TestuCOS、赵春江老师的部分源码,再此特别感谢。

lcd-machoe简要分析

整个程序的入口为head.S,在该文件与上一章串口没有变化。工程中的lcd.c文件为新增文件,提供LCD的操作API(初始化、绘制像素点、绘制ASCII码、绘制汉字、绘制背景)等功能。而其相关的定义在s3c24xx.h中完成。

主函数,依次调用初始化串口和LCD的函数,然后打印提示,最后进入死循环。我会尽量在程序中增加注释以提高理解。

本程序只为演示,还有很多不足的地方,希望大家在学习过程中不断完善,实现更多的功能。

1.韦东山 《嵌入式LINUX应用开发完全手册》

2.三星  《S3C2440手册》

3.

4. http://blog.csdn.net/zhaocj/category/653113.aspx

5. http://blog.163.com/cleave@126/blog/static/3547638620108133446840/

6.

7.

8.

阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~