OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5477|回复: 1

<新手向>第二期 裸机开发 P49-P51 第21.1-21.3讲 RGBLCD实验 随堂笔记

[复制链接]

5

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-3-22
在线时间
35 小时
发表于 2021-1-10 21:56:52 | 显示全部楼层 |阅读模式
本帖最后由 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 数据格式:
                D3124    [A7:A0](透明通道)
                D2316    [R7:R0](红色通道)
                D1508    [G7:G0](绿色通道)
                D0700    [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 开发板
/*********************************************************************************************/

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

200

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
1063
金钱
1063
注册时间
2019-9-19
在线时间
194 小时
发表于 2021-1-12 15:43:49 | 显示全部楼层
沙发,搬凳子,多写学习笔记不错
=======================
出征,嗒嗒嗒——
快点上车!
=======================
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 08:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表