当前位置: 首页 > article >正文

IMX6UL的RGB的显示实验

        LCD液晶屏是常用到的外设,通过LCD可以显示绚丽的图形、界面等,提高人机交互的效率。IMX6U提供了一个eLCDIF接口用于连接RGB接口的液晶屏。这一节实验就开始学习如何驱动RGB接口液晶屏

        LCD全程是(Liquid Crystal Display),也就是液晶显示器,是现在最常用到的显示器,手机、电各种人机交互设备等基本都用到了LCD,最常见的就是手机和电脑显示器了。现在先从几个关键点来介绍LCD

        LCD简介


        1.分辨率,LCD显示器我们经常见到720P,1080P、2K或者4K,这个就是显示器的分辨率。LCD显示器都是由一个一个的像素点组成。LCD显示器都是由一个一个的像素点组成,像素点就类似于一个灯,这个小灯是RGB灯,也就是由R(红色)、G(绿色)和B(蓝色)这三种颜色组成的,而RGB就是光的三原色。1080P的意思就是一个LCD的像素数量是1920*1080个,也就是屏幕一列1080个像素点,一共1920列

        如上图就是1080P显示器的像素示意图,X轴就是LCD显示器的横轴,Y轴就是显示器的竖轴。图中的小方块就是像素点,相当于整个LCD有1920*1080=2073600个像素点。左上角的A点也就是第一个像素点,右下角的C点就是最后一个像素点。2K就是2560*1440个像素点,分辨率如果不变的情况,显示器越小那就越清晰,比如同样为1K的手机和电脑,也就是像素密度的问题
        但是在实际情况当中并不是分辨率越高的LCD就越好,例如还有色彩还原程度、色彩偏离、亮度、可视角度、屏幕刷新率等其他参数

        2、像素格式
        上面提到过,一个像素点就相当于一个RGB小灯,通过控制RGB三种颜色亮度就可以显示楚各种各样的色彩,那么一般如何控制这三种颜色显示的亮度呢,一般一个RGB这三部分使用8bit的数据,也就是意味着每个颜色通道可以表示256种不同的亮度级别(2的8次方=256),每一位字节都可以是0和1,所以八位可以组成从00000000(0)到11111111(255)的所有二进制数,代表了从有颜色到这个颜色的最大亮度
        8位对应一个字节,一个像素点是8bit*3(3个颜色)=24,是3个字节来控制一个元素,这种像素格式一般被称为RGB888,。如果再加入8bit的Alpha(透明)通道的话一个像素点就等于是32bit,也就是四个字节控制一个像素点,这种像素格式被称为ARGB8888吗,字节分别位如下所示 

        如上图,bit31-24是Alpha通道 ,Alpha通道是一个在图像文件中用于存储透明度信息的额外通道。Alpha通道则是一个额外的、非彩色的通道,它用来定义图像的哪个部分是完全不透明的,哪个部分是半透明的,以及哪个部分是完全透明的。
        例如,使用具有Alpha通道的PNG格式图像可以创建具有透明背景的图像,这对于设计复杂的布局或实现图形元素的平滑过渡非常有帮助。
        剩下的依次就是bit23~16是RED通道,bit15~14是GREEN通道,bit7~bit0是Blue通道。所以红色对应的值就是0x00FF000,蓝色对应的值就是0x000000FF,绿色对应的值就是0x0000FF00。调节R、G、B的比例就可以产生其他元素,例如0X00000000就是黑色,0x00FFFFFF就是白色,这调色板里面就可以获取到我们想要的颜色

   

        3、LCD屏幕接口

        LCD屏幕或者说显示器有很多接口,比如再显示器上常见的VGA、HDMI等等,但是IMX6ul开发板不支持这些接口。它支持RGB接口的LCD。RGBLCD接口的信号线如下表

        上表,是RGBLCD的信号线,R[7:0]、G[7:0]和B[7:0]这24根是数据线,DE、VSYNC、HSYNC和PCLK这四根是控制信号线。RGB LCD一般有两个驱动模式,DE模式和HV模式,这两个模式的区别在于DE模式需要使用DE信号线,而HV模式不需要使用DE信号线,在DE模式下可以不需要HSYNC信号线的,即使不接HSYNC信号线,LCD也可以工作

        DE模式:在DE模式下,使用DE(Data Enable)信号来确定有效数值。当DE信号为高电平时,表示当前传输的数据是有效的,这种模式通常用于高速数据传输,因为它可以直接从系统内存读取数据并显示在屏幕上,无需经过额外的数据处理

        HV模式:HV模式则需要行(HSYNC信号线)和场同步信号线(VSYNC信号线)来表示扫描的行和列。HSYNC和VSYNC信号分别用于控制水平方向和垂直方向的同步,以确保图像能够正确显示在屏幕上

        ALIENTEK一共有三款RGB LCD屏幕,博主使用的是ATK-7016(7寸 1024*600),这里就统一用这个视频讲解,下面我们看一下ATK-7016屏幕接口原理图如图

        图中J1就是对外接口,是一个40PIN的FPC座(0.5mm间距),通过FPC线,可以连接到IMX6UL开发板上,从而实现和IMX6U的连接。该接口十分完善,从用RGB888格式,并支持DE&HV模式,还支持触摸屏和背光控制。右侧的几个电阻,并不都是焊接的,而是可以用户自己选择。默认情况,R1和R6焊接。设置LCD_LR和LCD_UD,控制LCD的扫描方向,是从左到右,从上到下(横屏看)

        LCD_R7/G7/B7则用来设置LCD的ID,由于RGBLCD没有读写寄存器,也就没有所谓的ID,这里我们通过在模块上面,控制R7/G7/B7的上/下拉,来自定义LCD模块的ID,帮助MCU判断当前LCD面板的分辨率和相关参数,以提高程序的兼容性,关系如下表  
        LCD中的ID通常是指设备识别码(ID),用于区分不同型号的LCD显示屏。具体来说这些引脚可以通过高低电平来传递LCD面板的信息。例如,通过将某些引脚连接到待定的电平,主控芯片可以通过读取这些引脚的状态来得知当前连接的LCD显示屏的型号或特定配置,所以总的来说LCD的这些引脚在这里作ID配置引脚,目的是帮助主控芯片识别连接的RGB LCD的型号和配置,虽然没有寄存器来存储和读取该ID
        虽然主控芯片可以读取引脚状态来得知LCD显示屏,不如I2C和SPI接口读取寄存器那么动态,,在硬件设计中,设备通常通过I2C,SPI等协议于主控芯片进行通信,这样可以通过动态读取或修改设备的状态和配置

        ATK-7016模块,就设置M2:M=010即可。这样,我们在程序里里面,读取LCD_R7/G7/B7,得到M0:M2的值,从而判断RGBLCD模块的型号,并执行不同的配置,即可实现不同LCD模块的兼容

        4、LCD时间参数

        如果将LCD显示一帧图像的过程可以想象成绘画,那么在显示的过程中就是用一根“笔”在不同的像素点画上不同的颜色。顺序为从左至右、从上到下的顺序扫描每个像素点,并且在像素画上对应的颜色,当画到最后一个像素点的时候一幅图像就绘制好了。加入一个LCD的分辨率为1024*600

        结合图中,LCD是怎么扫描显示一帧图像的。一帧图像也是由一行一行组成的。HSYNC是水平同步信号。当产生此信号的话就开始显示新的一行了,所以此信号都是在图的最左边。当VSYNC信号是垂直同步信号,当产生此信号的话就表示显示新的一帧图像了,所以此信号在图中左上角
        在图中,可以看到一圈黑边,实际有效的显示区域是中间白色区域, 这一圈黑边要回溯到以前的显示器,CRT显示器

        这种显示器的后面有电子枪,这个电子枪就类似上面所说的那个画笔,电子枪打出的电子撞击到屏幕上的荧光物质使其发光。只要控制电子枪从左到右扫完一行(也就是扫描一行),然后从上到下扫描完所有行,一帧图像也就是这么显示器完成的,也就是说显示一帧图像电子枪是按照从上到下扫描完所有行,这样一帧图像就显示出来了,扫描速度很快的时候看起来就是一幅完整的画面了
       在一行图像完全显示完毕并关闭电子枪后,到HSYNC信号在此产生之前,也会插入一段延时,这段延时被称为水平前肩(Horizontal Front Porch, HTP),HFP为了确保屏幕稳定性和准确性,它提供了一个缓冲时段,用于调整电子枪并准备接受HSYNC信号
        HBP是在HSYNC信号结束之后,新一行数据开始显示之前的一段时间,用于电子枪的稳定和准备
        
        

        HSYNC是(水平同步信号),会产生延时,那么同样VSYNC(垂直同步信号)自然也会产生延时,显示完一帧图像后电子枪也会关闭,等待VSYNC信号产生,期间也会加入延时也就是VFP
       当显示完一帧图像以后电子枪也会关闭,然后等到VSYNC信号产生,期间也会延时就是图中VFP
        VSYNC信号产生,电子枪启动到左上角,当VSYNC信号结束后电子枪重新打开,中间也会加入一段延时,这段延时就是VBP

        HBP、HFP、VBP和VFP就是导致图中黑边的原因,但是这是CRT显示器存在黑边的原因,但是LCD显示器不需要电子枪了为何还有黑边。
        因为RGBLCD屏幕内部有一个IC(集成电路)IC也是需要反应时间的。通过这段时间可以让IC识别到一行数据扫描完了,要进行换行,或者一帧图像扫描完了,要开始下一帧图像显示了。因此存在这四个参数的主要目的就是为了锁定有效的像素数据。这四个显示时间是LCD重要的参数

        5、RGBLCD屏幕时序

        上面讲了行显示和帧显示,下麦呢我们就来看一下行显示的时序图,如下图

        上图有几个重要的参数:

        HSYNC:行同步信号,当此信号有效的话就表示开始显示新的一行数据,查阅所使用的LCD数据手册可以知道此信号是低电平有效还是高电平有效

        HSPW(水平脉冲同步宽度):HSYNC信号宽度,也就是HSYNC信号持续时间。HSYNC信号不是一个脉冲(脉冲是瞬间发生的信号变化),而是需要持续一段时间才是有效的,才能确保接受设备能够正确同步并显示图像,单位为CLK

        HBP:前面说过,名字即为同步信号后肩,单位为CLK

        HOZVAL: 显示一行数据所需的时间,例如屏幕分辨率为1024*600,那么HOZVAL就为1024,描述显示一行数据所需的时间或者像素数量,单位为CLK

        HFP:在前面也说过,叫做行同步信号前肩,单位为CLK

        当HSYNC信号发出以后,需要等待HSPW+HBP个CLK时间才会接收到真正有效的像素数据。当显示完一行数据以后需要等待HFP个CLK时间才能发出下一个HSYNC信号,所以显示一行所需的时间是:HSPW + HBP + HOZVAL +HFP

        上面我们对于一行显示的时序进行了讲解,一帧图像就是由很多个行组成的,RGBLCD的帧显示时序如下图,

        VSYNC:帧同步信号,当此信号有效的话就表示开始显示新的一帧数据,查阅相关手可以知道此信号是低电平还是高电平有效,这里假设低电平

        VSPW:VSYNC信号宽度,也就是VSYNC信号持续时间

        VSB:前面讲解过,叫做帧同步信号后肩,单位为1行的时间

        Line:显示一帧有效数据所需的时间,假如屏幕分辨率为1024*600,Line就是显示600行的时间

        VFP:帧同步信号前肩,单位为CLK,一行时间

        显示一帧所所需要的时间就是:VSPW + VBP + LINE + VFP个行时间

        最终的计算公式是:
        T = (VSPW + VBP + LINE + VFP)* (HSPW + HBP + HOZVAL + HFP)
因此我们在配置一款RGB LCD的时候就需要知道如上参数,HOZVAL(屏幕有效宽度)、LINE(屏幕有效高度)、HBP、HSPW、HFP、VSPW、VBP和VFP

        下面我们看一下博主这款屏幕的参数,

        6、像素时钟

        像素时钟就是RGB LCD的时钟信号,以ATK7016这款屏幕为例,显示一帧图像所需要的时钟数就是:
        = (VSPW + VBP + LINE + VFP)* (HSPW + HBP + HOZVAL + HFP)
        =   (3 + 20 + 600 + 12)  *  (20 + 140 + 1024 + 160)
        =    853440

        显示一帧图像需要853440个时钟数,那么显示60帧就是:853440*60 =51206400 约等于 51.2M,所以像素时钟就是51.2MHz

        ①、这部分是一个选择器,用于选择哪个PLL可以作为LCDIF时钟源,由寄存器CCM_CSCDR2的为LCDIF1_PRE_CLK_SEL(bit17:15)来决定,LCDIF1_PRE_CLK_SEL选择设置如下表

        之前讲解时钟系统的时候有个专用的PLL5给VIDEO,所以LCDIF1_PRE_CLK_SEL设置为2

        ②、此部分是LCDIF时钟的预分频器,由寄存器CCM_CSCDR2的位LCDIF1_PRED来决定预分频值。可设置值位0~7,分别对应1~8分频
        ③、此部分进一步分频,由寄存器CBCMR的位LCDIF1_PODF来决定分频值。可设置值为0~7,分别对应1~8分频
        ④、此部分是一个选择器,选择LCDIF最终的根时钟,由寄存器CSCDR2的位LCDIF1_CLK_SEL决定,LCDIF1_CLK_SEL选择设置如表
        

        选择值为0的PLL5出来的时钟作为LCDIF的根时钟,因此LCDIF1_CLK_SEL设置为0。LCDIF既然选择了PLL5作为时钟源,那么还需要初始化PLL5,LCDIF的时钟是由PLL5和图中②、③这两个分频值决定的,所以需要对这三个进行合理的设置来搭配需要的时钟值,以博主的屏幕需要的51.2Mhz为例

        PLL5的频率涉及到四个寄存器:CLL_PLL_VIDEO、CCM_PLL_VIDEO_NUM、CCM_PLL_VIDEO_DENOM、CCM_MISC2。其中CCM_PLL_VIDEO_NUM和CCM_PLL_VIDEO_DENOM这两个寄存器使用于小数分频的,我们这里为了简单不使用小数分频,因此这两个寄存器设置为0.
        PLL5的时钟计算公式如下:
        PLL5_CLK = OSC24M * (loopDivider + (denominator / numerator)) / postDivider
        不使用小数分频可以简化为
        PLL5_CLK = OSC24M * loopDivider / postDivider,现在就只需要设置loopDividerpostDivider,先来看一下寄存器CCM_PLL_VIDEO,寄存器结构如图

        寄存器CCM_PLL_VIDEO用到的重要位如下:
        POST_DIV_SLECT(BIT20:19):此位和寄存器CCM_ANALOG_CCMSC2的VIDEO_DIV位共同决定了postDivider,为0的话是4分频,为1的话是2分频,为2的话是1分频,这里设置为2也就是1分频
        ENABLE(bit13):PLL5(PLL_VIDEO)使能位,为1的话使能PLL5,为0就关闭
        DIV_SELECT(bit6:0):loopDivider值,范围为27-54,本章设置为32

        寄存器CCM_ANALOG_MISC2的位VIDEO_DIV(bit31:30)与寄存器CCM_PLL_VIDEO的位,POST_DIV_SLECT(bit20:19)共同决定了postDivider,通过这两个的配合可获得2、4、8、16分频。本章讲VIDEO_DIV设置位0,也就是1分频,因此postDivider就是1,loopDivider设置为32,PLL5的时钟频率就是

        PLL5_CLK = OSC24M * loopDivider / postDivider = 768Mhz

        PLL5此时为768MHz,在经过②和③进一步分频,设置②中为3分频,也就是寄存器CCM_CSCDR2的位LCDIF1_PRED(bit14:12)为2。设置③中为5分频,就是寄存器CCM_CBCMR的位LCDIF1_PODF(bit25:23)为4。设置好以后最终进入到LCDIF的时钟频率就是:768/3/5=51.2MHz,这就是我们需要的像素时钟频率。
        

        7、显存
        在讲像素格式的时候提到过,如果采用ARGB8888格式的话,一个像素需要四个字节的内存来存放像素数据,那么1024*600分辨率就需要1024*600*4=2457600B≈2.4MB内存。但是RGB LCD是没有内存的,需要在开发板上的DDR3中分出一段内存作为屏幕的现存,在屏幕上显示图像直接操作显存即可

        eLCDIF接口
        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。

        eLCDIF支持三种接口:MPU接口、VSYNC接口和DOTCLK接口,这三种接口区别如下:


        1.MPU接口
       
MPU接口用于在IMX6U和LCD屏幕直接传输数据和命令,这个接口用于6080/8080接口的屏幕,比如我们学习STM32的时候常用到的MCU屏幕。如果寄存器LCDIF_CTRL的位DOTCLK_MODE、DVI_MODE和VSYNC_MODE都为0的话就表示LCDIF工作到MPU接口模式。关于,我们这里不使用MPU接口

        2.VSYNC接口
        
VSYNC接口时序和MPU接口时序基本一样,只是多了VSYNC信号来作为帧同步,当LCDIF_CTRL的位VSYNC_MODE为1的时候此接口使能。这里同样不使用

        3.DOTCLK接口

        DOTCLK接口就是用来连接RGBLCD接口屏幕的,它包括VSYNC、HSYNC、DOTCLK 和ENABLE(可选的)这四个信号,这样的接口通常被称为RGB接口。DOTCLK接口时序如

        eLCDIF要驱动起来RGBLCD屏幕,重点是配置好上一小节讲解的那些时间参数即可,这个通过配置相应的寄存器就可以了,所以我们接下来看一下eLCDIF接口的几个重要的寄存器,首先看一下LCDIF_CTRL寄存器

        寄存器LCDIF_CTRL用到的重要位如下
        STRST(bit31):eLCDIF软复位控制位,当此位为1的话就会强制复位LCD
        CLKGATE(bit30):正常运行模式下,此位必须为0!如果此位不为0时钟不会进入到LCDIF
        BYPASS_COUNT(bit19):正常运行模式下,此位必须为0!如果此位为1的话时钟就不会进入到LCDIF
        VSYNC_MODE(bit18):此位为1的话LCDIF工作在VSYNC接口模式
        DOTCLK_MODE(bit17):此位为1的话LCDIF工作在DOTCLK接口模式
        INPUT_DATA_SWIZZLE(bit15:14):输入数据字节交换设置,此位为0的话不交换字节也就是小端模式;为1的话交换所有字节,也就是大端模式;为2的话半字交换;为3的话在每个半字内进行字节交换。本章我们设置为0,也就是不使用字节交换
        CSC_DATA_SWIZZLE(bit13:12):CSC数据字节交换设置,交换方式和INPUT_DATA_SWIZZLE一样,本章设置为0,不使用字节交换。
        WORD_LENGTH(bit9:8):输入的数据格式,也就是像素数据宽度,为0的话每个像素16 位;为1的话每个像素8位;为2的话每个像素18位;为3的话每个像素24位。
        MASTER(bit5):为1的话设置eLCDIF工作在主模式。
        DATA_FORMAT_16_BIT(bit3):当此位为1并且WORD_LENGTH为0的时候像素格式为ARGB555,当此位为0并且WORD_LENGTH为0的时候像素格式为RGB565。
        DATA_FORMAT_18_BIT(bit2):只有当WORD_LENGTH为2的时候此位才有效,此位为0的话低18位有效,像素格式为RGB666,高14位数据无效。当此位为1的话高18位有效,像素格式依旧是RGB666,但是低14位数据无效。
        DATA_FORMAT_24_BIT(bit1):只有当WORD_LENGTH为3的时候此位才有效,为0的时候表示全部的24位数据都有效。为1的话实际输入的数据有效位只有18位,虽然输入的是24位数据,但是每个颜色通道的高2位数据会被丢弃掉
        RUN(bit0):eLCDIF接口运行控制位,当此位为1的话eLCDIF接口就开始传输数据,也就是eLCDIF的使能位。

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

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

        这个寄存器是VSYNC和DOTCLK模式控制寄存器0,寄存器结构如上图,用到的重要位如下
        VSYNC_OEB(bit29):VSYNC 信号方向控制位,为 0 的话 VSYNC 是输出,为 1 的话
VSYNC 是输入
        ENABLE_PRESENT(bit28):EBABLE 数据线使能位,也就是 DE 数据线。为 1 的话使能
ENABLE 数据线,为 0 的话关闭 ENABLE 数据线
        VSYNC_POL(bit27):VSYNC 数据线极性设置位,为 0 的话 VSYNC 低电平有效,为 1 的
话 VSYNC 高电平有效,要根据所使用的 LCD 数据手册来设置
        HSYNC_POL(bit26):HSYNC 数据线极性设置位,为 0 的话 HSYNC 低电平有效,为 1 的
话 HSYNC 高电平有效,要根据所使用的 LCD 数据手册来设置
        DOTCLK_POL(bit25):DOTCLK 数据线(像素时钟线 CLK) 极性设置位,为 0 的话下降沿
锁存数据,上升沿捕获数据,为 1 的话相反,要根据所使用的 LCD 数据手册来设置
        ENABLE_POL(bit24):EANBLE 数据线极性设置位,为 0 的话低电平有效,为 1 的话高
电平有效
        VSYNC_PERIOD_UNIT(bit21):VSYNC 信号周期单位,为 0 的话 VSYNC 周期单位为像
素时钟。为 1 的话 VSYNC 周期单位是水平行,如果使用 DOTCLK 模式话就要设置为 1
        VSYNC_PULSE_WIDTH_UNIT(bit20) : VSYNC 信 号 脉 冲 宽 度 单 位 , 和
VSYNC_PERIOD_UNUT 一样,如果使用 DOTCLK 模式的话要设置为 1
        VSYNC_PULSE_WIDTH(bit17: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(bit27:16):此位用于 DOTCLK 模式,用于设置 HSYNC 信号
产生到有效数据产生之间的时间,也就是 HSPW+HBP

        VERTICAL_WAIR_CNT(bit15:0):和 HORIZONTAL_WAIT_CNT 一样,只是此位用于
VSYNC 信号,也就是 VSPW+VBP

        寄存器 LCDIF_VDCTRL4 用到的重要位如下:
        SYNC_SIGNALS_ON(bit18):同步信号使能位,设置为 1 的话使能 VSYNC、HSYNC、
DOTCLK 这些信号。

        DOTCLK_H_VALID_DATA_CNT(bit15:0)设置 LCD 的宽度,也就是水平像素数量。
        最后在看一下寄存器LCDIF_CUR_BUF和CLDIF_NEXT_BUF,这两个寄存器分别为当前帧和下一帧缓冲区,也就是LCD显存。一般这两个寄存器保存同一个地址,也就是划分给LCD的显存首地址
        

        下面讲解一下配置的具体的步骤
        1、初始化LCD所使用的IO
        初始化LCD所示使用的IO,将其复用为eLCDIF接口IO

        2、设置LCD的像素时钟
        查阅所使用的LCD屏幕数据手册,或者计算时钟像素,然后设置CCM相应的寄存器

        3、配置eLCDIF接口
        
设置 LCDIF 的寄存器 CTRL、CTRL1、TRANSFER_COUNT、VDCTRL0~4、CUR_BUF 和NEXT_BUF。根据 LCD 的数据手册设置相应的参数

        4、编写API函数
        驱动 LCD 屏幕的目的就是显示内容,所以需要编写一些基本的 API 函数,比如画点、画
线、画圆函数,字符串显示函数等

        图 24.2.1 中三个 SGM3157 的目的是在未使用 RGBLCD 的时候将 LCD_DATA7、
LCD_DATA15 和 LCD_DATA23 这三个线隔离开来,因为 ALIENTEK 的屏幕的 LCD_R7/G7/B7
这几个线用来设置 LCD 的 ID,所以这几根线上有上拉/下拉电阻。但是 I.MX6U 的 BOOT 设置
也用到了 LCD_DATA7、LCD_DATA15 和 LCD_DATA23 这三个引脚,所以接上屏幕以后屏幕
上的 ID 电阻就会影响到 BOOT 设置,会导致代码无法运行,所以先将其隔离开来,如果要使
用 RGB LCD 屏幕的时候再通过 LCD_DE 将其“连接”起来。我们需要 40P 的 FPC 线将 ATK7016
屏幕和 I.MX6U-ALPHA 开发板连接起来

        这些是RGB LCD基本原理,下一步就是编写我们的具体实验函数,因为RGB LCD的原理相对较为复杂,所以上述的过程当中有很多地方都没有讲解的太过清除,所以有些资料可能还需要读者自己去查询一下


http://www.kler.cn/news/356870.html

相关文章:

  • 一起搭WPF架构之LiveCharts.Wpf的简单了解与安装
  • 微信小程序-封装通用模块
  • Mac 远程 Windows 等桌面操作系统工具 Microsoft Remote Desktop for Mac 下载安装详细使用教程
  • 《仓库猎手模拟》风灵月影游戏辅助使用教程
  • 数据库原理与应用(基于MySQL):实验六数据查询
  • 【Golang】Go语言http编程底层逻辑实现原理与实战
  • 大数据治理:技术挑战与解决方案
  • 免杀对抗—内存加载UUID标识IPV4地址MAC地址
  • webpack自定义插件 ChangeScriptSrcPlugin
  • 结合seata和2PC,简单聊聊seata源码
  • 暴雨讲堂:AI已成为交叉学科科研工具
  • 监督学习、无监督学习、半监督学习、强化学习、迁移学习、集成学习分别是什么对应什么应用场景
  • Facebook Marketplace无法使用的原因
  • 【Bootstrap】bootstrap-table 的打印按钮功能正常但缺失图标
  • python爬虫加解密分析及实现
  • OSI参考模型与TCP/IP模型
  • 《深空彼岸》TXT完整版下载,知轩藏书校对版!
  • QGIS的入门(实习指导)
  • Android SELinux——其他常见策略⽂件(十一)
  • Go语言基础学习(Go安装配置、基础语法)