imx6ul 17 之RGB_LCD

一、RGB_LCD 显示原理简介

  • 1、像素点
    像素点就相当于一个“小灯”,不管是液晶屏幕,还是手机,平板,RGB_LCD屏幕都是由一个个的彩色小灯 ” 构成的 “ 。
    彩色点阵每个像素点有三个小灯:红色 绿色 蓝色,也叫做RGB,是光的三原色
    通过调整这三原色的亮度比例,就可以显示各种颜色。
  • 2、分辨率
    要想显示文字、图形、视频,就需要很多个”小灯“ / 像素点。
    分辨率说的就是像素点的个数。
    1080p、720p、2k、4k甚至是8k,描述的就是分辨率。
    1080p = 1920 × 1080。行像素点数 × 列像素点数
    显示器的尺寸有24寸、50寸等等,这个描述的是对角线的长度。
    尺寸不变的情况下,分辨率越高,显示越精细。
    ppi:(对角线上的)像素密度。
  • 3、像素格式
    如何将RGB三种颜色进行量化,每种颜色用 8 bits 表示,RGB三种颜色则需要24 bits,那么可以描述 2 的 24 次方种颜色(接近1700万)。
    现在流行 10 bit,HDR10,就是RGB 10 10 10,接近10亿种颜色。
    在 RGB888 d的基础上 再加上 8bit 的 ALPHA通道,也就是透明通道,正好是32位。
  • 4、LCD 屏幕接口
    RGB格式的屏幕,一般叫做 RGB 接口屏。
    屏幕接口有:MIPI、LVDS,MCU
    正点原子屏幕ID,使用ID可以识别不同的屏幕,在RGB_LCD屏幕上对R7,G7,B7焊接上拉或者下拉电阻实现不同的ID。弱上拉 / 下拉,有数据时不影响数据。
    正点原子的 ALPHA 底板 RGB 屏幕接口用了3个 3157 模拟开关。原因是防止 LCD屏幕上的 ID 电阻影响到 6ULL 的启动。
  • 5、LCD的时间参数
    大神

水平:
HSYNC:水平同步信号 / 行同步信号,出现此信号表示新的一行开始显现。
a.产生 HSYNC 信号,表示新的一行开始显示,HSYNC信号需要维持一段时间,这个时间叫做 HSPW / 行同步信号宽度
b.HSYNC信号完成之后,需要一段时间延迟,这段时间叫做 HBP
c.显示1024个像素点的数据,HOZAVL,就是1024个clk。
d.一行像素显示完成以后电子枪关闭,到下一行信号的 HSYNC的产生之间有个延时叫做 HFP
因此显示一行所需的时间为:( HSPW + HBP + HOZAVL +HFP )


在这里插入图片描述

垂直:
VSYNC:垂直同步信号 / 帧同步信号,出现该信号表示新的一帧开始显现。
a.VSYNC 信号持续一段时间,为VSPW。
b.VSYNC 信号完成以后,需要一段时间延迟,VBP。
c.VBP 信号结束以后,就是要显示的行数,比如600行。
d.所有的行显示完成以后,有一个 VFP 时长的延迟。
一帧所花时长:( VSPW + VBP + LINE + VFP ) × ( HSPW + HBP + HOZAVL +HFP )


  • 6、显存
    显存就是显示存储空间,采用 ARGB 8888 = 32bits = 4Bytes。这四个字节的数据表示一个像素点的信息,必须要存起来。需要流出一定的内存给lcd用,以数组的形式。

二、6ULL LCDIF 控制器接口原理

  • 1、本次实验使用 DOTCLK 接口,也就是 VSYNC,HSYNC,ENABLE(DE) 和 DOTCLK(PCLK)
  • 2、LCDIF_CTRL ,bit0 必须置1;bit1 设置为24位全部有效,为0;bit5 设置LCDIF 接口工作在主机模式下,置1;bit9 ~ 8 设置输入像素数据字长为24bit,设置为3;bit11 ~ 10 设置为3,数据传输宽度为24bit;bit13 ~ 12 设置数据交换,不需要,设置为0;bit15 ~ 14 设置输入数据交换,不需要,为0;bit17 置1,LCDIF工作在DOTCLK模式下;bit19 必须置1,工作在 DOTCLK 模式下。bit31 是复位功能,必须置0。
  • 3、LCDIF_CTRL1 的bit19 ~ 16 设置为 0x7,24位的格式。
  • 4、LCDIF_TRANSFER_COUNT bit15 ~ 0 是LCD屏幕一行的像素点数,bit31 ~ 16 表示LCD一共有多少行。
  • 5、LCDIF_VDCTRL0 bit17 ~ 0 为 VSPW参数;bit20 设置 VSYNC信号的宽度单位,置1,单位为1行的时间。bit21 同bit20,设置为1。bit24设置 ENABLE 信号极性,为0低电平有效,这里设置为1;bit25 设置时钟信号机型,设置为0;bit26设置HSYNC信号极性,设置为0,低电平有效。bit27 设置 VSYNC信号极性,设置为0,低电平有效;bit28设置为1,开启ENABLE信号;bit29 设置为0,VSYNC设置为输出;
  • 6、LCDIF_VDCTRL1 为两个VSYNC信号之间的长度。VSPW + VBP + LINE + VFP
  • 7、LCDIF_VDCTRL2 bit17 ~ 0 是两个HSYNC信号之间的长度,就是HSPW + HBP + HOZAVL +HFP;bit31 ~ 18 是 HSYNC信号的宽度,HSPW。
  • 8、LCDIF_VDCTRL3 bit15 ~ 0 是 VBP + VSPW;bit27 ~ 16 是HBP + HSPW
  • 9、LCDIF_VDCTRL4 bit17 ~ 0是一行有多少个像素点。bit18 设置为1。
  • 10、LCDIF_CUR_BUF LCD 当前缓存,显存首地址。
  • 11、LCDIF_NEXT_BUF LCD下一帧数据的首地址。
  • 12、LCD IO 初始化

三、LCD像素时钟的设置

LCD需要一个CLK信号,这个时钟信号是6ULL的CLK发送给RGB_LCD的。比如7寸1024 × 600 的屏幕需要51.2MHz的CLK。
LCDIF_CLK_ROOT 就是6ULL的像素时钟。设置PLL5(VIDEO_PLL)为时钟源。
PLL5_CLK = Fref * (DIV_SELECT + NUM/DENOM) = 24 ×
CCM_ANALOG_PLL_VIDEO 的 bit6 ~ 0 就是 DIV_SELECT,可选范围27 ~ 53.
设置PLL_VIDEO 的bit20 ~ 19 为 2,1分频;
设置CCM_ANALOG_MISC2 寄存器的 bit31~ 30 为0,就是1分频。
不使用小数分频器,因此NUM / DENOM为0,CCM_ANAOLG_PLL_VIDEO_NUM = 0,再设置CCM_ANALOG_PLL_VIDEO_DENOM = 0。
CCM_CSCDR2 的 bit17 ~ 15,设置LCDIF_PRE_CLK_SEL为0x2,选择LCDIF_CLK_ROOT的时钟源为PLL5;bit14 ~ 12 为LCDIF_PRED 位,设置前级分频,可设置0 ~ 7,对应1 到 8分频。
CCM_CBCMR 的bit25 ~ 23为 LCDIF_PODF,设置第二级分频,可以为0 ~ 7,对应1 ~ 8分频。bit11 ~ 9为 LCDIF_CLK_SEL,选择LCD_CLK的最终时钟源,设置为0,来源于 pre-muxed LCDIF clock。

四、LCD驱动程序编写

1、初始化LCD函数之前,要先读取屏幕ID,分辨是那种LCD。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值