LCD液晶屏驱动详解(2)

发布时间:2024年01月23日
  • TFT-LCD的时序

每个VSYNC信号表示一帧数据的开始;每个HSYNC信号表示一行数据的开始,无论这些数据是否有效;每个VCLK信号表示正在传输一个像素的数据,无论它是否有效。数据是否有效只是对CPU的LCD控制器来说的,LCD根据VSYNC、HSYNC、VCLK不停的读取总线数据并显示。

image-20210719223036418

上图中的时序图,分为两个部分,上面部分是一帧的时序图,下面部分是一行的时序图我们分析下时序图中每个参数的意义(上图中的①->⑩) :

  1. 对应于上述的过程1,2, VSYNC信号(代表一帧的开始)需要持续一段时间②(VSPW+1), 电子枪认为收到了VSYNC信号(即白扫射了VSPW+1行,也可以说白扫射了(VSPW+1)个HSYNC周期时间),收到信号后,还要继续持续时间③(VBPD+1), LCD控制器才开始发送有效数据, 从而电子枪发射有效像素, 即(② + ③)为LCD屏幕上边的无效区, 对于①参数, 这是手册上的数据, 即告我们默认LCD控制器发送HSYNC信号为高电平,但实际LCD接受HSYNC硬件上有可能设计成低电平有效, 所以可以对寄存器进行修改, 让LCD控制器发出HSYNC控制信号为低电平

    tips: VSPW VBPD参数会根据datasheet来具体设置(下文会提到), 设置这些参数的目的是告诉LCD控制器电子枪的反应时间以便发送帧数据(比如电子枪, 发送HSYNC后, 得知道电子枪的反应时间后才开始传送有效数据)

  2. ④为, 即有效数据为(LINEVAL+1)行,我们分辨率为480*272,所以LINEVAL为271 *

  3. ⑤VFPD+1参数对应于过程5, 当扫描到最后一行结束时(即一帧结束了),LCD控制器不会再发送有效像素数据, 此时电子枪会收游离一段时间(会继续往下白扫好几行(VFPD+1行)无效数据), 这个时间需要告诉LCD控制器,以便控制器知道等待多长时间在发送VSYNC信号,从而进行下一帧的开始

  4. 对于⑥、⑦、⑧、⑩三个参数,对应于上述过程3, 接受到HSYNC信号(表示一行的开始)后,此信号必须持续一段时间⑦(HSPW+1个VCLK周期)后, 电子枪才认为信号有效,接受到HSYNC信号后,电子枪还要反应一段时间⑧(白白扫射HBPD+1个VCLK周期后,也可以说发射HBPD+1个无效像素点)后, LCD控制器才开始传送有效数据给电子枪, 当一行扫描结束后,即LCD控制器不发射有效数据了,此时电子枪要游离一段时间⑩(HFPB+1), 这段时间需要告诉LCD控制器,以便让LCD控制器等待此段时间后在发送HSYNC信号从而进行下一行的扫描, 对于⑨参数来说, 分辨率为480*272,所以HOZVAL = 479, 即一行有480个有效数据, 注意有效数据的开始时机, 即需要经历(⑦、⑧)时间后,LCD控制器才开始发送有效数据 。

参数计算

根据LCDdatasheet确认上述参数的值, 下图为AT043TN24数据手册的时序图, 我们很容易对应上面2440手册中LCD的时序图中的参数

image-20210719223335769

上图中已经标注对应关系,就不细说了,强调一点, VSYNC与HSYNC信号都是低电平有效,但是2440手册中LCD时序是高电平有效,所以在配置寄存器时需要注意,要将这两个VSYNC,HSYNC信号设置成低电平有效(极性反转: 默认为高电平,反转后为低电平)

image-20210719223531086

我们可以看到,上图中左边是具体的参数值,Min(最小值), Typ.(典型值), Max(最大值),我们举个例子,在右图中,我们知道关系 VSPW+1 = tvp, 我们在左图中发现tvp的典型值为10, 单位是H(Hsync), 所以VSPW+1 = 10==> VSPW=9, 其余参数的取值都能通过上述方法确定, 还有个问题,VSPW, VSPD,VFBD的时间都依赖于HSYNC周期时间,那么HSYNC周期时间如何确认呢? 查看了下寄存器的设置中好像也没找到相关设置,最后在2440手册中找到这句话

image-20210719223757113

其实意思就是说 LCD控制器会根据电子枪发射像素点的个数来确认HSYNC时间的,比如我们LCD屏幕分辨率是480*272, 当发出VSYNC信号后,要经过VSPW+1反应时间,即VSPW+1个HSYNC周期,我们假设VSPW+1的值为10,那么就是10个HSYNC周期,也就是电子枪扫描了10 x 480个像素点后,LCD控制器就认为经历了10个HSYNC周期时间 。

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

2、VSYNC =1/[ {(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)} x {(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)} x {2x (CLKVAL+1) / (HCLK )} ]

3、HSYNC = 1/[{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)} x {2x (CLKVAL+1) / (HCLK )}]

image-20210718175250797

将VSYNC、HSYNC、VCLK等信号的时间参数设置好之后,并将帧内存的地址告诉LCD控制器,它即可自动地发出DMA传输从帧内存中得到图像数据,最终在上述信号的控制下出现在数据总线VD[23:0]上。用户只需要把要显示的图像数据写入帧内存中。

2、LCD控制器REGBANK寄存器组介绍

LCD控制器中REGBANK的17个寄存器可以分为6种,如下表所示:

对于TFT-LCD,一般情况下只需要设置前两种寄存器,即LCDCON和LCDSADDR

名称说明
LCDCON1~LCDCON5用于选择LCD类型,设置各类控制信号的时间特性等
LCDSADDR1~LCDSADDR5用于设置帧内存的地址
TPAL临时调色板寄存器,可以快速的输出一帧单色的图像
LCDINTPND用于LCD的中断,在一般应用中无需中断
LCDSRCPND用于LCD的中断,在一般应用中无需中断
LCDINTMSK用于LCD的中断,在一般应用中无需中断
REDLUT专用于STN-LCD
GREENLUT专用于STN-LCD
BLUELUT专用于STN-LCD
DITHMODE专用于STN-LCD
TCONSEL专用于SEC TFT-LCD

2.1、LCD控制寄存器LCDCON1

主要用于选择LCD类型、设置像素时钟、使能LCD信号的输出等,格式如下表所示:

功能说明
LINECNT[27:18]只读,每输出一个有效行其值减一,从LINEVAL减到0;
CLKVAL[17:8]用于设置VCLK(像素时钟);
MMODE[7]设置VM信号的反转效率,专用于STN-LCD;
PNRMODE[6:5]设置LCD类型,对于TFT-LCD设置0b11;
BPPMODE[4:1]设置BPP,对于TFT-LCD:0b1100 = 16BPP;
ENVID[0]LCD信号输出使能位,0:禁止,1:使能;

image-20210718173545208

文章来源:https://blog.csdn.net/weixin_45534242/article/details/135728744
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。