当前位置:   article > 正文

正点原子I.mx6u LCD显示_正点原子串口接收数据用lcd显示

正点原子串口接收数据用lcd显示

1 LCD简介

1.1 LCD简介

  1. 分辨率
      LCD显示器是由一个个像素点组成的,LCD的分辨率是表示像素点个数多少的。
      1080P分辨率的像素点的个数是:1920*1080=2073600个像素点,1080分辨率的屏幕是一行由1080个像素点,共1920行。
      分辨率是显示器的一个重要参数,但是并不是分辨率越高LCD就越好,尺寸相同的显示器,分辨率高的会比分辨率低的贵。
  2. 像素格式
      显示器的像素格式有RGB888,ARGB8888,RGB565等等。RGB888与ARGB8888的区别是ARGB8888有Alpha(透明)通道。
  3. LCD屏幕接口
      LCD屏幕的接口有很多种,常见的有VGA、HDMI、DP等等。但是I.MX6U-ALPHA开发板不支持这些接口。I.MX6U-ALPHA支持RGB接口的LCD,RGBLCD接口的信号线如下:
信号线描述
R[7:0]8根红色数据线
G[7:0]8根绿色数据线
B[7:0]8根蓝色数据线
DE数据使能线
VSYNC垂直同步信号线
HSYNC水平同步信号线
PCLK像素时钟信号线
表1 RGB数据线

   RGB LCD一般有两种驱动模式:DE模式和HV模式,这两种模式的区别是DE需要用到DE信号线,但是可以不需要使用HSYNC信号线;HV模式不需要使用DE信号线。

4.LCD时间参数
LCD显示器一帧图像扫描图
LCD一帧图像扫描图

一帧图像扫描图

   一帧图像是由一行一行组成的。

  • HSYNC:水平同步信号,也叫行同步信号,产生此信号的时候就表示要开始显示新的行。
  • VSYNC:垂直同步信号,也叫做帧同步信号,产生此信号的时候表示要开始显示新的一帧图像。
  • HBP:HSYNC信号结束到电子枪重新打开之间的延时时间(当显示完一行以后会发出HSYNC信号,此时电子枪会关闭,然后迅速移动到屏幕左边)。
  • HFP:当显示完一行以后电子枪关闭,等待HSYNC信号的产生,关闭电子枪到HSYNC信号产生之间会插入一段延时,这段延时是HFP。
  • VFP:当显示完一帧图像后,电子枪也会关闭,然后等待VSYNC信号的产生。在等待VSYNC产生的这段时间是VFP。
  • VBP:VSYNC信号产生后,电子枪移动到屏幕的左上角,当VSYNC信号结束后电子枪重新打开,中间也会加入一段延时,这段延时是VBP。
      HBP、HFP、VBP、VFP是CRT显示器存在黑边的原因。现在的LCD显示器虽然不需要使用电子枪了,为何还会存在黑边的原因是LCD屏幕内部有一个IC,发送一行或一帧数据给IC,IC是需要反映时间的。通过这段反映时间是可以让IC识别到一行数据扫描完成,需要换行了,或一帧数据扫描完成,要开始下一帧图像了。因此,在LCD屏幕中继续存在HBP、HFP、VBP、VFP这四个参数,其主要目的是为了锁定有效的像素数据。这四个参数具体值需要查看LCD手册。
  1. RGBLCD屏幕时序
    (1)行显示时序
    行显示时序
图1 行显示时序
  • HSPW:HSYNC信号的宽度,也就是HSYNC信号的持续时间,单位为CLK。
  • HBP:行同步信号后肩,单位CLK。
  • HOZVAL:显示一行数据所需时间,假设屏幕分辨率为1024*600,则HOZVAL就是1024。
  • HFP:行同步信号前肩,单位CLK。
      当HSYNC信号发出后,需要等待HSPW+HBP个CLK时间才会接收到真正有效的像素数据。当显示完一行数据后,需要等待HFP个CLK时间才能发出下一个HSYNC信号。所以显示一行所需要的时间就是HSPW+HBP+HOZVAL+HFP。

(2)帧显示时序
帧显示时序

图2 帧显示时序
  • VSPW:VSYNC信号宽度,也就是VSYNC信号持续时间,单位为1行的时间。
  • VBP:帧同步后肩,单位为1行的时间
  • LINE:显示一帧有效数据所需时间,假设屏幕分辨率为1024*600,则LINE就是600行的时间。
  • VFP:帧同步后肩,单位为1行的时间。
      显示一帧所需要的时间就是:VSPW+VBP+LINE+VFP个行时间,最终计算公式:
    T = ( V S P W + V B P + L I N E + V F P ) × ( H S P W + H B P + H O Z V A L + H F P ) T = (VSPW+VBP+LINE+VFP)\times(HSPW+HBP+HOZVAL+HFP) T=(VSPW+VBP+LINE+VFP)×(HSPW+HBP+HOZVAL+HFP)
  1. 像素时钟
      像素时钟就是RGB LCD的时钟信号。
      以ATK7016这款屏幕为例,显示一阵图像所需要的时钟数是:
    T = ( V S P W + V B P + L I N E + V F P ) × ( H S P W + H B P + H O Z V A L + H F P ) = ( 3 + 20 + 600 + 12 ) × ( 20 + 140 + 1024 + 160 ) = 635 × 1344 = 853440
    T=VSPW+VBP+LINE+VFP)×(HSPW+HBP+HOZVAL+HFP)=(3+20+600+12)×(20+140+1024+160)=635×1344=853440
    T=VSPW+VBP+LINE+VFP)×(HSPW+HBP+HOZVAL+HFP)=(3+20+600+12)×(20+140+1024+160)=635×1344=853440

      显示一帧图像需要853440个时钟数,那么显示60帧就是:
    853400 × 60 = 51206400 ≈ 51.2 M 853400\times60=51206400\approx51.2M 853400×60=5120640051.2M
    所以像素时钟就是51.2MHz
  2. 显存
      存储一帧数据所用内存的大小,RGB LCD内部是没有内存的,所以就需要在开发板上的DDR3中分出一段内存作为RGB LCD屏幕的显存,如果在屏幕上显示什么图像的话直接操作这部分显存即可。

1.2 eLCDIF接口

  1. ELCDIF接口是I.MX6U自带的液晶屏接口,用于连接RGB LCD接口的屏幕,eLCDIF接口特性如下:
    • ① 支持RGB LCD的DE模式
    • ② 支持VSYNC模式,以实现高速数据传输。
    • ③ 支持ITU-R BT.656格式的4:2:2的YCbCr数字视频,并且将其转换为模拟TV信号。
    • ④ 支持8/16/18/24/32位:LCD。
  2. eLCDIF的三种接口
    eLCDIF支持三种接口:MPU接口、VSYNC接口和DOTCLK接口。

1.2.1 MPU接口

  MPU接口用于在I.MX6U和LCD屏幕直接传输数据和命令,这个接口用于6080/8080接口的LCD屏幕,如果寄存器LCDIF_CTRL的DOTCLK_MODE、DVI_MODE和VSYNC_MODE都为0的话就表示LCDIF工作在MPU接口模式。

1.2.2 VSYNC接口

  VSYNC接口时序和MPU接口时序基本一样,只是多了VSYNC信号来作为帧同步,当LCEIF_CTRL的VSYNC_MODE为1的时候,此接口使能。正点原子的开发板不使用VSYNC接口。

1.2.3 DOTCLK接口

  DOTCLK接口就是用来连接RGB LCD接口屏幕的,它包括VSYNC、HSYNC、DOTCLK和ENABLE这四个信号,这样的接口通常被称为RGB接口。正点原子教程中使用的就是该接口。

ELCDIF驱动

LCDIF_CTRL寄存器

SFTRST[31]:eLCDIF软复位控制位,此为为1时强制复位LCD。
CLKGATE[30]:正常运行模式下,此位必须为0,如果此位为1,时钟就不会进入到LCDIF。
BYPASS_COUNT[19]:工作在DOTCLK模式的时此位必须为1。
VSYNC_MODE[18]:为1 时,工作在VSYNC接口模式。
DOTCLK_MODE[17]:为1时,工作在DOTCLK接口模式。
INPUT_DATA_SWIZZLE[15:14]:输入数据字节交换设置,

0:	小端模式,不交换字节,
1:	大端模式,交换所有字节
2:	交换半字节,
3:	在每个半字内交换字节
  • 1
  • 2
  • 3
  • 4

CSC_DATA_SWIZZLE[13:12]:CSC数据字节交换设置,交换方式同上。
LCD_DATABUS_WIDTH[11:10]:LCD数据总线宽度

0:	16位宽
1:	8位宽
2:	18位宽
3:	24位宽
  • 1
  • 2
  • 3
  • 4

WORD_LENGTH[9:8]:输入数据格式,也就是像素数据宽度

0:	16位宽
1:	8位宽
2:	18位宽
3:	24位宽
  • 1
  • 2
  • 3
  • 4

MASTER[5]:为1时,设置eLCFIF工作在主模式
DATA_FORMAT_16_BIT[3]:当此位为 1 并且 WORD_LENGTH 为 0 的时候像素格式为 ARGB555,当此位为 0 并且 WORD_LENGTH 为 0 的时候像素格式为RGB565。
DATA_FORMAT_18_BIT[2]:只有当 WORD_LENGTH 为 2 的时候此位才有效,此位为 0 的话低 18 位有效,像素格式为 RGB666,高 14 位数据无效。当此位为 1 的话高 18 位有效,像素格式依旧是 RGB666,但是低 14 位数据无效。
DATA_FORMAT_24_BIT[1]:只有当 WORD_LENGTH 为 3 的时候此位才有效,为 0 的时候表示全部的 24 位数据都有效。为 1 的话实际输入的数据有效位只有 18 位,虽然输入的是24 位数据,但是每个颜色通道的高 2 位数据会被丢弃掉。
RUN[0]:eLCDIF接口运行控制位,此位为1,eLCDIF接口开始传输数据,也就是eLCDIF使能位。

LCDIF_CTRL1

此 寄 存 器 只 用 到 BYTE_PACKING_FORMAT(bit19:16),此位用来决定在 32 位的数据中哪些字节的数据有效,默认值为 0XF,也就是所有的字节有效,当为 0 的话表示所有的字节都无效。如果显示的数据是24 位(ARGB 格式,但是 A 通道不传输)的话就设置此位为 0X7。

LCDIF_TRANSFER_COUNT

这个寄存器用来设置所连接的 RGB LCD 屏幕分辨率大小,寄存器LCDIF_TRANSFER_COUNT分为两部分,高16位和低16位,高16位是V_COUNT,是 LCD 的垂直分辨率。低 16 位是 H_COUNT,是 LCD 的水平分辨率。如果 LCD 分辨率为1024*600 的话,那么 V_COUNT 就是 600,H_COUNT 就是 1024。

LCDIF_VDCTRL0

这个寄存器是 VSYNC 和 DOTCLK 模式控制寄存器 0
VSYNC_OEB[29]:VSYNC 信号方向控制位,

0 : VSYNC 是输出
1 :VSYNC 是输入
  • 1
  • 2

ENABLE_PRESENT[28]:EBABLE 数据线使能位,也就是 DE 数据线。

1 :使能ENABLE 数据线,
 0 :关闭 ENABLE 数据线。
  • 1
  • 2

VSYNC_POL[27]:VSYNC 数据线极性设置位,要根据所使用的 LCD 数据手册来设置。

 0 : VSYNC 低电平有效
  1 : VSYNC 高电平有效,
  • 1
  • 2

HSYNC_POL[26]:HSYNC 数据线极性设置位,要根据所使用的 LCD 数据手册来设置。

 0 : HSYNC 低电平有效
 1 : HSYNC 高电平有效
  • 1
  • 2

DOTCLK_POL[25]:DOTCLK 数据线(像素时钟线 CLK) 极性设置位,要根据所使用的 LCD 数据手册来设置。

0 :下降沿锁存数据,上升沿捕获数据
1 :相反
  • 1
  • 2

ENABLE_POL[24]:EANBLE 数据线极性设置位,

0:低电平有效,
1:高电平有效。
  • 1
  • 2

VSYNC_PERIOD_UNIT[21]:VSYNC 信号周期单位,如果使用 DOTCLK 模式话就要设置为 1。

0:VSYNC 周期单位为像素时钟。
1:VSYNC 周期单位是水平行,
  • 1
  • 2

VSYNC_PULSE_WIDTH_UNIT[20]: VSYNC 信 号 脉 冲 宽 度 单 位 , 和VSYNC_PERIOD_UNUT 一样,如果使用 DOTCLK 模式的话要设置为 1。
VSYNC_PULSE_WIDTH[17:0]:VSPW 参数设置位

LCDIF_VDCTRL1

这个寄存器是 VSYNC 和 DOTCLK 模式控制寄存器 1,此寄存器只有一个功能,用来设置 VSYNC 总周期,就是:屏幕高度+VSPW+VBP+VFP。

LCDIF_VDCTRL2

这个寄存器分为高 16 位和低 16 位两部分,高 16位是 HSYNC_PULSE_WIDTH,用来设置 HSYNC 信号宽度,也就是 HSPW。低 16 位是HSYNC_PERIOD,设置 HSYNC 总周期,就是:屏幕宽度+HSPW+HBP+HFP。

LCDIF_VDCTRL3

HORIZONTAL_WAIT_CNT[27:16]:此位用于 DOTCLK 模式,用于设置 HSYNC 信号产生到有效数据产生之间的时间,也就是 HSPW+HBP。
VERTICAL_WAIR_CNT[15:0]
和 HORIZONTAL_WAIT_CNT 一样,只是此位用于VSYNC 信号,也就是 VSPW+VBP。

LCDIF_VDCTRL4

SYNC_SIGNALS_ON:同步信号使能位,为1,使能VSYNC、HSYNC、DOTCLK这些信号。
DOTCLK_H_VALID_DATA_CNT[15:0]:设置LCD的宽度,也就是水平像素数量。

LCDIF_CUR_BUF和LCDIF_NEXT_BUF

这两个寄存器分别是当前帧和下一帧缓冲区,也就是LCD显存。一般这两个寄存器保存同一个地址,也就是划分给LCD的显存首地址。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/474731
推荐阅读
相关标签
  

闽ICP备14008679号