TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
来源:互联网 发布:淘宝嘉年华报名入口 编辑:程序博客网 时间:2024/05/01 19:39
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显示。最后开启整个的信号使能。
程序分析:
具体到程序上,初始化配置可以封装到一个函数中去。函数尽量增强可扩展型,所以在初始化的过程中可以指定要显示图像的图像模式,同时对不同图像模式对数据的不同要求对帧内存的初始化也做了相应的封装。
01 void lcd_init(unsigned char pic_mode) 02 { 03 //配置LCD相关引脚 04 GPCUP = 0x00000000; 05 GPCCON = 0xaaaa02a9; 06 GPDUP = 0x00000000; 07 GPDCON = 0xaaaaaaaa; 08 //配置寄存器确定相关时序 09 LCDCON1 = (CLKVAL << 8) | (MVAL_USED << 7) | (PNRMODE_TFT << 5) / 10 | (BPPMODE_TFT(pic_mode) << 1) | 0; 11 LCDCON2 = (VBPD << 24) | (LINEVAL << 14) | (VFPD << 6) | VSPW; 12 LCDCON3 = (HBPD << 19) | (HOZVAL << 8) | HFPD; 13 LCDCON4 = HSPW; 14 LCDCON5 = (BPP24BL << 12) | (FRM565 << 11) | / 15 (INVVCLK << 10) | (INVVLINE << 9) | / 16 (INVVFRAME << 8) | (0 << 7) | (INVVDEN << 6) | / 17 (PWREN << 3) | (BSWP << 1) | HWSWP; 18 //配置寄存器指明图像数据的内存地址 19 LCDSADDR1 = ((LCD_BUFFER >> 22) << 21) | / 20 M5D(LCD_BUFFER >> 1); 21 switch(pic_mode) 22 { 23 case BPP24: 24 LCDSADDR2 = M5D((LCD_BUFFER + / 25 (LCD_WIDTH * LCD_HEIGHT * 4)) >> 1); 26 LCDSADDR3 = LCD_WIDTH * 32 / 16;//two half words 27 break; 28 case BPP16: 29 LCDSADDR2 = M5D((LCD_BUFFER + (LCD_WIDTH * / 30 LCD_HEIGHT * 2)) >> 1); 31 LCDSADDR3 = LCD_WIDTH * 32 / 32;//one half words 32 break; 33 default: 34 break; 35 } 36 LCDINTMSK |= 3;//屏蔽LCD中断 37 TCONSEL = 0;//无效LPC3480 38 39 GPGUP = (GPGUP & (~(1 << 4))) | (1 << 4);//GPG4上拉电阻无效 40 GPGCON = (GPGCON & (~(3 << 8))) | (3 << 8);//设置GPG4LCD_PWREN 41 GPGDAT = GPGDAT | (1 << 4);//GPG4置1打开电源信号 42 43 LCDCON5 = (LCDCON5 & (~(1 << 3))) | (1 << 3);//有效PWREN信号 44 LCDCON5 = (LCDCON5 & (~(1 << 5))) | (0 << 5);//PWREN信号极性不翻转 45 46 LCDCON1 |= 1;//LCD开启(LCD信号输出使能位) 47 }
参考书籍:
赵春江的博客:《s3c2440的LCD应用》http://blog.csdn.net/zhaocj/archive/2010/03/19/5397180.aspx
韦东山:《嵌入式Linux应用开发完全手册》
S3C2440芯片资料
LQ035NC211屏幕资料
- TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
- TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
- 【转】TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
- TFT LCD控制显示总结(硬件概念、初始化相关配置)
- Stm32的TFT LCD显示器控制学习笔记
- LCD相关一些硬件概念
- LCD显示的主要相关概念
- s3c2440控制TFT LCD
- s3c2440控制TFT LCD
- 7.mini2440开发板LCD(x35 TFT 240*320)显示控制(裸机)
- TFT LCD 学习笔记
- TQ2440 学习笔记—— 25、LCD 控制器
- 基于DSP的彩色TFT-LCD数字图像显示技术研究
- TQ2440的学习——UBOOT移植(NOR FLASH相关操作支持)
- WebService学习总结(一)——WebService的相关概念
- WebService学习总结(一)——WebService的相关概念
- WebService学习总结(一)——WebService的相关概念
- WebService学习总结(一)——WebService的相关概念
- 浅析Android线程模型
- TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
- Nginx document
- 再谈向RichEdit中插入GIF动画的实现
- linux文件系统实现浅析
- TQ2440的学习——TFT LCD控制显示总结(硬件概念、初始化相关配置)
- 如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果
- TCP并发服务器的简易程序
- 虚继承 重载 覆盖 隐藏
- Google Map API使用详解(二十)——实现Google Map本地搜索框(下)
- JAVA开发者最常去的20个英文网站
- 我需要学编程吗?
- Android实现上下滑动效果
- 哈弗曼树研究(JAVA)