OpenEdv-开源电子网
标题:
<新手向>第二期 裸机开发 P49-P51 第21.1-21.3讲 RGBLCD实验 随堂笔记
[打印本页]
作者:
YOKI
时间:
2021-1-10 21:56
标题:
<新手向>第二期 裸机开发 P49-P51 第21.1-21.3讲 RGBLCD实验 随堂笔记
本帖最后由 YOKI 于 2021-1-10 21:58 编辑
/********************************************/
时间 :2021/01/02/
作者 :YOKI
导师 :正点原子 左忠凯
硬件 :正点原子 ALPHA I.MX LINUX 开发板
/*******************************************/
LCD_RGB屏幕接口实验:
学习到现在,我们知道在学习一个新外设时首先都是遵循下列流程:
1、硬件原理图(工作原理)
2、寄存器功能学习
3、引脚复用 和功能设置
首先从工作原理着手,RGB_LCD显示原理如下:
LCD_RGB屏幕的每个像素点为红(R)绿(G)蓝(B)三原色小灯,通过调节不同颜色小灯的亮度进行颜色比例调节;
每种原色用 8bit 表示 RGB 888 共需要 24bit 共可描述2^24(16777216)种颜色;
在RGB 888 的基础上在加上 8bit的ALPHA通道(透明通道)构成 ARGB8888=32bit(32位) = 4Byte(4字节);
ARGB8888 数据格式:
D31
24 [A7:A0](透明通道)
D23
16 [R7:R0](红色通道)
D15
08 [G7:G0](绿色通道)
D07
00 [B7:B0](蓝色通道)
分辨率:1080P=1920*1080 表示每一行有1920个像素点,每一列有1080个像素点
显示原理:频幕按“从左到右,从上到下”的顺序不断点亮像素点,每个像素点都需要1个4Byte数据控制其像素点颜色及透明度
按1080P分辨率计算,显示一张1080P的图片需要(1920*1080)*4(Byte)数据=(8294400)Byte=8100kB=7MB
点亮一个像素点之后跳到下一个像素点需要跳转时间,
点亮每一行像素点后需要跳转到下一行像素点的开头,中间需要跳转时间
整个屏幕点亮完就显示完成一张图片(一帧)完之后再显示下一帧画面中间也需要时间;
以上这些跳转时间就是LCD的时间参数
LCD 的时间参数:
水平参数:
HSYNC 信号: 水平同步信号(行同步信号) 表示屏幕显示新的一行
1、产生HSYNC信号,表示屏幕显示新的一行,HSYNC信号得维持一段时间,这个时间叫做 HSPW
2、HSYNC信号完成以后需要一段时间延时,这段时间叫HBP(缓存芯片接收本行数据)
也就是说:显示一行需要的前期准备时间为 (HSPW+HBP)
3、点亮读一行水平像素的时间为: 水平区域显示时间(HOZVAL)
4、一行像素显示完成后需要一段是时间延时 HFP(芯片返回行数据显示完成信号)再产生HSYNC信号开始下一行显示
一整行像素显示的时序为: HSPW+HBP+(行像素显示时间)+HFP
从第一行最后一个像素显示到第二行第一个像素显示的间隔时间为:HFP+(HSPW+HBP)
以ATK4342(4.3寸 480*272) 屏幕为例 (1 tCLK = 1个时钟周期)
HSPW(也叫thp) = 1 tCLK
HBP(也叫thb) = 40 tCLK
HOZVAL(也叫thd)= 480*1 tCLK
HFP(也叫thf) = 5 tCLK
显示一行像素的时间为: HSPW+HBP+HOZVAL+HFP = (1+40+480+5)tCLK = 526 tCLK
这个时间也叫 1th,即:1th = thp+thb+thd+thf = HSPW+HBP+HOZVAL+HFP
对于ATK4342(4.3寸 480*272) 屏幕 1th = 526 tCLK;
若为ATK4384(4.3寸 800*480) 屏幕 则
1th = HSPW+HBP+HOZVAL(水平区域显示时间)+HFP = (48+88+800+40)tCLK = 976 tCLK.
垂直参数:
VSYNC 信号: 垂直同步信号(帧同步信号) 表示屏幕开始显示新的一帧画面
1、产生VSYNC信号,表示屏幕显示新的一帧,HSYNC信号得维持一段时间,这个时间叫做 VSPW
2、VSYNC信号完成以后需要一段时间延时,这段时间叫 VBP(缓存芯片接收本帧数据)
也就是说:显示一帧需要的前期准备时间为 (VSPW+VBP)
3、点亮所有行的时间为: 垂直区域显示时间(VOZVAL)
4、所有行显示完成后需要一段是时间延时 VFP(芯片返回帧数据显示完成信号) 再产生 VSYNC信号 开始下一帧显示
一帧像素显示的时序为: VSPW+VBP+VOZVAL(垂直区域显示时间)+VFP
从第一帧最后一个像素显示到第二帧第一个像素显示的间隔时间为:VFP+(VSPW+VBP)
以ATK4342(4.3寸 480*272) 屏幕为例 (1 th = 1行显示完成时间)
VSPW(也叫tvp) = 1 th
VBP(也叫tvb) = 8 th
VOZVAL(也叫tvd)= 272*1 th
VFP(也叫tvf) = 8 th
显示一帧的时间为: VSPW+VBP+VOZVAL+VFP = (1+8+272+8)th = 289 th
若为ATK4384(4.3寸 800*480) 屏幕 则
VSPW+VBP+VOZVAL+VFP = (3+32+480+13)th = 528 th
以上是和LCD屏幕硬件相关的时序逻辑也是显示原理。
再来看寄存器:
6ULL的液晶显示接口控制器叫 eLCDIF(增强型液晶显示接口)
使用 DOTCLK 接口驱动屏幕
DOTCLK接口 有VSYNC、HSYNC、ENABLE、和DOTCLK(PCLK)四种信号线。
和显示原理中的 HSYNC水平同步信号(行同步信号)和 VSYNC垂直同步信号(帧同步信号)对应
DOTCLK接口 也被称为 RGB接口。
1、LCDIF_CTRL 寄存器(LCD通用控制寄存器),
bit0 必须置 1, SOC 与LCD屏之间传递数据
bit1 RGB数据格式位置0表示24位,即表示颜色数据为 RGB888
bit2 RGB数据格式位置1表示18位,即表示颜色数据为 RGB666
bit3 RGB数据格式位置1表示16位,即表示颜色数据为 RGB565
bit1-bit3 受 bit8-9(WORD_LENGTH) 的约束
bit4 保留位
bit5 置1 LCDIF接口工作在主机模式下
bit7 RGB和YCbCr颜色转换位
bit8-9(WORD_LENGTH) 数据格式位 置为 0x3(11) 设置为24位 (bit1置0)
0x0(00) 表示16位
0x1(01) 表示08位
0x2(10) 表示18位
0x3(11) 表示24位
bit10-11(LCD_DATABUS_WIDTH) LCD数据总线传输宽度 置为 0x3(11) 设置为24位 (bit1置0)
0x0(00) 表示16位
0x1(01) 表示08位
0x2(10) 表示18位
0x3(11) 表示24位
bit12-bit13 设置数据交换 (不需要,设置为00)
bit14-bit15 设置输入数据交换 (不需要,设置为00)
bit16 命令模式设置位 当bit1(Run)为0时才需要设置 (不需要,设置为0)
bit17(DOTCLKMODE) 置1 LCDIF接口工作在 DOTCLK模式下(置1);
bit18(VSYNC_MODE) 置1 LCDIF接口工作在 VSYNC_MODE 模式下(不需要,设置为0);
bit19(BYPASS_COUNT) 旁路计数器 工作在DVI和DOTCLK模式下必须置1;
bit31 复位功能 必须置0
2、LCDIF_CTRL1 寄存器
bit16-bit19 数据有效位设置,默认设置为0xf(1111)32位有效(对应ARGB 8888)
这里设置位0X7(0111)对应24位有效 RGB888(屏蔽了A通道)
3、LCDIF_TRANSFER_COUNT 寄存器
bit0-bit15 LCD屏一行的像素数
bit16-bit31 LCD屏一列的像素数
以ATK4342(4.3寸 480*272) 屏幕为例 bit0-bit15 =480,bit16-bit31 = 272
若为ATK4384(4.3寸 800*480) 屏幕 则 bit0-bit15 =800,bit16-bit31 = 480
4、LCDIF_VDCTRL0 寄存器 VSYNC模式和DOTCLK模式下的控制寄存器
bit0-bit17 为VSPW参数
bit20 设置VSYNC脉宽信号的单位,默认为0(显示1个像素的时钟周期),设置为1(显示1整行的时间) 这里置1
bit21 设置VSYNC周期的单位,设置为1(显示1整行的时间)
bit24 设置ENABLE信号极性 ,设置为1(高电平有效)
bit25 设置CLK信号极性 ,设置为0(上升沿有效)
bit26 设置HSYNC信号极性 ,设置为0(低电平有效)
bit27 设置VSYNC信号极性 ,设置为0(低电平有效)
这些信号极性参数和屏幕硬件属性本身有关
bit28 设置为1 由硬件产生ENABLE信号
bit29 设置为0 VSYNC输出(VSYNC信号由eLCDIF产生)DOTCLK模式下必须置0
5、LCDIF_VDCTRL1 寄存器 VSYNC信号的周期
根据显示原理VSYNC信号周期即为 帧刷新周期
以ATK4342(4.3寸 480*272) 屏幕为例,
显示一帧的时间为: VSPW+VBP+VOZVAL+VFP = (1+8+272+8)th = 289 th
若为ATK4384(4.3寸 800*480) 屏幕 则
VSPW+VBP+VOZVAL+VFP = (3+32+480+13)th = 528 th
6、LCDIF_VDCTRL2 寄存器 HSYNC信号参数
bit0-bit17 HSYNC信号的周期,即显示一行的时间
以ATK4342(4.3寸 480*272) 屏幕为例,
显示一行像素的时间为: HSPW+HBP+HOZVAL+HFP = (1+40+480+5)tCLK = 526 tCLK
若为ATK4384(4.3寸 800*480) 屏幕 则
显示一行像素的时间为: HSPW+HBP+HOZVAL+HFP = (48+88+800+40)tCLK = 976 tCLK
bit18-bit31 HSYNC 信号的脉宽(HSPW)
以ATK4342(4.3寸 480*272) 屏幕为例 HSPW = 1 tCLK
若为ATK4384(4.3寸 800*480) 屏幕 则 HSPW = 48 tCLK
7、LCDIF_VDCTRL3 寄存器 设置垂直与水平等待(vertical and horizontal wait count)计数
bit0-bit15 VSPW+VBP时间
bit27-bit16 HSPW+HBP时间
8、LCDIF_VDCTRL4 寄存器 显示数据时间
bit0-bit17 HOZVAL时间(传输一整行数据所需的时钟数)
以ATK4342(4.3寸 480*272) 屏幕为例,1行有480个像素点
一行像素数据传输时间:HOZVAL = 480 tCLK
若为ATK4384(4.3寸 800*480) 屏幕 则 1行有800个像素点
一行像素数据传输时间:HOZVAL = 800 tCLK
9、LCDIF_CUR_BUF LCD当前缓存 显存首地址 (存储一帧数据)
10、LCDIF_NEXT_BUF LCD下一帧数据存储地址 下一帧数据首地址
D频幕接口: RGB格式的屏幕,一般叫做RGB接口屏。
屏幕接口有:MIPI、LVDS、MCU、RGB接口
以下主讲RGB接口
以上注释和代码都是在学习 《正点原子 linux 第二期 裸机开发视频 P49-P51 第21.1-21.3讲 RGBLCD实验_LCD显示原理、时序逻辑、接口寄存器 》 过程中
跟着 左萌主 学习并加入了一点点自己的思考写成的,作为一个小菜鸡,我大着胆子发出来跟大家一起记录学习
如果有帮助请大家自行参考、下载,如果 转载 请注明出处,并在论坛和我联系。如果有错误请大神指正!左萌主赛高!
作者 :YOKI
导师 :正点原子 左忠凯
硬件 :正点原子 ALPHA I.MX LINUX 开发板
/*********************************************************************************************/
作者:
flyzeng
时间:
2021-1-12 15:43
沙发,搬凳子,多写学习笔记不错
欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/)
Powered by Discuz! X3.4