ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计

上传人:E**** 文档编号:89108659 上传时间:2019-05-18 格式:PPT 页数:28 大小:678.50KB
返回 下载 相关 举报
ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计_第1页
第1页 / 共28页
ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计_第2页
第2页 / 共28页
ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计_第3页
第3页 / 共28页
ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计_第4页
第4页 / 共28页
ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计》由会员分享,可在线阅读,更多相关《ARM嵌入式Linux驱动程序开发 廉文娟第9章LCD驱动程序分析与设计(28页珍藏版)》请在金锄头文库上搜索。

1、第9章LCD驱动程序分析与设计,2011-7-4,9.1 LCD显示器,液晶显示器(LCD)英文全称为Liquid Crystal Display。它是一种采用了液晶控制透光度技术来实现色彩的显示器。 由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。 LCD显示器还通过液晶控制透光度的技术原理让底板整体发光,所以它做到了真正的完全平面。 体积小、能耗低,9.1 LCD显示器,1、液晶 液晶得名于其物理特性:它的分子晶体以液态存在而非固态。大多数液晶都属于有机复合物。这些晶体分子的液体特性使得它具有两种非常有用的特点:如果让电流通过液晶层,这些分子将会

2、以电流的流向方向进行排列,如果没有电流,它们将会彼此平行排列。 2、LCD显示屏的背光源 LCD显示属于被动显示方式,液晶本身不能发光,它只能通过对光线的穿透和反射来实现显示功能。所以,所有的液晶显示器都会有背光来照亮液晶。光源的提供方式有两种:透射式和反射式。,9.1 LCD显示器,3、LCD的分类 LCD可分为无源阵列彩显STN-LCD(俗称伪彩显)和薄膜晶体管有源阵列彩显TFT-LCD(俗称真彩显)。 4、LCD显示器的工作原理 LCD由两块玻璃板构成,厚约1mm,其间由包含有液晶材料的5m均匀间隔隔开。因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,而在液晶显示屏背面有

3、一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成的,可以发射光线,其作用主要是提供均匀的背景光源。,9.2 LCD的显示接口,1、LCD的驱动控制 LCD的驱动控制主要由两种方式:总线驱动方式和扫描器控制方式。 (1)总线控制方式 一般带有驱动模块的LCD显示屏使用总线驱动方式,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机。由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。 (2)扫描器控制方式 扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。这种LCD体积小,但需要另外的驱动芯片。通常可以使用带有LCD驱动能力

4、的高档MCU驱动,如ARM系列的S3C2410。,9.2 LCD的显示接口,2、LCD的显示接口,图9-1 S3C2410 LCD控制器,9.2 LCD的显示接口,2、LCD的显示接口,表9-1 S3C2410 LCD控制器的接口定义,9.2 LCD的显示接口,3、 STN型LCD控制器操作 (1) 视频操作 S3C2410的 LCD控制器可支持8位彩色模式(256 色模式),12位彩色模式(4096色模式),4级灰度模式,16级灰度模式以及单色模式。 (2)查找表 S3C2410能支持多样选择的颜色或灰度映射的颜色查找表,确保用户使用弹性化。颜色查找表是可以选择彩色或灰度级别(在4级灰度模式

5、下可选择16级灰度中的4级,在256色模式下可选择16级红色中的8种,16级绿色中的8种和16级蓝色中的4种)的调色板。,9.2 LCD的显示接口,3、 STN型LCD控制器操作 (3)灰度模式操作 S3C2410的 LCD控制器支持2种灰度模式:每像素2 位灰色(4 级灰度)和每像素4位灰色(16级灰度)。 (4)256级彩色模式操作 S3C2410的LCD控制器可支持8位/像素的256色显示模式。利用抖动算法和帧频控制,彩色显示模式下可产生 256 种颜色。每像素的8 位可编码成为 3位代表红色、3 位代表绿色和位代表蓝色。 (5)4096级彩色模式操作 S3C2410 的 LCD控制器可

6、以支持 12 位/像素的4096 色显示模式。,9.2 LCD的显示接口,3、 STN型LCD控制器操作 (6)抖动和帧频控制 对于 STN型LCD 显示屏(单色除外),视频数据都必须经过抖动算法的处理。DITHFRC 有两个功能:为减少闪烁而设的基于时间的抖动算法和为在 STN型屏上显示灰色或彩色的帧频控制。 (7)显示类型 LCD 控制器支持3种类型的 LCD驱动器:4位双扫描、4位单扫描和8位单扫描显示模式。 (8)内存中数据的格式 4级灰度模式下,一个像素由2位视频数据表示;16级灰度模式下,一个像素由4位视频数据表示;256级彩色模式下,一个像素由8位(其中3位红色,3位绿色,2位蓝

7、色)视频数据表示,9.2 LCD的显示接口,3、 STN型LCD控制器操作 (9)STN型LCD时序 利用 VD7:0信号将视频数据从内存传送到LCD驱动器。VCLK 信号是将数据移入LCD驱动器中移位寄存器的时钟信号。一行数据被移入 LCD 驱动器中的移位寄存器后,便插入一个VLINE信号以显示此行(表明一行的结束)。,9.2 LCD的显示接口,4、TFT型LCD控制器操作 S3C2410中TFT LCD控制器支持1、2、4或8位每像素带调色板显示和16位或24位每像素无调色板真彩色显示。 (1)TFT显示屏扫描时序 (2)内存中的数据格式 在颜色控制上,TFT显示屏与STN显示屏也不相同。

8、TFT显示屏并不是通过控制信号占空比来控制颜色深度的,其颜色深度完全由二进制数据来表示,即每次时钟(VCLK)输入的数据只对应一个点的颜色。,9.2 LCD的显示接口,4、TFT型LCD控制器操作 S3C2410中TFT LCD控制器支持1、2、4或8位每像素带调色板显示和16位或24位每像素无调色板真彩色显示。 (3)调色板原理 S3C2410为TFT型LCD控制器提供了256色调色板。256 色调色板由 256(深度)16 位 SPSRAM 组成,这种调色板可支持 5:6:5(R:G:B)和5:5:5:1(R:G:B:I)两种格式。,9.3 嵌入式处理器的LCD控制器,9.3.1 LCD控

9、制器,图9-6 集成了LCD控制器的嵌入式处理器基本架构,9.3 嵌入式处理器的LCD控制器,9.3.2 LCD控制器的设置 LCD驱动编写的主要工作就是正确设置对应于所用LCD屏的CPU寄存器。表9-7所示为嵌入式处理器S3C2410中与LCD相对应的寄存器。各寄存器详细的设置可以参考S3C2410用户手册。,9.3 嵌入式处理器的LCD控制器,9.3.2 LCD控制器的设置,9.3 嵌入式处理器的LCD控制器,9.3.2 LCD控制器的设置 因为JXARM9-2410开发板上使用的LCD屏为8英寸16位真彩色TFT类型,分辨率为640*480,所以,下面将以该屏为例来简要讲解各寄存器的设置

10、。 1、TFT型LCD屏各控制信号的产生 TIMEGEN (脉冲发生器) 产生适合LCD驱动器的各种控制信号, 如VSYNC, HSYNC, VCLK, VDEN,和 LEND 等信号。这些控制信号与寄存器组中的控制寄存LCDCON1/2/3/4/5 的配置密切相关。,9.3 嵌入式处理器的LCD控制器,9.3.3 LCD的字符显示缓存 LCD字符显示就是将字库(汉字字库、英文字库或者其他语言字库)中的字模以图形方式显示在LCD上。 常用的汉字点阵字库文件。例如常用的1616点阵HZK16文件,按汉字区位码从小到大依次存有国标区位码表中的所有汉字。每个汉字占用32个字节,每个区为94个汉字。

11、汉字在汉字库中的具体位置计算公式为: location = (94*(qh-1)+wh-1)*一个汉字字模占用字节数,例如汉字“房”的机内码为十六进制的“B7BF” 。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32(23-1) 94+(31-1)=67136B以后的32个字节为“房”的显示点阵。,9.4 基于Framebuffer的LCD驱动程序实例,9.4.1 Framebuffer概述 Framebuffer是出现在Linux2.

12、2内核版本以后的一种驱动程序接口,这种接口将显示设备抽象成为帧缓冲区(一个面向显示缓冲区的统一接口)。应用程序不需要知道底层硬件的任何信息,它只和Framebuffer抽象出来的接口打交道,这样就大大降低了拥有GUI界面程序的移植工作。 Framebuffer还考虑了支持控制台的字符显示。在Linux2.4内核中,与Framebuffer控制台有关的代码被放到了fbcon和其它相关的目录中;在Linux2.6内核中,这些代码被放到了drivers/video/console中,它们涵盖了各种不同格式显示缓冲的字符输出、字体定义文件等,9.4 基于Framebuffer的LCD驱动程序实例,9.

13、4.2 Framebuffer设备驱动程序的结构 Framebuffer驱动本身是一个比较复杂的结构,内核已经提供了大量移植好的代码以供参考。帧缓冲设备对应的设备文件是/dev下的fb*文件。 Framebuffer驱动主要基于以下两个文件: linux/include/linux/fb.h linux/drivers/video/fbmem.c 其中fb.h定义了几乎所有重要的结构,以下三个尤为重要: struct fb_info struct fb_var_screeninfo struct fb_fix_screeninfo,9.4 基于Framebuffer的LCD驱动程序实例,9.4

14、.3 Framebuffer设备驱动程序的设计 (1)初始化函数 Framebuffer驱动首先要初始化LCD控制器,通过相关寄存器来设置LCD相对应的显示模式和颜色数,然后分配显示缓冲区。通常,用vmalloc()函数可以分配一段连续空间,缓冲区的大小可以用“点阵行数x点阵列数x一个像素的位数/8”计算得到。通常将缓冲区分配在容量相对较大的片外SDRAM中,起始地址保存在LCD控制器中。最后,函数会初始化一个fb_info结构,填充其中的成员变量,同时调用函数register_framebuffer(&fb_info),注册framebuffer驱动程序。,9.4 基于Framebuffer

15、的LCD驱动程序实例,9.4.3 Framebuffer设备驱动程序的设计 (2)成员函数 这部分主要负责编写fb_info结构体中结构体指针fb_ops对应的底层操作函数。对于嵌入式系统来说,主要实现以下3个函数:,9.4 基于Framebuffer的LCD驱动程序实例,9.4.3 Framebuffer设备驱动程序的设计 (3)读写 读写部分主要完成对帧缓冲区的读写操作。例如执行命令“cp .dev/fb temp”,相当于把屏幕中的内容复制到一个temp文件中;而当执行命令“cp temp /dev/fb”时,就相当于将temp文件中的内容打印到显示屏上。 (4)地址映射 Linux有内

16、核空间和用户空间,工作在保护模式时,应用程序进程都有自己的虚拟地址空间,应用程序不能直接访问物理缓冲地址。Linux在文件操作接口中提供了地址映射操作,它可以将文件的内容映射到用户空间,这样用户就可以通过读写这段地址来访问缓冲区。 (5)输入输出控制 设备文件的ioctl()调用可以读取和设置显示设备(包括屏幕)的参数,如分辨率、支持颜色数、屏幕大小等。,9.5 LCD驱动程序在S3C2410上的移植,9.5.1 移植步骤 本书使用的Linux版本为linux-2.6.14.1,开发板上LCD的型号为TFT型,分辨率为640*480。 (1)添加s3c2410处理器的LCD控制寄存器的初始值 具体方法为在文件arch/arm/mach-s3c2410/mach-smdk2410.c中添加结构体struct s3c2410fb_mach_info类型的寄存器描述讯息和相应的头文件 (2)通过s3c24xx_fb_set_platdata函数向内核注册上面的信息 因为2.6.14没有s3c24xx_fb_set_platdata()这个函数,在arch

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号