JZ2440 裸机驱动 第13章 LCD控制器(1)

时间:2023-02-11 11:17:53
本章目标 
了解LCD显示器的接口及时序;
掌握S3C2410/S3C2440 LCD控制器的使用方法;
了解帧缓冲区的概念,掌握如何设置帧缓冲区来显示图像;
13.1 LCD和LCD控制器
13.1.1 LCD显示器

1.LCD的种类

2.LCD的接口

    CPU或显卡发出的图像数据是TTL信号(0~5V、0~3.3V、0~2.5V或0~1.8V),LCD
本身接收的也是TTL信号。由于TTL信号在高速的长距离传输时性能不佳,抗干扰能力
比较差,后来又剔除多种接口,比如LVDS、TDMS、GVIF、P&D、DVI和DFP等。它
们实际上只是将TTL信号编码成各种信号以便传输,在LCD那边将接收到的信号进行解
码得到TTL信号。
    由于数字接口标准尚未统一,所以使用LCD时需要根据其数据手册了解其接口的定
义。也是基于数字接口标准未统一的原因,市场上大多LCD都采用模拟信号接口,LCD
需要先通过ADC将模拟信号转换为数字信号才能显示。
    但是不管采用何种数字接口,本质上TTL信号是一样的。
(1)对于STN LCD
    STN LCD的数据传输方式有3种:4行单扫、4行双扫、8行单扫。所谓“单扫”是指
对于一整屏的数据,从上到下、从左到右,一个一个地发送出来;“双扫”是指将一整
屏的数据分为上下两部分,同时从上到下、从左到右,一个一个地发出来。“4位”、
“8位”是指发送数据时使用多少个数据线。
    注意:4位双扫方式也用到8根数据线,其中4根用于上半屏,4根用于下半屏数据。
    出数据信息外,还有其他控制信号,所有TTL信号如表13.1所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
 (2)对于TFT LCD。
    TFT LCD的TTL信号与STN类似(如表13.2所示),只是其数据线多大24根,对应像素值
中的每一位。
    JZ2440 裸机驱动 第13章 LCD控制器(1)
13.1.2 S3C2410/S3C2440 LCD控制器介绍 

1.S3C2410/S3C2440 LCD控制器的特性与结构

    S3C2410/S3C2440 LCD控制器被用来向LCD传输图像数据,并提供必要的控制信号,
比如VFRAME、VLINE、VCLK、VM等。可以支持STN LCD和TFT LCD,其特性如下:
(BPP表示bit per pixel,即每个像素使用多少位来表示其颜色)。
(1)STN LCD。
·支持3种扫描方式:4位单扫、4位双扫和8位单扫。
·支持单色(1BPP)、4级灰度(2BPP)和16级灰度(4BPP)屏。
·支持256色(8BPP)和4096色(12BPP)彩色STN屏(CSTN)。
·支持分辨率位640x480、320x240、160x160以及其他规格的多种LCD。
·虚拟屏幕最大可达4MB。
·对于256色,分辨率有4096x1024、2048x2048、1024x4096等
(2)TFT LCD。
·支持单色(1BPP)、4级灰度(2BPP)、16级灰度(4BPP)、256色(8BPP)的调色板显示模式。
·支持64K(16BPP)和16M(24BPP)色非调色板显示模式。
·支持分辨率位640x480、320x240及其他多种规格的LCD。
·虚拟屏幕最大可达4MB。
·对于64K色,分辨率有2048x1024等多种。
    S3C2410/S3C2440 LCD控制器提供了驱动STN LCD、TFT LCD所需要的所有信号(如表
13.1、表13.2所示),另外,还特别提供额外的信号以支持SEC公司生产的TFT LCD。这3类
信号中很大部分是复用的。
    S3C2410/S3C2440 LCD控制器的内部结构如图13.1所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
     REGBANK是LCD控制器的寄存器组,含17个寄存器及一块256x16的调色板内存,
用于设置各项参数。而LCDCDMA则是LCD控制器专用的DMA通道,可以自动地从
系统总线上获取图像数据,这使得显示图像时不需要CPU干扰。VIDPRCS将
LCDCDMA中的数据组合成特性格式(比如4位单扫、4位双扫和8位单扫等),然后从
VD[23:0]发送给LCD屏。同时TIMEGEN和LPC3600负责产生LCD屏所需要的控制时
序,例如VSYNC、HSYNC、VCLK、VDEN,然后从VIDEO MUX送给LCD屏。其
中LPC3600专用于SEC TFTLCD。
    LCDCDMA中有两个FIFO:
        FIFOH的容量为16(1个字为4字节)个字,
        FIFOL的容量为12个字。
        当使用双扫方式时,FIFOH、FIFOL分别用于传输上半屏、下半屏数据;
        当使用单扫方式时,只用到FIFOH。
        当FIFO为空或者其中的数据已经减少到设定的阈值时,LCDCDMA自动发起DMA
传输从内存中获得图像数据。
 
2.显示器上数据的组织格式
    对于屏幕上的一整幅图像,它的数据时如何组织的?无论时CRT还是LCD显示器,
它们都有相同的概念。
    一幅图像被称为一帧,每帧由多行组成,每行由多个像素组成,每个像素颜色由若干
位的数据表示。对于单色显示器,每个像素使用1位来表示,称为1BPP;对于256色显
示器,每个像素使用8位来表示,称为8BPP。
    显示器从屏幕的左上方开始,一行一行第取得每个像素的数据并显示出来,
    当显示到一行的最右边时,跳到下一行的最左边开始显示下一行;
    当显示完所有行后,跳到左上方开始下一帧。
    显示器沿着“Z”字行的路线进行扫描,使用HSYNC、VSYNC信号来控制扫描路线的
跳转,HSYNC表示“是跳到最左边的时候了”,VSYNC表示“是跳到最上边的时候了”。
    在工作中的显示器上,可以在四周看到黑色的边框。
    上方的黑框是因为当发出VSYNC信号时,需要经过若干行之后第一行数据才有效;
    下方的黑框是因为显示完所有行的数据时,显示器还没有扫描到最下边(VSYNC信
号还没有发出),这时数据已经无效;
    左边的黑框是因为当发出HSYNC信号时,需要经过若干像素之后第一列数据才有效;
    右边的黑框是因为显示完一行的数据时,显示器还没有扫描到最右边(HSYNC信号还
没有发出),这时数据已经无效;
    显示器只会根据VSYNC、HSYNC信号取得、显示数据,并不理会该数据是否有效,
何时发出有效数据由显卡决定。   
    VSYNC信号出现的频率表示一秒钟内能显示多少帧图像,称为垂直频率或场频率,这
就是平时常说的“显示器的频率”;HSYNC信号出现的频率称为水平频率。
    显示器上,一帧数据的存放位置与VSYNC、HSYNC信号的关系如图13.2所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
     “有效数据”的行数、列数,即分辨率,它与VSYNC、HSYNC信号之间的“距离”等,
都是可以设置的,这由显卡完成,这些设置在下一节对TFT LCD的操作中都可以看到。
 
3.TFT LCD的操作
    目前市场上主流的LCD为TFT LCD,本章基于TFT LCD来介绍LCD控制器的使用。
对于STN LCD,它所涉及的操作是类似的。
    先了解TFT LCD的时序,这使得我们在设置各个寄存器时有个形象的概念。每个
VSYNC信号表示一帧数据的开始;每个HSYNC信号表示一行数据的开始,无论这
些数据是否有效;每个VCLK信号表示正在传输一个像素的数据,无论它是否有效。
数据是否有效只是对CPU的LCD控制器来说的,LCD根据VSYNC、HSYNC、VCLK
不停地读取总线数据、显示。
    下面讲解时序图,请参考图13.3。
JZ2440 裸机驱动 第13章 LCD控制器(1)
(1)VSYNC信号有效时,表示一帧数据的开始;
(2)VSPW表示VSYNC信号的脉冲宽度(VSPW+1)个HSYNC信号周期,即
(VSPW+1)行,这(VSPW+1)行的数据无效;
(3)VSYNC信号脉冲之后,还要经过(VBPD+1)个HSYNC信号周期,有效的行数据
才出现。所以,在VSYNC信号有效之后,总共还要经过(VSPW+1+VBPD+1)个无效的
行,它对应图13.2上方的边框,第一个有效的行才出现。
(4)随后即连续发出(LINEVAL+1)行的有效数据。
(5)最后是(VFPD+1)个无效的行,它对应图13.2下方的边框,完整的一帧结束,紧
接着时下一帧的数据了(即下一个VSYNC信号)。
    现在深入到一行中像素数据的传输过程,它与上面行数据的传输过程相似。
(1)HSYNC信号有效时,表示一行数据的开始;
(2)HSPW表示HSYNC信号的脉冲宽度为(HSPW+1)个VCLK信号周期,即(HSPW+1)
个像素,这(HSPW+1)个像素的数据无效。
(3)HSYNC信号脉冲之后,还要经过(HBPD+1)个VCLK信号周期,有效的像素数据
才会出现。所以,在HSYNC信号有效之后,总共还要经过(HSPW+1+HBPD+1)个无效的
像素,它的频率可以如下计算:
    VCLK (Hz) = HCLK/[(CLKVAL+1x2)]
    VSYNC信号的频率又称为帧频率、垂直频率、场频率、显示器的频率,它可以如下
计算:
        Fram Rate = 1 / [ { (VSPW+1) + (VBPD+1) + (LIINEVAL+1) + (VFPD+1) } x 
                                       { (HSPW+1) + (HBPD+1) + (HFPD+1) + (HOZVAL+1)} x
                                       { 2 x (CLKVAL+1) / (HCLK) } ]
    将VSYNC、HSYNC、VCLK等信号的时间参数设置好后,并将帧内存(frame memory)
的地址告诉LCD控制器,它即可自动地发起DMA传输从帧内存中得到图像数据,最终在上
述信号的控制下出现在数据总线VD[23:0]上。用户只需要把要显示的图像数据写入帧内存
中,在这之前,先了解一下各种格式的图像数据在内存中如何存储。
    显示器上每个像素的颜色由3部分组成:红、绿、蓝。它们被称为三原色,这三者的混合
几乎可以表示人眼能识别的所有颜色。
    LCD控制器可以支持单色(1BPP)、4级灰度(2BPP)、16级灰度(4BPP)、256色(8BPP)
的调色板显示模式,支持64k(16BPP)和16M(24BPP)非调色板显示模式。下面只介绍256
色(8BPP)、64K(16BPP)、16M(24BPP)色显示模式下,图像数据的存储格式。
(1)16M(24BPP)色。
    16M(24BPP)色的显示模式就是使用24位的数据来表示一个像素的颜色,每种原色使用
8位。LCD控制器从内存中获得某个像素的24位颜色值后,直接通过VD[23:0]数据线发送
给LCD。为了方便DMA传输,在内存中使用4个字节(32)来表示一个像素,其中3字节从高
到低分别表示红、绿、蓝,剩余一个字节数据无效。是最低字节还是最高字节无效,这时
可选择的,如图13.4所示。
 JZ2440 裸机驱动 第13章 LCD控制器(1)
 (2)64K(16BPP)色。
    64K(16BPP)色的显示模式就是使用16位的数据来表示一个像素的颜色。这16位数据
的格式又分为两种:5(红):6(绿):5(蓝)、5(红):5(绿):5(蓝):1(透明度)。5:5:5:1格式也被称
为RGBA格式(A:Alpha,表示透明度)。
    一个4字节可以表示两个16BPP的像素,使用高2字节还是低2字节表示第一个像素,这
也是可以选择的。
    显示模式位16BPP时,内存数据与像素位置的关系如图13.5所示。在5:5:5:1格式下,
VD[18]、VD[10]、VD[2]数据线上的值是一样的,都表示透明度,图13.5中的“NC”表示
没有连接(not connect)。
JZ2440 裸机驱动 第13章 LCD控制器(1)
 (3)256色(8BPP)。
    256色(8BPP)的显示模式就是使用8位的数据来表示一个像素的颜色,但是对三种原
色平均下来,每个原色只能使用不到3位的数据表示,即每个原色最多不过8个级别,这不
足以表示更丰富的颜色。
    为了解决8BPP模式显示能力不足的问题,需要使用调色板(Paette)。每个像素对应
的8位数据不再用来表示RGB三种颜色,而是表示它在调色板中的索引值。
    要显示这个像素时,使用这个索引值从调色板中去其RGB颜色值。所谓调色板就是一
块内存,可以对每个索引值设置颜色,可以使用24BPP或16BPP。S3C2410/S3C2440中,调色
板是一块256x16的内存,使用16BPP的格式来表示256色(8BPP)显示模式下的各个索引值的颜
色。这样,即使使用256色(8BPP)的显示模式,最终出现在LCD数据总线上的仍是16BPP的数据。
    一个4字节可以表示4个8BPP的像素,字节与像素的对应顺序是可以选择的,如图
13.6所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
    调色板中数据存放的格式与上面所描述的16BPP显示模式相似,也分两种格式:5:6:5、
5:5:5:1.调色板中数据的格式及与LCD数据线VD[23:0]的对应关系,如表13.3和表13.4所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
JZ2440 裸机驱动 第13章 LCD控制器(1)
 注意:① 0x4d00 0400是调色板的起始地址;
     ② 5:5:5:1格式下,VD18、VD10和VD2三个数据线中都是亮度值1,即最低位的值。
     ③ 当LCDCON5寄存器中的VSTATUS、HSTATUS有效时,不能读写调色板;

各种模式下用来传输红、绿、蓝三种原色的颜色值的VD数据线如表13.5所示。

JZ2440 裸机驱动 第13章 LCD控制器(1)
    没有用到的数据线其电平为0,从这个观点来看,无论是24BPP还是16、8BPP模式,
24根数据线VD[23:0]都被用到了。事实上,一个TFT LCD能处理的像素位宽是固定的,即
它数据线的数目是固定的,红、蓝、绿3类信号线总是连接到各字节中的高位;软件设置
24、16、8BPP以及调色板等,只会影响到色值的精度。
4.使用TFT LCD时LCD 控制器的寄存器设置
    LCD控制器中REGBANK的17个寄存器可以分为6种,如表13.6所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
    对于TFT LCD,一般情况下只需要设置前两种寄存器;在8BPP模式下,如果想快速地
输出一帧单色图像,可以借助TPAL寄存器。下面分别介绍。
(1) LCD控制寄存器LCDCON1。
    用于选择LCD类型、设置像素时钟、使能LCD信号的输出等,格式如表13.7所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
(2)LCD 控制寄存器LCDCON2。
    用于设置垂直方向个信号的时间参数,格式如表13.8所示,请参考图13.3TFT LCD时序图。
JZ2440 裸机驱动 第13章 LCD控制器(1)
(3)LCD 控制寄存器LCDCON3.
    用于设置水平方向各信号的时间参数,格式如下表所示,请参考13.3TFT LCD时序图。
JZ2440 裸机驱动 第13章 LCD控制器(1)
(4)LCD控制寄存器LCDCON4。
    对于TFT LCD,这个寄存器只用来设置HSYNC信号的脉冲宽度,位[7:0]的数值称为
HSPW,表示脉冲宽度位(HSPW+1)个VCLK周期。
(5)LCD控制寄存器LCDCON5。
    用于设置各个控制信号的极性,并可从中读出一些状态信息,格式列表如表13.10
所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)

JZ2440 裸机驱动 第13章 LCD控制器(1)

(6)帧内存地址寄存器LCDSADDR1~LCDSADDR3。
    帧内存可以很大,而真正要显示的区域被称为视口(view point),它处于帧内存之内。
这3个寄存器用于确定帧内存的起始地址,定位视口在帧内存中的位置。
    图13.7给出了帧内存和视口的位置关系:

JZ2440 裸机驱动 第13章 LCD控制器(1)

    各寄存器格式如表13.11、13.14和13.13所示。
 JZ2440 裸机驱动 第13章 LCD控制器(1)
 JZ2440 裸机驱动 第13章 LCD控制器(1)
    注:可以修改LCDBASEU、LCDBASEL的值来实现图像的移动,不过不能在一帧图像的
结束阶段(LCDCON1寄存器的LINECNT为0时)进行修改,因为此时LCD控制器会优先取得下一
帧的数据,之后才改变这些值。这样的话,这些数据与新的帧缓冲区就不一致。
JZ2440 裸机驱动 第13章 LCD控制器(1)
    注:OFFSIZE、PAGEWIDTH的值只能在ENVID(LCDCON1寄存器的信号输出使能位)为0时修改。
(7)临时调色板寄存器TPAL。
    如果要输出一帧单色的图像,可以在TPAL寄存器中设定这个颜色值,然后使能TPAL寄存器,
这种方法可以避免修改整个调色板或帧缓冲区。
    TPAL寄存器格式如表13.14所示。
JZ2440 裸机驱动 第13章 LCD控制器(1)
    注:临时调色板寄存器TPAL可以在任何显示模式下,并非只能用在8BPP模式下。
 

JZ2440 裸机驱动 第13章 LCD控制器(1)的更多相关文章

  1. JZ2440 裸机驱动 第13章 LCD控制器(2)

    13.2 TFT LCD显示实例 13.2.1 程序设计     本实例的目的是从串口输出一个菜单,从中选择各种方法进行测试,比如画线. 画圆.显示单色.使用调色板等. 13.2.2代码详解     ...

  2. JZ2440 裸机驱动 第6章 存储控制器

    本章目标:     了解S3C2410/S3C2440地址空间的布局     掌握如何通过总线形式访问扩展的外设,比如内存.NOR Flash.网卡等 ························ ...

  3. JZ2440 裸机驱动 第10章 系统时钟和定时器

    本章目标      了解S3C2410/S3C2440的时钟体系结构     掌握通过设置MPLL改变系统时钟的方法     掌握在不同的频率下设置存储控制器的方法     掌握PWM定时器的用法   ...

  4. JZ2440 裸机驱动 第8章 NAND Flash控制器

    本章目标  了解NAND Flash 芯片的接口 掌握通过NAND Flash控制器访问NAND Flash的方法 8.1 NAND Flash介绍和NAND Flash控制器使用     NAND ...

  5. JZ2440 裸机驱动 第14章 ADC和触摸屏接口

    本章目标:     了解S3C2410/S3C2440和触摸屏的结构:     了解电阻触摸屏的工作原理和等效电路图:     了解S3C2410/S3C2440触摸屏控制器的多种工作模式:     ...

  6. JZ2440 裸机驱动 第12章 I2C接口

    本章目标: 了解I2C总线协议: 掌握S3C2410/S3C2440中I2C接口的使用方法: 12.1 I2C总线协议及硬件介绍 12.1.1 I2C总线协议 1 I2C总线的概念 2 I2C总线的信 ...

  7. JZ2440 裸机驱动 第7章 内存管理单元MMU

    本章目标:     了解虚拟地址和物理地址的关系:     掌握如何通过设置MMU来控制虚拟地址到物理地址的转化:     了解MMU的内存访问权限机制:     了解TLB.Cache.Write ...

  8. JZ2440 裸机驱动 第9章 中断体系结构

    本章目标:     了解ARM体系CPU的7种工作模式     了解S3C2410/S3C2440中断体系结构     掌握S3C2410/S3C2440的中断服务程序的编写方法 9.1 S3C241 ...

  9. JZ2440 裸机驱动 第5章 GPIO接口

    本章目标:     掌握嵌入式开发的步骤:编程.编译.烧写程序.运行     通过GPIO的操作了解软件如何控制硬件 5.1 GPIO硬件介绍     S3C2440A有130个多功能输入/输出口引脚 ...

随机推荐

  1. [Golang] 一个简易代理池

    晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...

  2. [ios]ipad下的splitViewController 让你的APP看起来酷酷的!

    在ipad下可以使用splitViewController splitViewController下包含两个viewController 这是一种将屏幕一分为二的方式. 在水平状态下会出现成两个左右两 ...

  3. exit()和_exit()和return

    exit()和return的差别: 依照ANSI C,在最初调用的main()中使用return和exit()的效果同样. 但要注意这里所说的是"最初调用".假设main()在一个 ...

  4. genymotion模拟器配置Genymotion-ARM-Translation 兼容包

    前提是你的adb的环境已经配置正确,不知道怎么配置的可参考http://jingyan.baidu.com/article/17bd8e52f514d985ab2bb800.html 如果还不成功的话 ...

  5. Automatic Trading

    Automatic Trading A brokerage firm is interested in detecting automatic trading. They believe that a ...

  6. MFC Dialog使用

    1. OnInitDialog 对话框初始化函数 在MFC主对话框OnInitDialog()中弹出对话框 BOOL CXXXDlg::OnInitDialog() { CDialogEx::OnIn ...

  7. 《从Lucene到Elasticsearch:全文检索实战》学习笔记五

    今天我给大家讲讲tf-idf权重计算 tf-idf权重计算: tf-idf(中文词频-逆文档概率)是表示计算词项对于一个文档集或语料库中的一份文件的重要程度.词项的重要性随着它在文档中出现的次数成正比 ...

  8. JAVA SE ArrayList 底层实现

    Array 查询效率高,增删效率低( Link 增删效率高 Vector 线程安全 List 列表 源代码: package com.littlepage.test; /** * 基于底层实现Arra ...

  9. Unable to find the wrapper ”https” - did youforget to enable it when you configured PHP?

    Unable to find the wrapper ”https” - did youforget to enable it when you configured PHP? 这是在Windows的 ...

  10. pandas(四)唯一值、值计数以及成员资格

    针对Series对象,从中抽取信息 unique可以得到Series对象的唯一值数组 >>> obj = Series(['c','a','d','a','a','b','b','c ...