南阳教育论坛网站建设,wordpress iis设置,wordpress扒站,餐饮app定制目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理#xff1a;1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别#xff1a… 目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别 2、RGB控制原理2.1 LCD显示系统结构2.2 基本显示过程2.3 LCD时钟控制2.3.1 像素时钟2.3.2 水平同步时钟 HSYNC2.3.3 显示一帧 - 垂直同步时钟VSYNC 2.4 控制时序2.5 LCD时序与显示的映射关系2.6 linux对LCD时序的抽象2.6.1 struct fb_videomode 显示参数结构体2.6.2 判断 HSYNC,VSYNC,VCLK, VDEN信号是否需要反转 3、实验环境介绍4、 exynos4412的LCD控制器相关知识点介绍4.1 显示控制器介绍4.2 时钟4.3 RGB接口4.3.1 RGB接口控制器4.3.2 RGB接口规范4.3.3 信号4.3.4 LCD RGB接口时序 4.4 寄存器4.4.1 寄存器概况4.4.2 寄存器使用详述4.4.2.2 时钟寄存器CLK_SRC_LCD0 P505CLK_SRC_MASK_LCDCLK_DIV_LCD P530CLK_GATE_IP_LCD (P556) 4.4.2.3 系统寄存器LCDBLK_CFG (P884)LCDBLK_CFG2 P886 4.4.2.4 LCD控制寄存器VIDCON0 P1838VIDCON1 (P1839)VIDTCON0 (P1842)VIDTCON1VIDTCON2 (P1843)VIDTCON3 (P1843)WINCON0 (P1844)SHADOWCON (P1859)WINCHMAP2VIDOSD0A VIDOSD0B VIDOSD0CP1863 4.4.2.5 电源管理寄存器9 LCD0_CONFIGURATION 5、结语 本篇是LINUX3.14环境中的LCD驱动框架的第一篇主要讲解LCD显示的基本原理RGB控制器的运行原理LCD硬件编程的准备知识包括大量的需要使用到的寄存器详述。由于涉及到大量的细节因此写的过程中难免有错误与遗漏因此如有发现错漏请及时留言指出。哪些地方不好理解或没说明白也请指出我们一起讨论完善。
1、LCD显示系统介绍
1.1 LCD显示基本原理 \qquad 从这张图就可以看出。白光经过楄光和液晶层后通过每一个像素的RGB的三个子像素后就能呈现出彩色图像。 \qquad 因此LCD的电路主要任务就是控制如图中的电极板从而控制液晶形态而达到控制每个红兰绿子像素的秀光量。 \qquad 当前主流的LCD是TFT特点是超薄、清晰。
1.1.1 颜色的显示原理 \qquad 显示器的颜色一般采用RGB标准通过对红(RED)、绿(GREEN)蓝(BLUE)三个颜色相互叠加得到各种不同的颜色。
通过对颜色的编码来对颜色进行量化即转换成数字量RGB是一种编码方式每种颜色根据RGB格式不同每种颜色的量化位不相同常见的RGB格式有RGB565/RGB888即: RGB565: red :5 green : 6 blue:516BPP RGB888: red :8 green : 8 blue:824BPP有的还会有个alpha参数用于实现图形渐变效果以及半透明效果0xFFF全透明0x0不透明
1.1.2 图像的构成
像素
像素pix显示的最小单位在计算机只常用若干位数据来表示一个像素比如使用R8、G8、B8共24位来表示一个像素这个也称为像素深度单位为BPP 常见的有16BPP/24BPP像素深度越大则一个像素点所显示的颜色就越多所显示的颜色更广
帧
一屏图像被称为一帧每帧里面由行列排列的像素组成
调色板 \qquad 画油画的时候通常先在调色板里配好想要的颜色再用画笔沾到画布上作画。 \qquad LCD控制器里也借用了这个概念从FrameBuffer获得数据这个数据作为索引从调色板获得对应数据再发给电子枪显示出来。 \qquad 假如是16BPP的数据LCD控制器从FB取出16bit数据显示到LCD上。 \qquad 当如果想节约内存对颜色要求也没那么高就可以采用调色板的方式调色板里存放了256个16bit的数据FB只存放每个像素的索引根据索引去调色板找到对应的数据传给LCD控制器再通过电子枪显示出来。
1.2 LCD接口介绍 \qquad 不同的组件之间的连接需要做好很多约定这些软硬件的约定构成了接口。在LCD的屏与控制器之间的接口是开发者重点要关注的。接口有不同层次的分别使用时注意区分
LCD驱动接口 用于连接LCD驱动器与LCD控制器这间的软硬件规范。是芯片级的接口。
在单片机上MCU接口在嵌入式中RGB接口、LVDS接口、MIPI-DSI接口
LCD传输接口 当LCD与SOC有一定的距离就需要用到传输技术来为控制器和驱动器传递信号传输线缆与控制器之前的连接也涉及到相应的软硬件规范。
HDMIDPUSB
1.2.1 驱动接口 - MCU接口
应用领域小尺寸手机屏单片机应用一般4寸以下。优势价格便宜。劣势指令逐点写入速度慢接口执行标准Intel 8080总线标准I80标准 8080模式 、6800模式 并行8位、16位、18位、24位传输 无需时钟和同步信号 L C D 驱动器要内置 G R A M \color{red}{LCD驱动器要内置GRAM} LCD驱动器要内置GRAM直接一对一投射每个象素。显示过程 不需要点、行、帧时钟 \color{red}{不需要点、行、帧时钟} 不需要点、行、帧时钟。
1.2.2 驱动接口 - RGB接口
应用领域嵌入式应用一般7寸以上。优势直接写屏显示速度快劣势价格高功耗大抗EMI电磁干扰弱接口执行标准TTL 颜色编码方式RGB24 / RGB888 / RGB555 / RGB565 / RGB666 并行24位传输 显示过程要有时钟和行、帧同步信号等HSYNC, , VSYNC , ENABLE , CS , RESET , RS 显存是 内存映射 \color{red}{内存映射} 内存映射LCD驱动中没有GRAM。 1.2.3 驱动接口 - LVDS接口
LVDSLow Voltage Differential Signaling 是一种低压差分信号技术接口。
应用领域嵌入式应用一般7寸以上。优势直接写屏显示速度快功耗小EMI电磁干扰小劣势价格高接口执行标准LVDS 信号内容RGB 常见的lvds接口分为四通道、五通道、十通道。 速度快常见的有几百Mbit/s
1.2.4 驱动接口 - MIPI接口
MIPIMobile Industry Processor Interface 移动行业处理器接口
应用领域移动嵌入式领域应用的接口标准DSI(Display Serial Interface Specification和 CSI摄像头接口优势高速功耗小干扰小劣势价格高接口执行标准 信号内容视频流数据和控制指令
1.2.5 RGB / MIPI / LVDS三种接口方式的区别 2、RGB控制原理
由于手上是一块RGB的7寸电容屏因此本文重点介绍RGB接口的驱动方法。
下面这些内容会涉及到比较多的细节这是因为在具体编写驱动时会设置LCD控制器和LCD屏的很多参数这些个参数的具体与硬件的对应关系就在本章节列述。如果不想看那么多可直接跳到第三章看框架介绍。在具体编写驱动时再回头来看本章。
2.1 LCD显示系统结构
在嵌入式领域RGB接口的LCD驱动结构一般如下图所示
图2.1
组件描述SoC负责发送显示数据及控制指令等给LCD。显 存SoC在内存中选一段内存用来存放颜色数据应用程序通过往显存中写数据然后通过配置将LCD控制器和这一段内存连接起来构成一个映射关系一旦这个关系建立以后LCD控制器就会自动从显存中读取像素数据传给LCD驱动器LCD驱动器会自动的控制每个像素点的液晶分子以形成最终的图像建立这个映射以后就不需要SoC再来参与任何行为了。LCD控制器在SoC内部会集成有LCD控制器它负责通过数字接口向外部的LCD驱动器提供要显示的像素数字信号。它必须按照一定的时序和LCD驱动器通信LCD控制器受SoC控制SoC会从内存中拿出像素数据给LCD控制器并最终传给LCD驱动器。LCD驱动器LCD驱动器一般与LCD面板集成在一起面板需要一定的模拟电信号来控制液晶分子LCD驱动器芯片负责给面板提供控制液晶分子的模拟电信号驱动器的控制信号数字信号来自于LCD控制器的提供的接口。
2.2 基本显示过程
LCD显示一张图片其实是每一个像素点的填充只是速度很快我们人眼没有察觉而已。
我们将LCD屏幕分为水平方向和垂直方向LCD每一行的像素点被逐一填充填充完一行继续填充下一行填充顺序可以为左-右 或者 右-左每一帧图像就从第一行的第一个像素点一直填充到最后一行的最后一个像素点。例如上图就现实一帧的图像(从左到右从上到下)。
2.3 LCD时钟控制
时钟是LCD正确工作的核心因素。上面所描述的每个像素的逐一发送每一行每一帧的正确发送都依靠各个时钟的有序运作。其中最基础的是像素时钟。
2.3.1 像素时钟 \qquad 如上图展示的是一个800*480的RGB LCD屏幕。 24bpp 显示模式即红绿蓝三色每色由8bit数位表示。 显示一行LCD需要填充800个像素点。每一个像素由RGB三元素组成每个元素(R、G、B)由8bit位数组成也就是说一个像素我们需要通过信号线传输24bit的数据。 \qquad 如图所示每一个clk的脉冲发送一个像素数据。一行共发送800个像素数据。 \qquad 像素时钟clk是一个持续的信号在实际工作中必须还要解决哪一个CLK代表一行的开始哪一个CLK代表第一个有效的像素数据这就需要有水平同步时钟HSYNC。
2.3.2 水平同步时钟 HSYNC
HSYNC水平同步信号表示一行数据的开始。具体如下图 \qquad 其中CLK没有任何变化只是多了HSYNC和DEN上图中的ENB两个信号。 \qquad 如图中的红色箭头当HSYNC产生了如图所示的变化表示新的一行数据传送马上开始当ENB信号线为高电平期间传输的数据视为有效数据。这样一来一行800个像素的数据才能正确的传送完成。
2.3.3 显示一帧 - 垂直同步时钟VSYNC \qquad 按照我们之前假设的800*480LCD。从第一行一直到最后一行整个LCD屏幕所有像素填充完毕这一过程也就是写了一帧数据我们如果要LCD能够实时显示画面很显然一帧数据肯定不够所以要给LCD不断的提供新的帧数据这无非也就是重复上述显示一帧的过程。 \qquad 上图中VSYNC垂直同步信号当产生如图所示的变化就代表新的一帧数据马上开始传送。那么这里怎么没有有效数据信号DEN呢 \qquad 其实很简单因为新的一帧数据不就是从LCD第一行的第一个像素开始填充嘛那么前面我们已经说明了每一行都自己的同步信号而每一行也有对应的数据有效信号线。所以垂直同步信号只用关心从一帧数据的同步而不同关心每一行的同步。
于是我们将上面分析的时钟放在一起就变成了LCD RGB模式的典型时序图 。
2.4 控制时序 \qquad 时序图完整的描述了几个不同的控制信号之间如何相互协作。以及各个信号之间的工作间隔时间等。对于LCD控制器的寄存器设置的相关参数也在这个时序图中描述。 \qquad 下面这个是一个典型的完整的时序图。
图2.2 控制信号释义
信号名称作用VDVideo Data)数据信号用于传输图像的像素数据。每个像素的颜色信息通过VD信号传输。HSYNCHorizontal Sync水平同步信号用于同步每行图像数据的传输。每发出一个HSYNC脉冲表示新的一行图像数据开始发送。VSYNCVertical Sync垂直同步信号用于同步每帧图像数据的传输。每发出一个VSYNC脉冲表示新的一帧图像数据开始发送。VDENVideo Data Enable数据有效标志与HSYNC和VSYNC信号结合使用。VDEN信号表示VD数据的有效性只有在VDEN为高电平时VD数据才是有效的。LENDLine End行结束标志是一种时序信号用于表示一行图像数据的结束。不是所有接口都需要使用LEND信号例如210接口就没有。VCLKVideo Clock时钟信号用于同步图像数据的传输。VCLK信号的频率决定了图像数据的传输速度。 \qquad 想象每个像素点是由电子枪发射出来的电子枪依次扫描整个LCD界面就显示了一副完整的图像。 \qquad 当发出一个HSYNC信号后电子枪就会从行末花费HBP时长移动到行首然后在VCLK时钟下在下图中阴影区域显示像素等到了行末后再等待HFP时长待HSYNC信号到来再移动到行首如此往复。因此HBP和HFP分别决定了左边和右边的黑框。 \qquad 同理当发出一个VSYNC信号后电子枪就会从列末花费VBP时长移动到列首然后在VCLK时钟下在图中阴影区域显示像素等到了列末后再等待VFP时长待VSYNC信号到来再移动到列首如此往复。因此VBP和VFP分别决定了上边和下边的黑框。
2.5 LCD时序与显示的映射关系
下图是从LCD控制器的角度理解的显示映射关系 显示步骤
为了更好的理解上图总结成以下几个过程
1、产生垂直信号表示一帧数据将要开始2、经过VBP个行后才开始有效数据的第一行 类似上边距3、经过HBP具体的数值在后面会解释个CLK后才开始传输每行的有效数据。类似调整了A4纸张的左边距4、每行有效数据传输完毕经过HFP个CLK后才开始下一行。类似右边距5、重复3和4两个步骤一直到有效行显示完。6、有效行显示完毕后经过VFP个行后再开始下一帧数据 类似下边距
时序参数的含义如下参照上图理解
英文缩写名称作用HSPW(Horizontal Sync Pulse Width)行同步信号的脉宽单位为1VCLK的时间。HBP(Horizontal Back Porch)水平后肩水平同步信号HSYNC的下降沿到VDEN的上升沿的间隔称为HBP。单位为1VCLK的时间。在图中为HBPD1。HFP(Horizontal Front Porch)水平前肩把VDEN的下降沿到水平同步信号HSYNC的上升沿的间隔称为HFP单位为1VCLK的时间。在图中为HFPD1。HOZVAL行显示尺寸-1即屏列宽-1对于800*480分配率的LCD屏那么HOZVAL800-1799请记住是屏列宽也就是LCD屏显示一行数据所需要的像素(pixel)的数目。VSPW(Vertical Sync Pluse Width)帧同步信号的脉宽单位为1行Line的时间。VBP(Vertical Back Porch)垂直后肩垂直同步信号VSYNC下降沿到VDEN信号产生之前的一个行同步信号VHSYNC的上升沿之间隔。单位为1行Line的时间。在图中为VBPD1。VFP(Vertical Front Porch)垂直前肩VDEN数据信号的下降沿到垂直同步信号VSYNC产生的上升沿之间隔。单位为1行Line的时间。在图中为VFPD1。LINEVAL帧显示尺寸-1即屏行宽-1对于800*480分配率的LCD屏那么LINEVAL480-1479请记住是屏行宽也就是LCD屏显示一帧数据所需要的行的数目。
VSPW、HSPW这两个值其实很简单其中的W代表width也就是宽度的意思。所以这两个值分别描述的是垂直信号和水平信号的宽度如下图所示。
时间计算 由图2.2可知
扫描一帧所需的时间 T ( ( VSPW1 ) ( VBPD 1 ) ( LINEVAL 1) ( VFPD 1 ) ) 个行时间。扫描一行所所需的时间 ( ( HSPW 1 ) ( HSPD 1 ) ( HFPD 1 ) ( HOZVAL 1 ) ) 个VCLK时间。
而一个VCLK时间由LCD寄存器VIDCON0内的CLKVAL决定:
VCLK HCLK / ( CLKVAL 1 ) ------这个公式是exynos4412的LCD控制器的其他CPU的不一定一样
因此扫描一帧所需的时间
T [(VSPW1)(VBPD1)(LINEVAL1)(VFPD1)] * [(HSPW1)(HSPD1)(HFPD1) (HOZVAL1)] * HCLK/ (CLKVAL1)
即帧频率为:1/T
2.6 linux对LCD时序的抽象
下图为从linux角度对lcd时序的理解这与前面从LCD控制器的角度对lcd时序的理解差别在于hsync_len和vsync_len。这实际是没有区别的只是理解的角度不同。因要写的是linux的驱动因此要清楚从linux的角度是如何映射的。
对应如下这个数据结构体
2.6.1 struct fb_videomode 显示参数结构体
/* include/linux/fb.h */
struct fb_videomode {
const char *name; 可选的视频模式名称。这个成员用于存储视频模式的名称可以是一个字符串。
u32 refresh; 可选的刷新率。这个成员用于指定视频模式的刷新率以每秒刷新次数表示。
u32 xres; 显示的水平分辨率。这个成员表示图像在屏幕上的水平像素数。
u32 yres; 显示的垂直分辨率。这个成员表示图像在屏幕上的垂直像素数。
u32 pixclock; 像素时钟频率。这个成员表示像素时钟的频率用于计算图像的时序。
u32 left_margin; /*HBP*/ 在每行象素数据开始输出前需要要插入的空闲象素时钟周期数
u32 right_margin; /*HFP*/ 在每行象素数据结束到LCD行同步时钟脉冲之间插入的空闲象素时钟数
u32 upper_margin; /*VBP*/ 在垂直同步脉冲之后每帧开头前的无效行数
u32 lower_margin; /*VFP*/ 每帧数据输出结束到下一帧垂直同步时钟周期开始前的无效行数
u32 hsync_len; /*HSYNC 或 HPW 或 HWH*/ 行同步脉宽水平同步时钟的脉冲宽度
u32 vsync_len; /*VSYNC 或 VPW 或 VWH */ 帧同步脉宽垂直同步时钟的脉冲宽度
u32 sync; 同步极性设置,可根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)
u32 vmode; 显示模式。这个成员指定了显示器的模式例如非隔行模式或隔行模式。
u32 flag; 标志位。这个成员用于指示视频模式的一些特性和选项例如是否支持透明度等
};
重要参数详解
pixclock 像素时钟频率在时序图上有时称DCLK 、VCLK 、CLK等都 是一个意思。如65MHZ的频率这里要填写pixclock 65000000。sync成员用于指定同步信号的类型可以是水平同步、垂直同步或两者的组合。 FB_SYNC_HOR_HIGH_ACT表示水平同步信号在高电平时激活。在某些视频模式中需要在高电平时发送水平同步信号。 FB_SYNC_VERT_HIGH_ACT表示垂直同步信号在高电平时激活。在某些视频模式中需要在高电平时发送垂直同步信号。 FB_SYNC_EXT表示使用外部同步信号。某些设备可能支持使用外部同步信号而不是内部的同步信号。 FB_SYNC_COMP_HIGH_ACT表示复合同步信号在高电平时激活。复合同步信号是基于水平和垂直同步信号组合而成的同步信号。 FB_SYNC_BROADCAST表示广播视频时所使用的视频定时信息。在PAL制式下垂直总行数为144行渐进扫描或288行隔行扫描在NTSC制式下垂直总行数为121行渐进扫描或242行隔行扫描。 FB_SYNC_ON_GREEN表示同步信号发送在绿色通道上。某些视频模式可能需要使用绿色通道来传输同步信号。 vmode成员用于指定视频模式的类型可以是以下几种常见的填写方式 FB_VMODE_NONINTERLACED表示非隔行模式也即渐进扫描模式。在这种模式下视频图像的每一帧都是通过逐行扫描显示的。 -
- FB_VMODE_INTERLACED表示隔行模式也即隔行扫描模式。在这种模式下视频图像的每一帧由两个交替的场组成每个场只显示图像的一半行数通过交替显示两个场来达到全帧显示的效果。 FB_VMODE_DOUBLE表示双帧缓冲模式。在这种模式下使用两个帧缓冲器来交替渲染显示图像的每一帧可以减少视频闪烁的效果。 FB_VMODE_ODD_FLD_FIRST表示隔行模式下先显示奇数场。在某些设备上隔行扫描模式下可以选择先显示奇数场还是偶数场。 FB_VMODE_MASK用于屏蔽其他标志位只保留视频模式的相关信息。 FB_VMODE_YWRAP表示使用y轴环绕而不是滚动。在某些设备上可以选择使用y轴环绕来显示图像而不是滚动显示。 FB_VMODE_SMOOTH_XPAN表示支持平滑的水平滚动。在某些设备上可以平滑地滚动图像而不是简单地按照整数像素进行滚动。 FB_VMODE_CONUPDATE表示不要更新x和y偏移量。在某些设备上可能希望固定x和y偏移量而不更新它们。 \qquad 在使用struct fb_videomode时可以参考设备文档或相关的驱动程序来确定正确的填写方式。
2.6.2 判断 HSYNC,VSYNC,VCLK, VDEN信号是否需要反转
在具体驱动编写时还要配置以上几个信号是否需要反转并去设置相应的寄存器。判断的过程就是通过你SOC数据手册中介绍lcd的时序图另外还要再对比你屏厂的数据手册的时序图就可以判断出来
先看LCD控制器默认情况下送出来的TFT LCD屏的时序图
图2.3-exynos4412 lcd控制器输出时序 再来看屏厂的时序图
图2.4LCD屏时序图 从上两图对比可以看出实验用屏的VSYNC与HSYNC需要反转。
另个从屏厂还提供的信号周期表用来填写驱动的timing结构体 以上这两张图在下面具体讲lcd屏驱动时需要用到。
bppbits per pixel 像素深度表示一个像素的颜色状态需要用几位来表示 1位单色显示只有亮灭之分常见的如小店招牌 8位灰度显示此时能表示256种颜色这时候显示不了色彩但是有了黑白明暗的区别 16位一般是RGB565的颜色分布即16位色 24位RGB888的颜色分布称之为24位真彩 32位还是RGB888的颜色分布剩下的8位代表透明度故称之为ARGB是目前主流 3、实验环境介绍
开发板华清fs4412SoC : samsung exynos4412 arm-A9框架LCD7寸电容触摸tft-lcd屏分辨率1024 x 600驱动接口并行24位RGB接口 触摸屏I2C接口物理接口40P 间距0.5mm FPC连接器linux内核 3.14交叉编译环境arm-linux-gnueabi-FPC连接器定义 SoC侧gpio接口定义 这样所有的LCD屏与开发板相连接的引脚都能一一对应到SoC上的GPIO脚上了。
驱动框架FrameBuffer帧缓冲驱动框架
4、 exynos4412的LCD控制器相关知识点介绍
由于在linux3.14环境中在实际编写LCD驱动程序中不仅涉及到上面所介绍的相关lcd的控制原理也涉及到如何设置LCD控制寄存器的相关。以下是对exynos4412的数据手册《4412手册完整版SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary》摘录与翻译
4.1 显示控制器介绍 \qquad exynos4412的LCD驱动程序接口支持三种接口。它们是RGB接口、间接i80接口和用于写回的YUV接口。显示控制器使用多达五个覆盖图像窗口这些窗口支持各种颜色格式、256级alpha混合、颜色键、x-y位置控制、软滚动和可变窗口大小等。显示控制器支持各种颜色格式如RGB1到24BPP和YCbCr 4:4:4仅本地总线。 \qquad 您可以对显示控制器进行编程以支持屏幕上与水平和垂直像素数、数据接口的数据线宽、接口定时和刷新率相关的不同要求。 \qquad 显示控制器传输视频数据并生成必要的控制信号例如RGB_VSYNC、RGB_HSYNC、RGB VCLK、RGB_VDEN、SYS_CS0、SYS_CS1和SYS_WE。除了生成控制信号外显示控制器还包含视频数据的数据端口RGB_VD[23:0]和SYS_VD exynos4412可以支持红框中的三种接口形式。
控制器的相关特性 Maximum VCLK in RGB Interface 80MHz Video Clock Source: SCLK_FIMD0 for display controller (from CMU module)
4.2 时钟 Exynos 4412 SCP时钟生成电路特殊时钟- lcd模块时钟 4.3 RGB接口
4.3.1 RGB接口控制器
显示控制器由VSFR、VDMA、VPRCS、VTIME和视频时钟发生器组成。 要配置显示控制器VSFR具有
121个可编程寄存器组一个伽玛LUT寄存器组64个寄存器一个i80命令寄存器组12个寄存器五个 256 x 32个调色板存储器
VDMA是一种专用的显示DMA用于将帧存储器中的视频数据传输到VPRCS。通过使用这种特殊的DMA您可以在屏幕上显示视频数据而无需CPU干预。
VPRCS从VDMA接收视频数据并通过数据端口RGB_VD或SYS_VD将其发送到显示设备LCD在将视频数据更改为合适的数据格式后例如每像素8位模式8BPP模式或每像素16位模式16BPP模式。
VTIME由可编程逻辑组成以支持不同LCD驱动器中常见的接口时序和速率的可变要求。TIME块生成RGB_VSYNC、RGB_HSYNC、RGB_VCLK、RGB_VDEN、VEN_VSYNC、VEN_HSYNC、VEN_FIELD、VEN_HREF、SYS_CS0、SYS_CS1、SYS_WE等。
使用显示控制器数据可以通过设置LCDBLK_CFG寄存器0x1001_0210来选择上述数据路径之一。有关更多信息请参阅“Chapter 12, System Register Controller, for more information.P884”手册。
VTIME生成用于RGB接口的控制信号例如RGB_VSYNC、RGB_HSYNC、RGB VDEN和RGB_VCLK信号。在VSFR寄存器中配置VIDTCON0/1/2寄存器时可以使用这些控制信号。 您可以在VSFR中对显示控制寄存器的配置进行编程。然后VTIME模块生成支持不同类型显示设备的可编程控制信号。
RGB_VSYNC信号使LCD行指针从显示器顶部开始。HOZVAL字段和LINEVAL寄存器的配置控制RGB_VSYNC和RGB_HSYNC的脉冲生成。基于这些方程LCD面板的尺寸决定了HOZVAL和LINEVAL VIDCON0寄存器中的CLKVAL字段控制RGB_VCLK信号的速率。
CLKVAL的最小值为1。有公式 其中SCLK_FIMDxx01
计算帧速率的方程式为
4.3.2 RGB接口规范
RGB接口规范包括
信号LCD RGB接口时序并行输出串行8位输出输出配置结构
4.3.3 信号 4.3.4 LCD RGB接口时序 4.4 寄存器
LCD控制器的使用全部依赖对其提供的寄存器的设置。因此在开发lcd驱动程序时必须根据情况去设置寄存器才能使LCD正常工作。因此以下对LCD所使用的寄存器进行一一的介绍。
4.4.1 寄存器概况
LCD控制器直接操作的寄存器很多但主要有以下这些。其中的x指代0,1,2…等数值在使用时要注意区分。
可用于配置显示控制器的寄存器有 1.VIDCON0配置视频输出格式并显示启用/禁用。 2.VIDCON1指定RGB I/F控制信号。 3.VIDCON2指定输出数据格式控制。 4.VIDCON3指定图像增强控制。 5.I80IFCONx指定CPU接口控制信号。 6.VIDTCONx配置视频输出时序并确定显示器的大小。 7.WINCONx指定每个窗口功能设置。 8.VIDOSDxAVIDOSDxDB指定窗口位置设置。 9.VIDOSDxCD指定屏幕显示OSD大小设置。 10.VIDWxALPHA0/1指定alpha值设置。 11.BLENDEQx指定混合方程式设置。 12.VIDWxxADDx指定源映像地址设置。 13.WxKEYCONx指定颜色键设置寄存器。 14.WxKEYALPHA指定颜色键alpha值设置。 15.WINxMAP指定窗口颜色控制。 16.GAMMALUT_xx指定伽玛值设置。 17.COLORGAINCON指定颜色增益值设置。 18.HUExxx指定色调系数和偏移值设置。 19.WPALCON指定调色板控制寄存器。 20.WxRTQOSCON指定RTQoS控制寄存器。 21.WxPDATAxx指定每个索引的窗口选项板数据。 22.SHDOWCON指定卷影控制寄存器。 23.WxRTQOSCON指定QoS控制寄存器。
4.4.2 寄存器使用详述
这些详细说明的寄存器都是在LCD驱动中要用到的。
4.4.2.2 时钟寄存器
时钟寄存器是属于系统的时钟的部分其中涉及到LCD的部分时钟寄存器如下表基地址为0x1003_C000: 以下为必须要用到的寄存器的详细用法。
CLK_SRC_LCD0 P505
Base Address: 0x1003_0000 Address Base Address 0xC234, Reset Value 0x0000_1111 作用为LCD_BLK选择时钟源 CLK_SRC_MASK_LCD
Base Address: 0x1003_0000 Address Base Address 0xC334, Reset Value 0x0000_1111 作用LCD BLK的时钟源掩码。如果希望使用外部时钟源来驱动LCD控制器可以设置CLK_SRC_MASK_LCD寄存器的相应位为1将其它位设置为0
CLK_DIV_LCD P530
Base Address: 0x1003_0000 Address Base Address 0xC534, Reset Value 0x0070_0000 作用设置LCD BLK的时钟分频比
CLK_GATE_IP_LCD (P556)
Base Address: 0x1003_0000 Address Base Address 0xC934, Reset Value 0xFFFF_FFFF 作用控制LCD BLK的IP时钟门控。设置为1时表示使能LCD控制器的时钟设置为0时表示关闭LCD控制器的时钟。
4.4.2.3 系统寄存器
LCDBLK_CFG (P884)
Base Address: 0x1001_0000 Address Base Address 0x0210, Reset Value 0x00F8_0000 寄存器lcdblk_cfg是Exynos4412芯片中与LCD控制器背光控制相关的寄存器。该寄存器用于配置和控制LCD控制器背光的工作方式和参数。
fimdbypass_lblk0: 用于配置背光控制是否绕过FIMDFramebuffer Interface Module Display模块。设置为1时表示绕过FIMD模块背光控制由外部电路或外部控制器进行设置为0时表示背光控制由FIMD模块进行。
LCDBLK_CFG2 P886
Base Address: 0x1001_0000 Address Base Address 0x0214, Reset Value 0x0000_0001 4.4.2.4 LCD控制寄存器
VIDCON0 P1838
Base Address 0x11C0_0000 Address Base Address 0x0000, Reset Value 0x0000_0000 VIDCON1 (P1839)
Base Address 0x11C0_0000 Address Base Address 0x0004, Reset Value 0x0000_0000 VIDTCON0 (P1842)
Base Address 0x11C0_0000 Address Base Address 0x0010, Reset Value 0x0000_0000 VIDTCON1
Base Address 0x11C0_0000 Address Base Address 0x0014, Reset Value 0x0000_0000 VIDTCON2 (P1843)
Base Address 0x11C0_0000 Address Base Address 0x0018, Reset Value 0x0000_0000 VIDTCON3 (P1843)
Base Address 0x11C0_0000 Address Base Address 0x001C, Reset Value 0x0000_0000 WINCON0 (P1844)
Base Address 0x11C0_0000 Address Base Address 0x0020, Reset Value 0x0000_0000 SHADOWCON (P1859)
Base Address 0x11C0_0000 Address Base Address 0x0034, Reset Value 0x0000_0000
WINCHMAP2
Base Address 0x11C0_0000 Address Base Address 0x003C, Reset Value 0x7D51_7D51 VIDOSD0A VIDOSD0B VIDOSD0CP1863
VIDOSD0A用于配置视频显示层0的位置和大小。通过设置该寄存器的位字段可以指定视频显示层0在屏幕上的位置和大小。
•
VIDOSD0B用于配置视频显示层0的颜色控制。通过设置该寄存器的位字段可以调整视频显示层0的颜色属性例如亮度、对比度、饱和度等。
•
VIDOSD0C用于配置视频显示层0的混合模式和透明度。通过设置该寄存器的位字段可以指定视频显示层0的混合模式例如覆盖、叠加等以及透明度。
这些寄存器的区别在于它们分别用于配置视频显示层的不同方面。VIDOSD0A用于配置位置和大小VIDOSD0B用于配置颜色控制VIDOSD0C用于配置混合模式和透明度。4.4.2.5 电源管理寄存器
9 LCD0_CONFIGURATION
Base Address: 0x1002_0000 Address Base Address 0x3C80, Reset Value 0x0000_0007 作用配置LCD0的电源模式 5、结语 \qquad 到此有了以上的知识准备接下来就可以开始进行LCD驱动程序的开发了。在下一篇中我们将讲述linux3.14中的LCD驱动的FrameBuffer框架相关内容。