金融交易网站建设,电子工程网站,网站seo其应用,福鼎网站优化公司硬件_IMX6ULL的LCD控制器 文章目录硬件_IMX6ULL的LCD控制器一、 LCD控制器模块介绍1.1 硬件框图1.2 数据传输与处理1.3 时序控制二、 LCD控制器寄存器简介2.1 LCDIF_CTRL寄存器2.2 LCDIF_CTRL1寄存器2.3 LCDIF_TRANSFER_COUNT寄存器2.4 LCDIF_VDCTRL0寄存器2.5 LCDIF_VDCTRL1寄…硬件_IMX6ULL的LCD控制器 文章目录硬件_IMX6ULL的LCD控制器一、 LCD控制器模块介绍1.1 硬件框图1.2 数据传输与处理1.3 时序控制二、 LCD控制器寄存器简介2.1 LCDIF_CTRL寄存器2.2 LCDIF_CTRL1寄存器2.3 LCDIF_TRANSFER_COUNT寄存器2.4 LCDIF_VDCTRL0寄存器2.5 LCDIF_VDCTRL1寄存器2.6 LCDIF_VDCTRL2寄存器2.7 LCDIF_VDCTRL3寄存器2.8 LCDIF_VDCTRL4寄存器2.9 LCDIF_CUR_BUF寄存器2.10 LCDIF_NEXT_BUF寄存器致谢一、 LCD控制器模块介绍
1.1 硬件框图 IMX6ULL的LCD控制器名称为eLCDIF(Enhanced LCD Interface增强型LCD接口)主要特性如下 支持MPU模式有些显示屏自带显存只需要把命令、数据发送给显示屏即可就是前面讲的8080接口VSYNC模式跟MPU模式类似多了VSYNC信号。针对高速数据传输行场信号支持DOTCLK模式RGB接口就是前面讲的TFT-RGB接口支持ITU-R BT.656接口可以把4:2:2 YcbCr格式的数据转换为模拟电视信号8/16/18/24/32 bit 的bpp数据都支持取决于IO的复用设置及寄存器配置MPU模式VSYNC模式DOTCLK模式都可以配置时序参数。 上图是IMX6ULL的LCD控制器框图。 我们在内存中划出一块内存称之为显存软件把数据写入显存。 设置好LCD控制器之后它会通过AXI总线协议从显存把RGB数据读入FIFO再到达LCD接口(LCD Interface)。 LCD控制器有两个时钟域外设总线时钟域LCD像素时钟域。前者是用来让LCD控制器正常工作后者是用来控制电子枪移动。 上图的Read_Data操作在MPU模式下才用到我们采用的是DCLK模式因此不予考虑。
更详细的内容可以查看IMX6ull芯片手册《Chapter 34 Enhanced LCD Interface (eLCDIF)》。
1.2 数据传输与处理
框图
1.3 时序控制
看寄存器说明。
二、 LCD控制器寄存器简介
查看任何芯片的LCD控制器寄存器时记住几个要点
① 怎么把LCD的信息告诉LCD控制器即分辨率、行列时序、像素时钟等 ② 怎么把显存地址、像素格式告诉LCD控制器。 上图是我们将要使用到的寄存器下面逐个讲解这些寄存器在后续的LCD控制编程实验会用到。
2.1 LCDIF_CTRL寄存器 位域名读写描述[31]SFTRSTR/W软件复位正常工作时应设为0如果设为1它会复位整个LCD控制器[30]CLKGATER/W时钟开关 0正常工作时要设置为0 1关闭LCD控制器时钟[29]YCBCR422_INPUTR/W使用RGB接口时设置为0其他接口我们暂时不关心[28]READ_WRITEBR/W使用RGB接口时设置为0其他接口我们暂时不关心[27]WAIT_FOR_VSYNC_EDGER/W在VSYNC模式时设置为1我们不关心[26]DATA_SHIFT_DIRR/W在DVI模式下才需要设置我们不关心[25:21]SHIFT_NUM_BITSR/W在DVI模式下才需要设置我们不关心[20]DVI_MODER/W设置为1时使用DVI模式就是ITU-R BT.656数字接口[19]BYPASS_COUNTR/WDOTCLK和DVI模式下需要设置为1;MPU、VSYNC模式时设为0[18]VSYNC_MODER/W使用VSYNC模式时设置为1[17]DOTCLK_MODER/W使用DOTCLK模式时设置为1本实验用的就是这个模式[16]DATA_SELECTR/WMPU模式下才用到我们不关心[15:14]INPUT_DATA_SWIZZLER/W显存中像素颜色的数据转给LCD控制器时字节位置是否交换 0x0NO_SWAP不交换 0x0LITTLE_ENDIAN小字节序跟NO_SWAP一样 0x1BIG_ENDIAN_SWAP字节0、3交换字节1、2交换 0x1SWAP_ALL_BYTES字节0、3交换字节1、2交换 0x2HWD_SWAP半字交换即0x12345678转为0x56781234 0x3HWD_BYTE_SWAP在每个半字内部放换字节 即0x12345678转换为0x34127856[13:12]CSC_DATA_SWIZZLER/W显存中的数据被传入LCD控制器内部并被转换为24BPP后在它被转给LCD接口之前字节位置是否交换 0x0NO_SWAP不交换 0x0LITTLE_ENDIAN小字节序跟NO_SWAP一样 0x1BIG_ENDIAN_SWAP字节0、3交换字节1、2交换 0x1SWAP_ALL_BYTES字节0、3交换字节1、2交换 0x2HWD_SWAP半字交换即0x12345678转为0x56781234 0x3HWD_BYTE_SWAP在每个半字内部放换字节 即0x12345678转换为0x34127856[11:10]LCD_DATABUS_WIDTHR/WLCD数据总线宽度就是对外输出的LCD数据的位宽 0x016位 0x18位 0x218位 0x324位[9:8]WORD_LENGTHR/W输入的数据格式即显存中每个像素占多少位 0x016位 0x18位 0x218位 0x324位[7]RGB_TO_YCBCR422_CSCR/W设置为1时使能颜色空间转换RGB转为YCbCr[6]ENABLE_PXP_HANDSHAKER/W当LCDIF_MASTER设置为1时再设置这位 则LCD控制器跟PXP之间的握手机制被关闭(我们不关心)[5]MASTERR/W设置为1时LCD控制器成为bus master[4]RSRVD0R/W保留[3]DATA_FORMAT_16_BITR/WWORD_LENGTH为0时表示一个像素用16位此位作用如下 0数据格式为ARGB555 1数据格式为RGB565[2]DATA_FORMAT_18_BITR/WWORD_LENGTH为2时表示一个像素用18位RGB数据还是保存在32位数据里此位作用如下 0低18位用来表示RGB666高14位无效 1高18位用来表示RGB666低14位无效[1]DATA_FORMAT_24_BITR/WWORD_LENGTH为3时表示一个像素用24位此位作用如下 0所有的24位数据都有效格式为RGB888 1转给LCD控制器的数据是24位的但只用到其中的18位 每个字节用来表示一个原色每字节中高2位无效[0]RUNR/W使能LCD控制器开始传输数据
2.2 LCDIF_CTRL1寄存器 本实验中使用TFT LCDLCD控制器使用DOTCLK模式。本寄存器中其他用不到的位就不介绍了。
位域名读写描述[19:16]BYTE_PACKING_FORMATR/W用来表示一个32位的word中哪些字节是有效的即哪些字节是用来表示颜色的。 bit16、17、18、19分别对应byte0、1、2、3某位为1就表示对应的字节有效。 默认值是0xf表示32位的word中所有字节都有效。 对于8bpp可以忽略本设置所有的字节都是有效的 对于16bppbit[1:0]、bit[3:2]分别对应一个字节组合中的2位都为1时对应的字节才有效 对于24bpp0x7表示32位数据中只用到3个字节这称为“24 bit unpacked format”即ARGB其中的A字节被丢弃[0]RESETR/W用来复位了接的LCD 0LCD_RESET引脚输出低电平 1LCD_RESET引脚输出高电平
2.3 LCDIF_TRANSFER_COUNT寄存器 位域名读写描述[31:16]V_COUNTR/W一帧中有多少行有效数据[15:0]H_COUNTR/W一行中有多少个像素
2.4 LCDIF_VDCTRL0寄存器 本寄存器用来设置Vsync信号相关的时序及极性。
位域名读写描述[29]VSYNC_OEBR/W用来控制VSYNC信号对于DOTCLK模式设为0 0VSYNC是输出引脚用LCD控制器产生 1VSYNC是输入引脚[28]ENABLE_PRESENTR/W在DOTCLK模式下硬件是否会产生数据使能信号ENALBE 0不产生 1产生[27]VSYNC_POLR/W用来决定VSYNC脉冲的极性 0低脉冲 1高脉冲[26]HSYNC_POLR/W用来决定HSYNC脉冲的极性 0低脉冲 1高脉冲[25]DOTCLK_POLR/W用来决定DOTCLK的极性 0LCD控制器在DOTCLK下降沿发送数据LCD在上升沿捕获数据 1反过来[24]ENABLE_POLR/W用来决定ENABLE信号的极性 0数据有效期间ENABLE信号为低 1反过来[21]VSYNC_PERIOD_UNITR/W用来决定VSYNC_PERIOD的单位 0单位是像素时钟(pix_clk)这在VSYNC模式下使用 1单位是“整行”这在DOTCLK模式下使用[20]VSYNC_PULSE_WIDTH_UNITR/W用来决定VSYNC_PULSE_WIDTH的单位 0单位是像素时钟(pix_clk) 1单位是“整行”[19]HALF_LINER/WVSYNC周期是否周加上半行的时间 0VSYNC周期VSYNC_PERIOD 1VSYNC周期VSYNC_PERIODHORIZONTAL_PERIOD/2[18]HALF_LINE_MODER/W0第1帧将在一行的中间结束第2帧在一行的中间开始 1所有帧结束前都加上半行时间这样所有帧都会起始于“行的开头”[17:0]VSYNC_PULSE_WIDTHR/WVSYNC脉冲的宽度
2.5 LCDIF_VDCTRL1寄存器 位域名读写描述[29]VSYNC_PERIODR/W两个垂直同步信号之间的间隔即垂直方向同步信号的总周期 单位由VSYNC_PERIOD_UNIT决定
2.6 LCDIF_VDCTRL2寄存器 HSYNC_PULSE_WIDTH水平同步信号脉冲宽度
HSYNC_PERIOD两个水平同步信号之间的总数即水平方向同步信号的总周期
位域名读写描述[31:18]HSYNC_PULSE_WIDTHR/WHSYNC脉冲的宽度(单位pix_clk)[17:0]HSYNC_PERIODR/W整行的宽度即两个HYSNC信号之间的宽度(单位pix_clk)
2.7 LCDIF_VDCTRL3寄存器 位域名读写描述[29]MUX_SYNC_SIGNALSR/W用不着[28]VSYNC_ONLYR/W0DOTCLK模式时必须设置为0 1VSYNC模式时必须设置为1[27:16]HORIZONTAL_WAIT_CNTR/W水平方向上的等待像素个数等于thpthb[15:0]VERTICAL_WAIT_CNTR/W垂直方向上的等待行数等于tvptvb
2.8 LCDIF_VDCTRL4寄存器 位域名读写描述[31:29]DOTCLK_DLY_SELR/W在LCD控制器内部的DOTCLK输出到LCD_DOTCK引脚时延时多久 02ns 14ns 26ns 38ns 其他值保留[18]SYNC_SIGNALS_ONR/WDOTCLK模式下必须设为1[17:0]DOTCLK_H_VALID_DATA_CNTR/W水平方向上的有效像素个数(pix_clk)即分辨率的y
2.9 LCDIF_CUR_BUF寄存器 位域名读写描述[31:0]ADDRR/WLCD控制器正在传输的当前帧在显存中的地址
2.10 LCDIF_NEXT_BUF寄存器 位域名读写描述[31:0]ADDRR/W下一帧在显存中的地址
LCD控制器传输完当前帧后会把LCDIF_NEXT_BUF寄存器的值复制到LCDIF_CUR_BUF寄存器。 致谢 以上笔记源自韦东山老师的视频课程感谢韦老师,韦老师是嵌入式培训界一股清流为嵌入式linux开发点起的星星之火也愿韦老师桃李满园。聚是一团火散是满天星 在这样一个速食的时代坚持做自己慢下来潜心琢磨心怀敬畏领悟知识才能向下扎到根向上捅破天背着世界往前行 仅此向嵌入行业里的每一个认真做技术的从业者致敬