TFT LCD控制显示总结(硬件概念、初始化相关配置)(转)
源地址:http://nervfzb.blog.163.com/blog/static/314813992011215105432369/
TFT LCD是嵌入式中比较常用的显示器,S3C2440/S3C2410都提供了接口进行支持。这里总结下其接口的相关特性。
TFT LCD硬件需要的控制信号:
| 信号名称 | 描述 | 
| VSYNC | 垂直同步信号 | 
| HSYNC | 水平同步信号 | 
| HCLK | 像素时钟信号 | 
| VD[23:0] | 数据信号(TFT LCD的数据接口还有串行形式,这里的是并行方式的) | 
| LEND | 行结束信号(具体操作中不是必须) | 
| PWREN | 电源开关信号 | 
S3C2440提供的接口情况:
由于S3C2440支持多种屏,所以其很多控制管脚是复用的。
由上面的对应关系,GPC0——GPC4是负责TFT LCD控制信号LEND、VCLK、VLINE(HSYNC)、VFRAM(VSYNC)、VM(VDEN)的管脚;S3C2440支持的TFT LCD是采用并行方式的数据接口,GPC8——GPC15是负责VD0——VD7的数据信号;GPD0——GPD15是负责VD8——VD23的数据信号;GPG4是负责TFT LCD电源开关的信号管脚。
TFT LCD在S3C2440上的初始化:
S3C2440上通过配置寄存器来初始化其LCD控制器,下面主要总结下TFT LCD初始化所用到的寄存器:
| 名称 | 说明 | 
| LCDCON1~LCDCON5 | 指定使用的LCD类型、设置LCD各类控制信号的时间特性等 | 
| LCDSADDR1~LCDSADDR3 | 用于设置帧内存的地址 | 
S3C2440使用LCDCON1~LCDCON5来初始化LCD控制器的控制功能。下面的图表展示了各个寄存器初始化情况:
LCDCON1寄存器
| 功能名称 | 位 | 说明 | 
| CLKVAL | [17:8] | 设置TFT LCD的VCLK(像素时钟)的大小 计算公式:VCLK = HCLK /[(CLKVAL +1) × 2] | 
| PNRMODE | [6:5] | 设置LCD的类型,对于TFT LCD设为0x3 | 
| BPPMODE | [4:1] | 设置像素模式,对于TFT LCD可以设置为如下几个值: 0x8 —— 1bpp 0x9 —— 2bpp 0xa —— 4bpp 0xb —— 8bpp 0xc —— 16bpp 0xd —— 24bpp | 
| ENVID | [0] | LCD信号输出使能位,0:禁止,1:使能 (打开这个LCD控制器才能输出LCD信号,注意区别电源开关信号) | 
LCDCON2寄存器
| 功能 | 位 | 说明 | 
| VBPD | [31:24] | TFT LCD信号的垂直信号后肩-1(通过查阅对应的TFT LCD生产厂家提供资料中的Vsync的Back-Porch参数得知) | 
| LINEVAL | [23:14] | LCD垂直宽度:(LINEVAL + 1)行 | 
| VFPD | [13:6] | TFT LCD信号的垂直信号前肩-1(通过查阅对应的TFT LCD生产厂家提供资料中的Vsync的Front-Porch参数得知) | 
| VSPW | [5:0] | TFT LCD信号的垂直信号脉宽-1(通过查阅对应的TFT LCD生产厂家提供资料中的Vsync的Pulse Width参数得知) | 
LCDCON3寄存器
| 功能 | 位 | 说明 | 
| HBPD | [25:19] | TFT LCD信号的水平信号后肩-1(通过查阅对应的TFT LCD生产厂家提供资料中的Hsync的Back-Porch参数得知) | 
| HOZVAL | [18:8] | LCD的水平宽度:(HOZVAL +1)列(像素) | 
| HFPD | [7:0] | TFT LCD信号的水平信号前肩-1(通过查阅对应的TFT LCD生产厂家提供资料中的Hsync的Front-Porch参数得知) | 
LCDCON4寄存器
| 功能 | 位 | 说明 | 
| HSPW | [7:0] | TFT LCD信号的水平信号脉宽-1(通过查阅对应的TFT LCD生产厂家提供资料中的Hsync的Pulse Width参数得知) | 
LCDCON5寄存器
| 功能 | 位 | 说明 | 
| BPP24BL | [12] | 当TFT LCD的BPPMODE被设置成为24bpp时,需要设置这个表示1个4字节数据(32位)中哪3个字节是像素数据:0——LSB有效(低地址的3个字节);1——MSB有效(高地址的3个字节) | 
| FRM565 | [11] | 当TFT LCD的BPPMODE被设置为16bpp时,一个像素所使用的数据格式:0——5:5:5:1格式;1——5:6:5格式 | 
| INVVCLK | [10] | 设置VCLK信号有效沿的极性:0——在VCLK的下降沿读取数据;1——在VCLK的上升沿读取数据 | 
| INVVLINE | [9] | 设置VLINE/HSYNC脉冲的极性:0——正常的极性;1——反转的极性 | 
| INVVFRAME | [8] | 设置VFRAME/VSYNC脉冲的极性:0——正常的极性;1——反转的极性 | 
| INVVD | [7] | 设置VD数据线表示数据(0/1)的极性:0——正常的极性;1——反转的极性 | 
| INVVDEN | [6] | 设置VDEN信号的极性:0——正常的极性;1——反转的极性 | 
| INVPWREN | [5] | 设置PWREN信号的极性:0——正常的极性;1——反转的极性 | 
| INVLEND | [4] | 设置LEND信号的极性:0——正常的极性;1——反转的极性 | 
| PWREN | [3] | LCD_PWREN信号输出使能:0——禁止;1——使能 | 
| ENLEND | [2] | LEND信号输出使能:0——禁止;1——使能 | 
| BSWP | [1] | 字节交换使能:0——禁止;1——使能 | 
| HWSWP | [0] | 半字(2字节)交换使能:0——禁止;1——使能 | 
S3C2440支持4MB的虚拟屏幕,就是指显示图像的大小最大可达4MB。4MB的图像,即使使用24bpp的模式也是一个比较大的图片(1024×1024)。为了更好的使用这个特性S3C2440对于图像数据的读取处理给出了一个直观的图像,这个图像中,可以看到屏幕可以当成一个“窗口”在这个4MB的图像区域“滑动”。这个窗口可大可小,但是这个一般由你的设备的屏幕决定(TQ2440的屏幕为3.5寸,大小为320×240)。
上面表示虚拟屏幕的地址空间必须4MB对齐,所以取其起始地址的[30:22]表示虚拟屏幕的地址。“窗口”在这个4MB的空间内“滑动”,所以“窗口”的起始地址就取[21:1]就可以了,它们之间的配合是一种偏移量的配合。但是由于内存中的数据是一行行的存放,所以需要使用偏移量来描述“窗口”每一行之间的偏移量。
S3C2440使用LCDSADDR1~LCDSADDR3来初始化描述图像数据存放处的情况,下面图表展示如何描述图像数据存放内存,这个区域中的数据会被自动读取显示到屏幕上:
LCDSADDR1寄存器
| 功能 | 位 | 说明 | 
| LCDBANK | [29:21] | 用来保存帧内存其实地址[30:22],帧内存起始地址必须4MB对齐 | 
| LCDBASEU | [20:0] | 在TFT LCD模式下,这会用来保存视口(LCD屏幕左上角像素)所对应的内存起始地址[21:1],这块内存也称为LCD的帧缓冲区 | 
LCDSADDR2寄存器
| 功能 | 位 | 说明 | 
| LCDBASEL | [20:0] | 对于TFT LCD,用来保存LCD的帧缓冲结束地址[21:1],其值等于下面计算公式的结果: LCDBASEL = LCDBASEU + (PAGEWIDTH + OFFSIZE) × (LINEVAL + 1) | 
LCDSADDR3寄存器
| 功能 | 位 | 说明 | 
| OFFSIZE | [21:11] | 表示上一行最后一个数据和下一行第一个数据地址之间的差值的一半,即以半字为单位的地址差(0表示两行数据是紧接的,1表示它们之间有2个字节的偏移,以此类推) | 
| PAGEWIDTH | [10:0] | 视口的宽度,以半字为单位 | 
在所有寄存器配置完成后,不要忘记打开电源。将GPG4管脚置1启动LCD显示。最后开启整个的信号使能。
程序分析:
具体到程序上,初始化配置可以封装到一个函数中去。函数尽量增强可扩展型,所以在初始化的过程中可以指定要显示图像的图像模式,同时对不同图像模式对数据的不同要求对帧内存的初始化也做了相应的封装。
void lcd_init(unsigned char pic_mode)
{
//配置LCD相关引脚
GPCUP = 0x00000000;
GPCCON = 0xaaaa02a9;
GPDUP = 0x00000000;
GPDCON = 0xaaaaaaaa;
//配置寄存器确定相关时序
LCDCON1 = (CLKVAL << ) | (MVAL_USED << ) | (PNRMODE_TFT << ) /
| (BPPMODE_TFT(pic_mode) << ) | ;
LCDCON2 = (VBPD << ) | (LINEVAL << ) | (VFPD << ) | VSPW;
LCDCON3 = (HBPD << ) | (HOZVAL << ) | HFPD;
LCDCON4 = HSPW;
LCDCON5 = (BPP24BL << ) | (FRM565 << ) | /
(INVVCLK << ) | (INVVLINE << ) | /
(INVVFRAME << ) | ( << ) | (INVVDEN << ) | /
(PWREN << ) | (BSWP << ) | HWSWP;
//配置寄存器指明图像数据的内存地址
LCDSADDR1 = ((LCD_BUFFER >> ) << ) | /
M5D(LCD_BUFFER >> );
switch(pic_mode)
{
case BPP24:
LCDSADDR2 = M5D((LCD_BUFFER + /
(LCD_WIDTH * LCD_HEIGHT * )) >> );
LCDSADDR3 = LCD_WIDTH * / ;//two half words
break;
case BPP16:
LCDSADDR2 = M5D((LCD_BUFFER + (LCD_WIDTH * /
LCD_HEIGHT * )) >> );
LCDSADDR3 = LCD_WIDTH * / ;//one half words
break;
default:
break;
}
LCDINTMSK |= ;//屏蔽LCD中断
TCONSEL = ;//无效LPC3480 GPGUP = (GPGUP & (~( << ))) | ( << );//GPG4上拉电阻无效
GPGCON = (GPGCON & (~( << ))) | ( << );//设置GPG4LCD_PWREN
GPGDAT = GPGDAT | ( << );//GPG4置1打开电源信号 LCDCON5 = (LCDCON5 & (~( << ))) | ( << );//有效PWREN信号
LCDCON5 = (LCDCON5 & (~( << ))) | ( << );//PWREN信号极性不翻转 LCDCON1 |= ;//LCD开启(LCD信号输出使能位)
}
参考书籍:
赵春江的博客:《s3c2440的LCD应用》http://blog.csdn.net/zhaocj/archive/2010/03/19/5397180.aspx
韦东山:《嵌入式Linux应用开发完全手册》
S3C2440芯片资料
LQ035NC211屏幕资料
TFT LCD控制显示总结(硬件概念、初始化相关配置)(转)的更多相关文章
- JavaFx在Main中获取Controller初始化相关配置和Fxml
		Main中的方法 package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; impor ... 
- TFT LCD显示原理详解
		<什么是液晶> 我们一般认为物体有三态:固态.液态.气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一): ... 
- 【STM32H7教程】第51章  STM32H7的LTDC应用之LCD汉字显示和2D图形显示
		完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第51章 STM32H7的LTDC应用之LCD汉字 ... 
- 嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示
		在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们 ... 
- jquery通过ajax获取数据,控制显示的数据条数
		效果图: 现在我们可以先看它的json数据,如图所示: 然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ... 
- 【小梅哥FPGA进阶教程】串口发送图片数据到SRAM在TFT屏上显示
		十五.串口发送图片数据到SRAM在TFT屏上显示 之前分享过rom存储图片数据在TFT屏上显示,该方法只能显示小点的图片,如果想显示TFT屏幕大小的图片上述方法rom内存大小不够.小梅哥给了个方案,利 ... 
- 使用TFT LCD制作Arduino触摸屏计算器
		Arduino开发板总是可以帮助我们轻松地构建一个项目,并使其看起来更具有吸引力.对一个带有触摸功能的液晶显示屏进行编程听起来可能是一件复杂的工作,但是通过使用Arduino库和扩展模块可以使得这项工 ... 
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
		大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ... 
- Js控制显示、隐藏文本框中的密码
		Js控制显示.隐藏文本框中的密码,也可称为是一款小型的JavaScript星号密码破解器,点击会显示出密码类型的文本框中的真实信息,再次点击则还原,程序 主要是获取HTML元素对象,然后强制更改元素属 ... 
随机推荐
- spring framework 4 源码阅读
			前面写了几篇spring 的介绍文章,感觉与主题不是很切合.重新整理下思路,从更容易理解的角度来写下文章. spring 的骨架 spring 的骨架,也是spring 的核心包.主要包含三个内容 1 ... 
- SVN和Maven及Jenkins(转)
			目前项目组在开发一个项目,由多个子模块构成,构建工具是maven,版本控制工具是svn.本文想对如何结合使用maven和svn提出一点初步的想法 一.只有svn的情况 首先考虑没有maven的情况.这 ... 
- linux性能分析命令和性能观察工具
- Android 关于获取摄像头帧数据解码
			由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Param ... 
- Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T
			Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T ... 
- Android Studio常用插件
			ButterKnife 这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来,其对性能的影响微乎其微(查看过Butter Knife的源码,其自 ... 
- 如果ASM磁盘组由哪些物理磁盘组成?
			我们知道用下面的方法可创建 ASM 磁盘,然后再创建逻辑的ASM组 以 root 用户身份创建 ASM 磁盘.# /etc/init.d/oracleasm createdisk VOL1 /dev/ ... 
- [转] thrift的使用介绍
			http://gemantic.iteye.com/blog/1199214 一.About thrift 二.什么是thrift,怎么工作? 三.Thrift IDL 四.Thrift ... 
- C#操作Excel(NPOI)
			这两天需要读取Excel文件,网上找了找,发现NPOI用的是最多的,于是研究了一下.这里大概介绍一下. 首先,在NPOI中一个Excel文件对应了一个IWorkbook对象,Excel中的一个工作表对 ... 
- 《node.js开发指南》读书笔记(一)
			在开发时如果修改了js内容,不能通过刷新浏览器直接看到效果,必须通过重启nodejs程序才能看到,这样显然不利于开发调试,supervisor可以实现这个功能,监视对代码的改动,并自动重启nodejs ... 
