zoukankan      html  css  js  c++  java
  • JZ2440 裸机驱动 第13章 LCD控制器(1)

    本章目标 
    了解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所示。
     (2)对于TFT LCD。
        TFT LCD的TTL信号与STN类似(如表13.2所示),只是其数据线多大24根,对应像素值
    中的每一位。
        
    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所示。
         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所示。
         “有效数据”的行数、列数,即分辨率,它与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。
    (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所示。
     
     (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)。
     (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所示。
        调色板中数据存放的格式与上面所描述的16BPP显示模式相似,也分两种格式:5:6:5、
    5:5:5:1.调色板中数据的格式及与LCD数据线VD[23:0]的对应关系,如表13.3和表13.4所示。
     注意:① 0x4d00 0400是调色板的起始地址;
         ② 5:5:5:1格式下,VD18、VD10和VD2三个数据线中都是亮度值1,即最低位的值。
         ③ 当LCDCON5寄存器中的VSTATUS、HSTATUS有效时,不能读写调色板;
        各种模式下用来传输红、绿、蓝三种原色的颜色值的VD数据线如表13.5所示。 

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

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

        各寄存器格式如表13.11、13.14和13.13所示。
     
     
        注:可以修改LCDBASEU、LCDBASEL的值来实现图像的移动,不过不能在一帧图像的
    结束阶段(LCDCON1寄存器的LINECNT为0时)进行修改,因为此时LCD控制器会优先取得下一
    帧的数据,之后才改变这些值。这样的话,这些数据与新的帧缓冲区就不一致。
        注:OFFSIZE、PAGEWIDTH的值只能在ENVID(LCDCON1寄存器的信号输出使能位)为0时修改。
    (7)临时调色板寄存器TPAL。
        如果要输出一帧单色的图像,可以在TPAL寄存器中设定这个颜色值,然后使能TPAL寄存器,
    这种方法可以避免修改整个调色板或帧缓冲区。
        TPAL寄存器格式如表13.14所示。
        注:临时调色板寄存器TPAL可以在任何显示模式下,并非只能用在8BPP模式下。
     
  • 相关阅读:
    iOS去除导航栏和tabbar的横线
    各种坑
    iOS系统消息
    文件的读写
    MAC机中安装ruby环境--转载
    一句话处理服务器头像的尺寸
    开一个线程来处理 耗时的操作
    angular2中一种换肤实现方案
    一句话说明==和equals的区别
    下拉框样式在不同浏览器的简单兼容
  • 原文地址:https://www.cnblogs.com/sz189981/p/7721948.html
Copyright © 2011-2022 走看看