LCD驱动原理

S3C2410/2440 MCU内部都集成了LCD控制器,通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。

LCD控制器主要由REGBANK,LCDCDMA,VIDPRCS,TIMEGEN等寄存器组成,如果不是用的三星的LCD,LPC3600和LCC3600就不用管它,它们专门为三星的LCD设计的。

REGBANK由17个可编程的寄存器和一个256X16调色板内存组成,他们用来配置LCD控制器。

LCDCDMA是一个专用的DMA,它能自动将帧内存中的数据传送到LCD驱动器,通过这个DMA通道,数据不需要CPU干涉就能传送到LCD上显示。

VIDPRCS接收来自LCDCDMA的数据,并转换成合适的数据格式再送到LCD驱动器中。

TIMEGEN由可编程的逻辑组成,生成LCD驱动器需要的控制信号,比如VSYNC、HSYNC、VCLK和LEND等等,而这些控制信号又与REGBANK寄存器组中的 LCDCON1/2/3/4/5的配置密切相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形态,从而支持不同的LCD驱动器(即不同的 STN/TFT屏)。

我们在LCD上显示的一幅图像称为一帧图像。在LCD上显示一帧图像的原理:从第一行的最左边开始扫描,一行结束后跳到下一行继续扫描。当显示完一幅图像后,从新第一行接着扫描。

常见TFT屏工作时序图:

VSYNC:垂直同步信号

VSPW:表示垂直同步脉冲的宽度,用行数计算

VBPD:表示新一帧图像的开始,垂直同步信号以后无效的行数

VFPD:表示新一帧图像结束后,垂直同步信号以前的无效的行数

HSYNC:水平同步信号,表示新的一行的开始,即跳到最左边开始行的一行数据的扫描。

HSPW:表示水平同步信号的宽度,用VCLK计算

HBPD:表示水平同步信号从开始到一行的有效数据开始之间VCLK的个数

HFPD:表示一行有限数据结束到下一个水平同步信号开始之间VCLK的个数

VCLK:像素时钟信号

VD[23:0]:LCD像素数据输出端口

VDEN:数据使能信号

LEDN:行结束信号

这幅图在LCD上的显示原理就是:

A:显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上用时间线表示就为VCLK,我们称之为像素时钟信号;
B:当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为1 Line;
C:接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换;
D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。因此,这一行一行的显示在时间线上看,就是时序图上的HSYNC;
E:然
而,LCD的显示并不是对一副图像快速的显示一下,为了持续和稳定的在LCD上显示,就需要切换到另一幅图上(另一幅图可以和上一副图一样或者不一样,目
的只是为了将图像持续的显示在LCD上)。那么这一副一副的图像就称之为帧,在时序图上就表示为1 Frame,因此从时序图上可以看出1
Line只是1 Frame中的一行;
F:同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么LCD整个显示的过程在时间线上看,就可表示为时序图上的VSYNC。

显示器的频率: 当HCLK=100MHz时,
Frame Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x{2x(CLKVAL+1)/(HCLK)}]
             = 60Hz

LCDCON1:17 - 8位 CLKVAL
          6 - 5位扫描模式(对于STN屏:4位单/双扫、8位单扫)
          4 - 1位色位模式(1BPP、8BPP、16BPP等)
LCDCON2:31 - 24位 VBPD
         23 - 14位 LINEVAL
         13 - 6位 VFPD
          5 - 0位 VSPW
LCDCON3:25 - 19位 HBPD
         18 - 8位 HOZVAL
          7 - 0位 HFPD
LCDCON4: 7 - 0位 HSPW
LCDCON5: 1 - 0位用来设置数据存储方式,我们ARM上电默认的方式是小端模式,即数据的低位放在低地址处,数据的高位放在高地址处。第3位用来设置给LCD供电,我们LCD有两种供电方式,一种是外接电源,一种是我们IO口输出高电平供电,mini2440采用的是io口供电,采用IO供电的好处是当我们不用 LCD的时候可以通过软件来设置LCD的开启与关闭。第8、9位是设置信号极性的。第11位用来设置显示模式,我们采用的的是5:6:5模式。

帧缓冲:

帧内存就是图像数据的存放地址,我们将图像数据放入到帧内存中,然后自动通过LCDDMA将数据送到LCD上显示。

16BPP有两种表示方式,分别为5:5:5:1显示模式和5:6:5显示模式。

LCD控制器的地址寄存器LCDSADDR1~3:

1. LCDSADDR1: 设置LCDBANK、LCDBASEU

2. LCDSADDR2: 设置LCDBASEL: 帧缓冲区的结束地址A[21:1]

3. LCDSADDR3: 设置[21:11]位OFFSIZE等于0,我们用到[10:0]位PAGEWIDTH等于(320 LCD的宽度为320个像素)

时间: 2024-11-09 21:43:10

LCD驱动原理的相关文章

LCD驱动程序设计

一.LCD简介 要说LCD,先需要了解什么是液晶.1888年,奥地利植物学家莱尼茨尔发现一些有机物融化后变成液体.随后一位德国专家发现这些液体具有某些晶体的特征,比如折射性,于是他就称呼这种液体叫"液态晶体",也就是"液晶",液晶属于一种有机化合物,分子形状为长棒状,长度大约10NM,在不同的电流作用下,分子会做有规律的旋转,这样对光线产生了一定的控制,很多液晶分子构成一个像素,而很多像素又构成了完整图像. LCD是Liquid Crystal Display的简称

S3C2440 LCD驱动(FrameBuffer)实例开发<一>(转)

1. 背景知识 在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此学习LCD的应用很有实际意义! LCD工作的硬件需求:要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器.在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等.TQ2440是采用了S3C2440,S

《Linux驱动》iTop4412开发板LCD驱动 详细分析 (三)

接下来我们来详解介绍probe中的函数: 第一个函数: s3cfb_set_lcd_info(fbdev[i]); 1.该函数源码如下: /*该函数在s3cfb_wa101s.c 中*/ /* name should be fixed as 's3cfb_set_lcd_info' */ void s3cfb_set_lcd_info(struct s3cfb_global *ctrl) { s3cfb_setup_lcd(); //由硬件选择设备,初始化相应参数 wa101.init_ldi

展讯sc7731 LCD驱动简明笔记之二

此篇笔记基于sc7731 - android 5.1,对lcd的framebuffer做一个简明笔记. 一共分为两大部分:第一部分,关于LCD的硬件方面的:第二部分,关于lcd核心处理(framebuffer)部分的. 第一部分,LCD硬件相关的 一.液晶 液晶是一种高分子有机材料.当给它加上直流电场后,原本有序的分子排列被打乱,一部分液晶变得不透明,颜色加深,便因此显示出字符和图形. 液晶的光电效应:干涉.散射.衍射.旋光.吸收等. 二.LCD种类 1. 构造: 使用两块玻璃板夹着一块液晶:一

LCD驱动分析【转】

转自:http://blog.csdn.net/hanmengaidudu/article/details/21559153 1.S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 其中的代码也可直接参考:drivers/video/s3c2410fb.c 以下为转载文章,文章原地址:http://blog.csdn.net/jianyun123/archive/2010/04/24/5524427.aspx S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 一

LCD驱动应该怎么写?–基于stm32F407 [复制链接]

够用的硬件能用的代码使用的教程 (拷贝过来的代码有点乱,请下载附件查看文档) 资料下载地址:https://pan.baidu.com/s/1bHUVe6X6tymktUHk_z91cA 网络上配套STM32开发板有很多LCD例程,主要是TFT LCD跟OLED的.从这些例程,大家都能学会如何点亮一个LCD.但是不知道有多少人会直接使用这些代码,至少我不用,不是不用,而是用不了.这代码都有下面这些问题: 1 分层不清晰,通俗讲就是模块化太差.2 接口乱.其实只要接口不乱,分层就会好很多了.3 可

Linux LCD驱动(三)--图形显示

3.  BMP和JPEG图形显示程序3.1  在LCD上显示BMP或JPEG图片的主流程图首先,在程序开始前.要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0.命令如下:mknod fb0 c 29 0在LCD上显示图象的主流程图如图3.1所示.程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形文件数据,把图象的RGB值映射到显存中,这部分是图象显示的核心.对于JPEG格式的图片,要先经过JPE

Linux LCD驱动(四)--驱动的实现

目录(?)[-] 基本原理 写 framebuffer 驱动程序要做什么 LCD 模块 驱动程序 控制器 什么是 frame buffer 设备 Linux Frame Buffer 驱动程序层次结构 数据结构 接口 一个 LCD controller 驱动程序 分配系统内存作为显存 实现 fb_ops 结构 基本原理 通过 framebuffer ,应用程序用 mmap 把显存映射到应用程序虚拟地址空间,将要显示的数据写入这个内存空间就可以在屏幕上显示出来: 驱动程序分配系统内存作为显存:实现

LCD驱动分析(三)时序分析

参考:S3C2440 LCD驱动(FrameBuffer)实例开发<一>   S3C2440 LCD驱动(FrameBuffer)实例开发<二>