【Linux 驱动】IMX6ULL eLCDIF参考手册翻译

1. eLCDIF

1.1 概述

       eLCDIF是一种通用的显示控制器,用于驱动各种尺寸和性能不同的显示设备。

eLCDIF块支持以下功能:

  • 支持MPU接口(8080模式和6800模式)
  • 支持DOTCLK接口(RGB接口)
  • VSYNC模式:针对高速数据传输(行场信号)
  • 支持ITU-R BT.656接口,可以把4:2:2 YcbCr格式的数据转换为模拟电视信号

 eLCDIF支持可编程能力:

  • 总线主接口到源帧缓冲数据显示刷新。该接口也可用于驱动“智能”显示器的数据
  • PIO接口,以管理“智能”显示器和SoC之间的数据传输
  • 8/16/18/24/32 bit 的bpp数据都支持,取决于IO的复用设置及寄存器配置;
  • MPU模式,VSYNC模式,DOTCLK模式,都可以配置时序参数

 1.2 外部引脚

1.3 时钟

        ELCDIF时钟源说明如下表所示。请参考时钟控制器模块(CCM)用于时钟设置,配置和门控信息 

 

LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。前者是用来让LCD控制器正常工作,后者是用来控制电子枪移动 

1.4 功能描述

 1.4.1 总线接口机制

        eLCDIF模块具有内存映射控制、数据和状态寄存器。它提供了几个接口来在显示器和SoC之间传输数据。 

        总线主接口用于发起将数据从外部存储器传输到显示器的请求。它是完全自主的,或者不需要CPU干预,来管理刷新标准显示类型的周期性。总线主控也可以用于MPU模式的数据写入。

        PIO接口用于连接“智能”显示器,以将帧缓冲数据和控制信息传输到外部显示器。主机CPU执行显示驱动程序来管理显示解决方案。下面几节描述系统总线。

1.4.1.1 读/显示模式下的总线主操作

        eLCDIF块有一个总线主接口,该接口发起对数据的请求以驱动显示。必须将LCDIF_MASTER位设置为1才能启用总线主接口。软件应该对传输帧序列所需的所有控制寄存器进行编程。

        在MPU和VSYNC模式下,传输单帧。当传输一个完整的帧时,eLCDIF进入空闲状态并清除CTRL寄存器中的RUN位。对于后续的帧传输,应该重复eLCDIF设置序列。

        DOTCLK和DVI模式用于以所需的刷新率和分辨率刷新显示器,和驱动不集成显示缓冲区内存的显示器。当显示器被刷新时,eLCDIF将会在当前帧的末尾自动用LCDIF_NEXT_BUF_ADDR中的值更新LCDIF_CUR_BUF_ADDR寄存器,并开始从新地址获取下一帧。如果LCDIF_NEXT_BUF_ADDR寄存器没有在一个帧刷新周期内更新,eLCDIF将继续传输最后一帧,直到一个新的值被编程到该寄存器中。

        eLCDIF还提供了通过在第一个字段中获取奇数行,然后在第二个字段中获取偶数行来交错递进帧的能力。这个特性可以在DV模式下使用,并且可以通过LCDIF_CTRL1寄存器中设置INTERLACE_FIELDS位来打开。

1.4.1.2 系统总线 

1.4.2 写数据路径

        eLCDIF支持基于光栅的帧缓冲区,并且不支持平铺缓冲区。

        在为外部显示处理数据之前,有几个选项来适应内存中显示缓冲区的特性。LCDIF_CTRL[INPUT_DATA_SWIZZLE]字段提供了以下数据字复用的选项:

        LCDIF_CTRL[WORD_LENGTH]字段表示输入数据/像素格式。LCDIF_TRANSFER_COUNT寄存器表示每帧中包含多少数据。LCDIF_TRANSFER_COUNT[H_COUNT]字段表示每行像素的数量,LCDIF_TRANSFER_COUNT[V_COUNT]表示每帧的总行数。
        LCDIFCTRL1[BYTE_PACKING_FORMAT]字段可用于指定32位字中的哪些字节是有效的。例如,如果整个32位字是有效的,LCDIFCTRL1[BYTE_PACKING_FORMAT]应该设置为OXE(0b1111),如果帧缓冲区中每个字只有较低的3个字节是有效的,那么LCDIF_CTRL1[BYTE_PACKING_FORMAT]应该设置为Ox7(0b111)。 

        LCDIF_CTRL[LCD_DATABUS_WIDTH]字段表示通往显示控制器的总线的宽度。有一个选项来获取所有32位输入字并将其传输到输出I/0显示接口。如果LCDIF
_CTRL[LCD_DATABUS_WIDTH]
LCDIF_CTRL[WORD_LENGTH]不同,eLCDIF将执行RGB到RGB的颜色空间转换。例如,如果输入帧每像素的比特数比显示的少,例如在16bpp的输入帧变成24bpp的LCD时,eLCDIF将把每种颜色的msb填充到每个像素相同颜色的lsb上。如果输入帧每像素的比特数多于显示,比如,24bpp的输入帧转到16bpp的LCD上,eLCDIF会将每个颜色通道的lsb转换为较低的颜色深度。通过编程LCDIF_CTRL2[ODD_LINE_PATTERN]LCDIF_CTRL2[EVEN_LINE_PATTERN]位字段,eLCDIF还能够通过分别在帧的奇数行和偶数行中混合每个像素的R,G和B颜色来支持增量像素显示。此操作发生在rgb到rgb色彩空间转换操作之后。

        eLCDIF还支持RGB到YCbCr 4:2:2的色彩空间转换。这在DVI模式下很有用,因为电视编码器需要以YCbCr 4:2:2格式输入的,LCDIF CSC*寄存器对CSC系数和偏移量具有完全的可编程性。这些值必须以有符号二进制的补码格式写入这些寄存器。

        下面的列表显示了如何获得不同的输入/输出组合:

                ......

        最后,有一个选项可以在将输出数据发送到显示器之前转移输出数据。这是基于LCDIF_CTRL[SHIFT_DIR]LCDIF_CTRL[SHIFT_NUM_BITS]字段。 

  1. 读取数据
  2. 交换字节序
  3. rgb到rgb的转换
  4. 输出

1.4.3 读数据路径

         不需要用到

 1.4.4 eLCDIF中断

        eLCDIF支持许多中断来帮助块的控制和状态报告

        所有中断都有单独的掩码位来启用或禁用它们。它们都通过连接到中断收集器(ICOLL)的一条中断线汇集。

下面的列表描述了eLCDIF支持的不同中断:

  • 当FIFO(TXFIFO)变为空时,中断发生。
  • 当FIFO溢出时,中断发生。
  • VSYNC边沿触发中断

1.4.5 eLCDIF初始化

1.4.5.1 写模式

        在进入任何特定模式之前,以下初始化步骤对于所有eLCDIF写操作模式都是通用的。

初始化步骤:

  1. 配置外部/o以正确连接外部显示器
  2. 启动DISPLAY_CLOCK(pix_clk)时钟,并通过在CCM中编程寄存器设置适当的频率
  3. 启动总线时钟(apb_clk)并通过在CCM中编程寄存器设置适当的频率。
  4. 将eLCDIF从软复位中取出并禁用时钟门位。
  5. 通过设置LCDIF_CTRL1[RESET]复位LCD控制器,需要仔细查看复位的需求
  6. 确保LCDIF_CTRL[READ_WRITEB]为0
  7. 选择操作的转移方式。LCDIF_CTRL[MASTER]位决定了选择的传输模式。总线主模式(LCDIF_CTRL[master]=1)或PIO模式(LCDIF_CTRL[master] =0)是要选择的传输模式。
  8. 根据LCD控制器的端序设置LCDIF_CTRL[INPUT_DATA_SWIZZLE]。另外,如果需要在输出数据之前向左或向右移动数据,可以设置LCDIFCTRLIDATA SHIFT DIR]和LCDIF_CTRL[SHIFT_NUM_BITS]
  9. 适当设置LCDIF_CTRL[WORD_LENGTH]字段:0=16位输入,1=8位输入,2=18位输入,3=24/32位输入。此外,在LCDIF_CTRL寄存器中选择正确的16/18/24位数据格式和相应的字段。
  10. 根据输入帧设置LCDIF_CTRL1[BYTE_PACKING_FORMAT]字段
  11. 适当设置LCDIF_CTRL[LCD_DATABUS_WIDTH]:0=16位输出,1=8位输出,2=18位输出,3=24/32位输出。
  12. 使能必要的中断
1.4.5.2 MPU读模式 

        不会使用此模式

1.4.6 MPU接口

        MPU接口用于通过eLCDIF和外部显示器以适度的数据速率在SoC之间传输数据和命令。

        总线主模式或PIO处理使用LCDIF_DATA寄存器可以用于MPU模式写操作,对于MPU模式的读操作,只能使用PIO。eLCDIF能支持6800和8080协议,如果DOTCLK_MODE,DVI_MODEVSYNC_MODE位LCDIF_CTRL寄存器被置为0,这意味着该设备是在MPU接口模式下操作的。LCDIF MPU板模式有四种基本模式
时间参数:设置和保持命令/数据寄存器选择(TCS, TCH)、数据总线的设置和保持(TDS, TDH)。这些参数在DISPLAY_CLOCK (pix_clk)中被表达,LCD_WR信号用作写开关,
而LCD_RS信号通常用于在命令模式和数据模式之间切换

         eLCDIF具有灵活的引脚和频闪时序,使其能够最佳地支持各种lcd。最小周期时间为两个DISPLAY_CLOCK(pix_clk)周期(TDS=TDH=1)。例如,当DISPLAY CLOCK(pix_clk)为24MHz时,最大LCD数据速率为12 MB/S。TDS和TDH是8位值,所以最小eLCDIF周期是510 DISPLAY CLOCK(pix_clk)周期(47 KHz与24 MHz DISPLAY CLOCK (pix_clk))。如果DISPLAY CLOCK(pix clk)频率改变,则不会自动调整计时,因此如果DISPLAY CLOCK(pix_clk)改变,则可能需要调整计时。

        在MPU接口模式下,LCDIF_CTRL_BYPASS_COUNT位必须为o。一旦eLCDIF根据LCDIF_TRANSFER_COUNT寄存器接收/传输了所有数据并完成了向面板的传输,RUN位就会自动清除。如果手动设置RUN位为0,则可以取消/中止当前传输。 

1.4.6.1 MPU 初始化例程

1.4.7 VSYNC接口 

        不使用

1.4.8 DOTCLK接口

        DOTCLK接口是运动图像显示中使用的另一种模式。
        它包括VSYNC,HSYNC,DOTCLK和(可选)ENABLE信号。如果存在ENABLE信号,该接口通常称为RGB接口。

        DOTCLK模式以高速向LCD写入数据,显示操作与VSYNC,HSYNC,ENABLE和DOTCLK信号同步。同步信号的极性、周期和脉宽可使用LCDIF_VDCTRL0-4寄存器进行编程。VSYNC信号的单位必须是水平线的数量,可以使用VSYNC_PULSE_WIDTH_UNITVSYNC_PERIOD_UNIT位字段来选择。默认情况下,VERTICAL_WAIT_CNT
VSYNC_PERIOD具有相同的单位。显示时钟(pixclk)频率由CCM管理。 

        DOTCLK模式下,LCDIF_CTRL_BYPASS_COUNT位必须设置为1。为了结束当前的传输,软件应该使DOTCLK_MODE位为0,这样当前在LCDIF LFIFO和TX FIFO中的所有数据都被传输一旦传输完成,块将自动清除RUN位并发出cur_frame_done中断。

1.4.8.1 DOTCLK 初始化例程

1.4.9 CSI HANDSHAKE接口

        不使用

 1.4.10 Alpha Blending接口

        不使用

1.4.11 DVI 接口

        不使用

1.5 复位行为

        总线时钟(apb_clk)和显示时钟(pix_clk)必须在对SFTRSTCLKGATE位进行任何更改之前运行。
        软复位(SFTRST)需要多个时钟周期才能完成,所以在设置SFTRST时不要设置CLKGATE
        复位过程自动控制时钟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488185.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Maven高级——详解

目录 一、分模块设计 二、分模块设计小实践 三、Maven继承 1.继承关系实现 ​编辑 2.版本锁定 dependencyManagement 自定义属性/引用属性 四、Maven聚合 五、Maven私服 一、分模块设计 为什么要分模块设计,将项目按照功能拆分分成若干个子模…

QT串口和数据库通信

创建串口 串口连接客户端并向服务器发送消息 client.pro #------------------------------------------------- # # Project created by QtCreator 2024-07-02T14:11:20 # #-------------------------------------------------QT core gui network QT core gui…

房屋出租系统 学习笔记 韩顺平 零基础30天学会Java(2024.7.15)

代码见package houserent P362 房屋出租需求 P363 房屋出租设计 分层模式 P364 房屋出租工具 给了一个工具包:Utility,使用:String s2 Utility.readString(10,”hspedu”);来限制输入字符大小最大是10,同时初始化的值为hspedu&a…

完全移动huggingface模型仓库(不是简单mv)

Linux中移动huggingface模型仓库 参考链接 先在bashrc中配置: export HF_DATASETS_CACHE"/your/path/dataset" export HF_HOME"/your/path/" export HUGGINGFACE_HUB_CACHE"/your/path/hub" export TRANSFORMERS_CACHE"/your…

速腾聚创激光雷达复现FAST-LIO

目录 1.软件环境 2.测试执行 3.代码学习 3.1.找主节点代码文件 3.2.整体流程结构 3.3.具体函数理解 记录复现FAST-LIO算法的过程和,代码梳理和理解 1.软件环境 Windows 10(64bits) VMware 16 Pro Ubuntu 20.04 ROS Noetic FAST-LIO的简化版、注释版。感谢…

Hospital 14.6.0全开源医院管理预约系统源码

InfyHMS 具有 60 种功能和 9 种不同类型的用户类型, 他们可以登录系统并根据他们的角色访问他们的数据。 源码下载:https://download.csdn.net/download/m0_66047725/89580674 更多资源下载:关注我。

Top-down Microarchitecture Analysis Method

1、英文链接: 1. https://www.intel.com/content/www/us/en/docs/vtune-profiler/cookbook/2023-0/top-down-microarchitecture-analysis-method.html 2. http://portal.nacad.ufrj.br/online/intel/vtune2017/help/GUID-02271361-CCD4-410C-8338-4B8158157EB6.ht…

LC61----1374. 生成每种字符都是奇数个的字符串(字符串)---java版

1.题目 2.思路 (1)题目要生成每种字符是奇数个的字符串。 (2)所以直接用参数n%2来判断。 (3)返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。 (4)感觉题目不是很规范哈…

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序,如何在windows服务中优雅开启和关闭,废话不多说,开搞!!!   使用方式:go程序 net服务启动 Ⅰ 开篇不利 Windows go进程编译后,为一个.exe文件,直接执行即…

知名医药医疗行业人工智能数字化转型讲师培训师唐兴通谈医药医疗销售与创新思维创新管理数字化AI及大客户销售医美生活美容品牌市场

​唐兴通 数字化商业创新顾问、数字化转型教练、沃顿商学院演讲嘉宾。全球商业思想大家EM罗杰斯(创新的扩散)、杰弗里摩尔(跨越鸿沟)、马修狄克逊(挑战式销售)、布兰登博格(竞合战略&#xff0…

css渐变色背景|<gradient

使用渐变色作为背景 可以直接将渐变色用作元素的背景&#xff0c;可以看做是一种特殊的背景图片。&#xff08;是作为背景background一个属性值不是背景颜色background-color的属性值 &#xff09; CSS 渐变是一种从一种颜色平滑过渡到另一种颜色的效果&#xff0c;由 <gra…

Java数据结构(四)——链表

文章目录 链表概念及结构单链表的实现LinkedList的使用构造方法遍历 LinkedList的模拟实现ArrayList与LinkedList区别链表的相关练习反转链表链表的中间结点链表的回文结构判断链表是否有环寻找入环的第一个结点 链表 概念及结构 链表是一种物理存储结构上非连续存储结构&…

【C语言】 二叉树创建(结构体,先序遍历,中序遍历,后续遍历)

二叉树的创建&#xff1a;首先先定义一个结构体&#xff0c;里面包含数据&#xff08;data&#xff09;&#xff0c;指向左子树的指针&#xff08;L&#xff09;&#xff0c;指向右子树的指针&#xff08;R&#xff09;三个部分 在创建树的函数中&#xff0c;首先先输入…

netty使用redis发布订阅实现消息推送

netty使用redis发布订阅实现消息推送 场景 项目中需要给用户推送消息: 接口 RestController public class PushApi {Autowiredprivate PushService pushService;/*** 消息推送* param query* return*/PostMapping("/push/message")public String push(RequestBody…

『 Linux 』信号的写入与保存

文章目录 信号的发送信号的保存sigset_t 类型与信号集操作函数阻塞信号集(信号屏蔽字)操作函数未决信号集操作函数验证阻塞信号集与未决信号集 信号的发送 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10)…

EXCEL自动公式计算始终为0

如果你的数据单元格的左上角存在绿色的三角小箭头&#xff0c;那么就会造成这种问题&#xff1a; 你的数字是以文本形式存入的单元格 解决办法&#xff1a; 选中数据列&#xff0c;数据->分列 直接选择完成 此时就可以进行公式计算了

Linux作业---dns服务器的搭建

1.先在/www下创建一个net.haha的文件&#xff0c;然后在net.haha下的vim编辑index.html写入想写的内容 [rootrhcsa redhat]# cat /www/net.haha/index.html this is 192.168.127.11 server 2.继续在/etc/nginx/conf.d/baidu.conf下编辑web配置 [rootrhcsa redhat]# cat /etc…

Mem0 - 个人 AI 的内存层

文章目录 一、关于 Mem0核心功能&#x1f511;路线图 &#x1f5fa;️常见用例Mem0与RAG有何不同&#xff1f; 二、快速入门 &#x1f680;1、安装2、基本用法&#xff08;开源&#xff09;3、高级用法&#x1f527;4、大模型支持 三、MultiOn1、概览2、设置和配置4、将记忆添加…

javaScrip的学习(一)

目录 引言 一、java和JavaScript的联系 二、js中的弹出框 1.alert弹出框 2.confirm带确认取消的按钮弹框 3.prompt带有提示信息且带有输入框的弹框 4.输出到网页中 ​三、js引入方式 1. 放在script标签中 2.放在外部js文件中 四、执行顺序 五、书写规范 1. 语句结…

暑期C++ printf和scanf的平替

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 C中也有专门的输入和输出的方法 首先我们需要一个头文件&#xff0c;也就是#include<iostream> 然后根据我们命名空间的知识可知这个地方如果我们要使用必须先展开 可以全部展开比如using namespa…