美文网首页
第二十四章 RGBLCD 显示实验

第二十四章 RGBLCD 显示实验

作者: 昨天剩下的一杯冷茶 | 来源:发表于2019-12-27 19:52 被阅读0次

一、LCD简介
①分辨率
②像素格式
③LCD屏接口
④LCD 时间参数:HBP、HFP、VBP、VFP
⑤RGB LCD屏幕时序

二、6U的eLCDIF时钟


image.png

①时钟选择,由寄存器CCM_CSCDR2的位LCDIF1_PRE_CLK_SEL(bit17:15)来决定。因为我们要用PLL5作为时钟源,所以LCDIF1_PRE_CLK_SEL设置为2。

时钟源
0 PLL2作为LCDIF的时钟源
1 PLL3_PFD3作为LCDIF的时钟源
2 PLL5作为LCDIF的时钟源
3 PLL2_PFD0作为LCDIF的时钟源
4 PLL2_PFD1作为LCDIF的时钟源
5 PLL3_PFD1作为LCDIF的时钟源

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

时钟源
0 前面复用器出来的时钟,也就是前面PLL5出来的时钟作为LCDIF的根时钟。
1 ipp_di0_clk作为LCDIF的根时钟。
2 ipp_di1_clk作为LCDIF的根时钟。
3 ldb_di0_clk作为LCDIF的根时钟。
4 ldb_dil_clk作为LCDIF的根时钟。

这里肯定要选择PLL5出来的那一路时钟作为LCDIF的根时钟,因此LCDIF1_CLK_SEL设置为0,。

三、PLL5频率设置
①PLL5设计的4个寄存器:
CCM_PLL_VIDEO、CCM_PLL_VIDEO_NUM、CCM_PLL_VIDEO_DENOM、CCM_MISC2。其中CCM_PLL_VIDEO_NUM和CCM_PLL_VIDEO_DENOM这两个寄存器是用于小数分频的,我们这位了简单不使用小数分频,因此这两个寄存器设置为0.。

PLL5的时钟计算公式如下:


image.png

不使用小数分频的话PLL5时钟计算公式就可以简化为:

image.png

②寄存器CCM_PLL_VIDEO
POST_DIV_SLECT(bit20:19):此位和寄存器CCM_ANALOG_CCMSC2的VIDEO_DIV位共同决定了postDivider,为0的话时4分频,为1的话是2分频,为2的话是1分频。
ENABLE(bit13):PLL5(PLL_VIDEO)使能位,为1的话使能PLL5,为0的话关闭PLL5。
DIV_SELECT(bit6:0):loopDivider值,范围为27~54,本章设置为32.

PLL5_CLK = OSC24M*loopDivider/postDivider=51.2MHz

image.png

四、eLCDIF接口
①eLCDIF接口特性如下:
、支持RGB LCD的DE模式
、 支持VSYNC模式以实现高速数据传输
、 支持ITU-R BT.656格式的4:2:2的YCbCr数字视频,并且将其转换诶模拟TV信号。
、支持8/16/18/24/32为LCD
②eLCDIF支持三种接口:MPU接口、VSYNC接口和DOTCLK接口

五、eLCDIF寄存器
①寄存器LCDIF_CTRL
SFTRST(bit31):eLCDIF软件复位控制位,当此位为1的话就会强制复位LCD。
CLKGATE(bit30):正常运行模式下,此位必须为0!如果此位为1的话时钟就不会进入到LCDIF。
BYPASS_COUNT(bit19):如果要工作在DOTCLK模式的话就此位必须为1。
VSYNC_MODE(bit18):此位为1的话LCDIF工作在VSYNC接口模式。
DOTCLK_MODE(bit17):次位为1的话LCDIF工作在DOTCLK接口模式。
INPUT_DATA_SWIZZLE(bit15:14):输入数据字节交换设置,此位为0的话不交换字节也就是小端模式;如果为1的话交换所有字节,也就是大端模式;为2的话半字节交换;为3的话在每个半字内进行字节交换。
CSC_DATA_SWIZZLE(bit13:12):CSC数据字节交换设置,交换方式和INPUT_DATA_SWIZZLE一样。
LCD_DATABUS_WIDTH(bit11:10):LCD数据总线宽度,为0的话总线宽度为16位;为1的话总线宽度为8位;为2的话总线宽度为18位;为3的话总线宽度为24位。
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的时候像素格式为ARG555,当此位为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_COUTN
高16位是V_COUNT,也就是LCD的垂直分辨率
低16位是H_COUNT,也就是LCD的水平分辨率

④寄存器LCDIF_VDCTRL0

⑤寄存器LCDIF_VDCTRL1

⑥寄存器LCDIF_CUR_BUF和LCDIF_NEXT_BUF
这两个寄存器分别为当前帧和下一帧缓冲区,也就是LCD显存。

最后按照原子哥的代码敲一遍&&下载测试。

这个一章实在太多代码了,就"bsp_lcd.c"一个个敲,其他都是复制粘贴。

相关文章

网友评论

      本文标题:第二十四章 RGBLCD 显示实验

      本文链接:https://www.haomeiwen.com/subject/afhkoctx.html