WGM_12864C液晶显示模块在嵌入式系统中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WG M 212864C 液晶显示模块在嵌入式系统中的应用
Ξ
The Application of LCD WG M 212864C in Embedded System
龚 彬1,2,吴 平1,2,刘维亚1,王遵立1
(1.中国科学院长春光学精密机械与物理研究所 吉林长春130022;
2.中国科学院研究生院 北京100039)
【摘 要】 介绍了uClinux 嵌入式操作系统,并根据W GM 212864C 点阵液晶显示模块的特点,论
述了点阵液晶显示的编程方法,同时说明了在嵌入式操作系统中液晶显示模块的具体实现过程。
关键词:uClinux ,嵌入式操作系统,W GM 212864C ,液晶显示【Abstract 】 In this paper ,the embedded system of uClinux is introduced ,the programming method of LCD is given according to the characteristics of W GM 212864C ,and the detailed implementation of the LCD in embedded system is presented.
K eyw ords :uClinux ,embedded system ,W GM 212864C ,LCD
1 引 言
在当前数字信息技术和网络技术高速发展的时代,嵌入式系统已经广泛地渗透到科学研究、工业控制、军事技术、仪器仪表、通讯等方面。
嵌入式系统融合了计算机软硬件技术、通讯技术和半导体微电子技术,根据应用要求,把相应的微处理器直接嵌入到应用系统中。
同时,随着嵌入式系统越来越广泛的应用,嵌入式系统中人机界面的实现就显得十分重要。
点阵液晶显示模块满足了嵌入式系统的显示要求,可以根据用户需要显示汉字和字符,也可以显示基于点阵的图形,同时还具有低压、微功耗等优点,因而被广泛应用于嵌入式系统中。
2 uClinux 嵌入式系统
uClinux 是针对控制领域的嵌入式Linux 操作系统,从Linux2.0/2.4内核派生而来,沿袭了主流Linux 的绝大部分特性,适合不具备内存管理单元(MMU )的微处理器。
没有MMU 支持是uClinux 和Linux 的基本差异。
uClinux 采用存储器分页管理,系统启动时把实际存储器分页,在加载应用程序时分页加载。
但由于没有MMU 管理,所以实际上uClinux 采用了实存储器策略。
uClinux 对内存的访问是直接的,所有程
序访问的地址都是实际的物理地址。
操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。
一个进程在运行前,系统必须为进程分配足够的连续地址空间,然后全部载入到主存储器连续空间中。
最小的嵌入式uClinux 系统仅需3个基本元素:内核引导实用程序、uClinux 微内核(它由内存管理、进
程管理和定时服务构成)、初始化过程。
同时根据需
要添加:硬件驱动程序、一个或多个应用进程(以提供所需功能)、一个文件系统(可能是在ROM 或者是RAM 里)、储存半瞬态数据和提供交换空间的磁盘、TCP/IP 网络栈等。
uClinux 的内核有两种可选的运行方式:在Flash 上直接运行,或加载到内存中运行(这种做法可以减少内存需要)。
Flash 运行方式是:把内核的可执行映象烧写到Flash 上,系统启动时从Flash 的某个地址开始逐句执行。
这是很多嵌入式系统所采用的方法。
内核加载方式是:把内核的压缩文件存放在Flash 上,系统启动时读取压缩文件在内存里解压,然后开始执行。
这种方式相对复杂一些,但是运行速度可能更快(RAM 的存取速率要比Flash 高),同时这也是标准Linux 系统采用的启动方式。
uClinux 的根(root )文件系统一般采用romfs 文件系统,这种文件系统相对于一般的ext2文件系统要求的空间更小。
空间的节约来自于两个方面:首先,内核支持romfs 文件系统比支持ext2文件系统需要更小的代码;其次,romfs 文件系统相对简单,建立文件系统超级块(superblock )需要的存储空间更小。
romfs 文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟RAM 盘的方法进行处理(RAM 盘将采用ext2文件系统)。
3 WG M 212864C 液晶显示模块
W GM 212864C 是一种图形点阵液晶显示模块,主要由行驱动器、列驱动器及128×64全点阵液晶显示
器组成。
可以点阵方式完成图形和汉字的显示。
模块
・
01・电子工程师 计算机应用 V ol.29
N o.7 2003
Ξ收稿日期:2003205208
内自带-10V 负压,用于LCD 的驱动。
与CPU 接口
采用了8位数据总线并行输入输出和8条控制线。
其引脚功能见表1。
表1 W GM 212864C 引脚功能
引脚号
引脚名称引脚功能描述1CS1选择芯片12CS2选择芯片23VSS 电源地4VDD 电源电压
5VO 液晶显示器驱动电压输入6D/I 数据/指令信号7R/W 读写信号8E 使能信号9~16DB0~DB7数据线17RES 复位信号
18V EE LCD 驱动负压输出(-10V )19EL +EL 背光电源(+5V )
20
EL -EL 背光电源(0V )
3.1 WG M 212864C 内部硬件结构简介
W GM 212864C 内部硬件结构框图如图1所示。
图1 W GM 212864C 内部硬件结构框图其中,IC3为行驱动器,IC1、IC2为列驱动器。
IC3、IC1、IC2包含下列主要功能器件,通过这些器件就可以对W GM 212864C 液晶显示模块进行编程。
(1)指令寄存器(IR )
IR 用来寄存指令码,与数据存储器寄存数据相对应,当D/I =0时,在E 信号下降沿的作用下,指令码写入IR 。
(2)数据寄存器(DR )
DR 用来寄存数据。
当D/I =1时,在E 信号下降沿的作用下,图形显示数据写入DR ,或者在E 信号高电平作用下由DR 读到DB0~DB7数据总线。
(3)忙标志(BF )
BF 标志提供内部工作情况。
BF =1表示模块在进行内部操作,此时模块不接受外部指令和数据;BF =0表示模块为准备状态,随时可接受外部指令和数据。
(4)显示控制触发器(DFF )
DFF 用来控制液晶模块屏幕显示的开和关。
DFF =1为开显示,DDRAM 的内容就显示在屏幕上,DFF =0为关显示。
(5)XY 地址计数器
XY 地址计数器是一个9位计数器。
高3位为X 地址计数器,低6位为Y 地址计数器,X 地址计数器为DDRAM 的页指针,Y 地址计数器为DDRAM 的列
指针。
(6)显示数据RAM (DDRAM )
DDRAM 用来存储点阵数据。
数据1为选择,数据0为非选择。
(7)Z 地址计数器
Z 地址计数器是一个6位计数器,具有循环计数功能,用于显示行扫描同步。
当一行扫描完成,此计数器自动加1。
RST 复位后Z 地址计数器位0。
3.2 WG M 212864C 的编程指令集
(1)显示开关控制(DISPLA Y ON/OFF )(见表2)
表2 显示开关控制字
代码R/W D/I DB7DB6DB5DB4DB3DB2DB1DB0
内容000011111D
D =1:开显示(DISPLA Y ON )表示显示器可以进
行各种显示操作。
D =0:关显示(DISPLA Y OFF )表示不能对显示器进行各种显示操作。
例如如下部分C 语言代码所示:
其中W GM 212864C 的数据线DB0~DB7和单片机A T89C52的P1口相连,R/W 和A T89C52的P2.0口相连,W GM 212864C 与A T89C52的硬件接口电路如图2所示。
sbit wcs1=P2^0;sbit wcs2=P2^1;sbit di =P2^2;sbit rw =P2^3;sbit e =P2^4;di =0;rw =0;e =1;
P1=0x3f ;//开显示,P1=0x3e 为关闭显示。
(2)设置起始行(SET STAR T L IN E )(见表3)
表3 起始行控制字
代码R/W D/I DB7DB6DB5DB4DB3DB2DB1DB0
内容0011A5A4A3A2A1A0
A5~A0这6位地址自动送入Z 地址计数器,起始行的地址可以是0~63的任意一行。
(3)设置页地址(SET PA GE X ADDRESS )(见表4)
・
11・龚 彬,等:WG M 212864C 液晶显示模块在嵌入式系统中的应用
图2 W GM212864C与Samsuang
S3C4510硬件接口电路
所谓页地址就是DDRAM的行地址,8行为一列,模块共8页,A2~A0表示0~7页。
表4 页地址控制字
代码R/W D/I DB7DB6DB5DB4DB3DB2DB1DB0内容0010111A2A1A0
(4)设置Y地址(SET Y ADDRESS)(见表5)
表5 Y地址控制字
代码R/W D/I DB7DB6DB5DB4DB3DB2DB1DB0内容0001A5A4A3A2A1A0
A5~A0这6位地址自动送入Y地址计数器,作为DDRAM的Y地址指针,再对DDRAM进行操作。
(5)读状态(STA TUS READ)(见表6)
表6 状态控制字
代码R/W D/I DB7DB6DB5DB4DB3DB2DB1DB0
内容10BUSY0ON/
OFF
RST0000
当R/W=1,DI=0时,在E信号为高电平的作用下,状态分别输出到数据总线(DB0~DB7)的相应位。
RST=1时表示内部正在进行初始化,此时该器件不接受任何指令和数据。
并且BUSY为高电平时也不接受任何指令和数据。
4 WG M212864C在嵌入式系统中的实现
4.1 硬件电路设计
嵌入式系统采用Samsuang的S3C4510芯片,这是一款性价比很高的ARM core SOC,ARM7TDM I内核,内置10/100M Ethernet控制器,特别适合于网络应用。
另外包括2路HDLC,1个硬件I2C接口,8K CACHE/SRAM,2个通讯串口,2个DMA通道,2个32位计数器,中断控制器,DRAM/SDRAM控制器,18个可编程I/O等。
同时,采用A T89C52系列单片机对W GM212864C液晶显示模块进行控制,利用P2.0~P2.4作为液晶显示的控制信号。
W GM212864C的数据线DB0~DB7和单片机的P1口相连。
通过MAX232实现RS2232C和TTL电平的转换。
使用S3C4510的串口2和单片机进行通讯。
液晶显示的内容通过串口通讯发送到单片机,然后通过单片机以及对W GM212864C液晶显示模块的编程控制,实现用户与嵌入式系统交互信息的显示。
硬件接口电路如图2所示。
4.2 软件实现
软件的主要功能是为用户提供一个良好的操作环境,及时响应用户的命令。
在嵌入式系统中,采用C 语言在Linux环境下编程。
uClinux嵌入式操作系统需要访问的设备类型有字符设备和块设备,uClinux对所有挂在系统上的设备都使用一个设备驱动程序,这个设备驱动程序同时成为内核的一部分。
设备驱动程序是内核和机器硬件的接口。
通过使用设备驱动程序文件,设备对系统而言成了一个可寻址和重定向的普通文件,挂在uClinux系统上的每个设备都被描述为设备驱动程序文件,一些与设备有关的设备参数文件被保存在/dev目录下。
用户如想添加一个新的外围设备,就要编写该设备的驱动程序。
由于编写设备驱动程序比较复杂,同时uClinux不支持内核模块的动态加载,不能使用命令insmod插入一个模块到内核中和使用命令rmmod来卸载一个模块,只能静态加载模块,因此可以通过uClinux内核自带的串口驱动程序来访问串口,就可以不用编写相应的驱动程序。
同时,通过Linux环境下对串行口编程来实现uClinux嵌入式操作系统同用户之间的信息显示。
单片机通过使用中断来接收数据,通讯参数设置为波特率9600bps,8个数据位,无奇偶校验。
显示的汉字采用16×16点阵,字母采用8×16点阵,同时,采用直接固化显示字模到EEPROM中。
这种方法占用空间小,程序实现简单,显示速度快。
16×16点阵汉字显示的流程图如图3所示。
一个16×16点阵汉字字模数据格式是前16个字节为上半部16×8点阵字模数据,后16个字节为下半部16×8点阵字模数据。
因此在设置页地址时,如果显示汉字的后16个字节,需要使页地址在当前页地址的基础上加1。
如果需要显示的汉字列数大于63,则可以通过片选信号CS2来选择IC2控制芯片。
对它的读写操作与IC1控制芯片一样。
在设置页地址和列地址时都需要判断状态字的情况。
4.3 将应用程序移植到uClinux下时需要注意的问题
(1)uClinux系统存在内存管理的问题,没有fork ()函数,而用vfork()代替,即uClinux系统中没有真正的fork,多进程实际是使用vfork实现的,每次fork完一个进程必须执行exec,父进程等待子进程exec后才继续运行。
(2)Clinux所用的Libc库不是一个全功能的库,而是一个适合嵌入式应用的功能有限的库,对于一些不太常用的函数可能库里没有,需要用户自己编写。
(下转第18页)
・
2
1
・
图6 256×28bit CAM 的完整结构
CAM 的性能保持稳定。
通过观察布局布线后的时序报告可以看出,CAM 的深度从16扩展到1024,最高时钟工作频率从171MHz 下降到168MHz ,性能下降不明显。
通过修改约束、floorplan 工具来控制资源分布、增加流水等手段,性能还可以有所提升。
虽然该CAM 能工作在100MHz 以上的较高频率,但进行一次查询最多需要16个地址的轮寻查找,再加上RAM 输入地址到输出数据1个时钟周期的延时,以及去毛刺寄存器产生Hit-reg 信号的1
个时钟周期的延时,最坏的情况需要18个时钟周期来完成一次查找。
对于某些应用,这样长的查询周期可能难以接受,但是如果采用合适的方法提高CAM 的利用率,就可以满足大多数的需求。
比如在A TM 应用中,可以采用双队列分离A TM header 和Payload 的方法对A TM header 进行预处理来提高CAM 的利用
率。
A TM Cell 由5个字节的header 和48字节的pay 2load 组成。
需要查CAM 表的信息只存在header 部分。
通常的方法是从A TM cell 队列中先取出header 进行分析,查CAM 表,分析完后再将数据部分向目的端口搬移。
当对A TM Cell 的payload 部分进行搬移时,CAM 一直处于空闲状态。
我们假设存放payload 的队列数据宽度为16bit ,那么从payload 队列取48字节使用的时间是24个时钟周期,也就是说,CAM 工作一次后有24个时钟周期都是处于空闲状态。
如果能在搬移A TM payload 的同时进行CAM 的查询工作,无疑将大大提高CAM 表的使用效率。
双队列分离A TM header 和Payload 的方法就是在实现搬移数据的同时进行CAM 表查询工作的一种方法。
所谓双队列分离A TM header 和Payload 的方法就是在FP G A 收到A TM cell 时,将header 和Pay 2load 分别进
入两个并列的队列。
这样,就可以在搬移一个A TM Cell payload 部分的时候,同时完成对header 队列中下一个A TM Cell header 的预处理。
假设使用这种方式构造的CAM 工作频率为100MHz ,A TM Cell 也以100MHz 、16位并行总线模式进入FP G A ,则FP G A 对A TM 处理流量能够达到1.6Gbit/s 。
5 结束语
这种利用FP G A 内部分布式小块RAM 来构造的CAM 表,具有1个时钟周期完成数据写入,18个时钟周期完成一次查询的特性。
通过这种方法,可实现在单片FP G A 中构造较大规模的CAM 表。
该CAM 表扩展性强、工作时钟频率高,深度扩展时性能保持稳定。
在A TM 应用中,配合使用双队列分离A TM header 和Payload 的方法对A TM header 进行预处理,可以有效实现对大流量A TM cell 的处理。
该CAM 表已经成功应用
于使用FP G A 实现IPOA (IP Over A TM )的系统中,并获得了预期的效果。
该设计参考了Xilinx 公司的有关设计资料。
■(上接第12页)
图3 汉字显示流程图
(3)除以上限制需要注意外,在uClinux 编程和移植应用程序与在标准Linux 环境下的编程方法是一样的。
5 结束语
本文应用单片机组成点阵液晶显示模块的控制操作的设计方法实现了在嵌入式系统中实时显示用户与嵌入式系统的交互信息。
这种方法避免了uClinux 下复杂驱动程序的编写,减轻了软件编程的负担,同时,液晶显示的低功耗特点使其在嵌入式系统中得到了广泛应用。
参 考 文 献
1 周思轶.嵌入式Linux 的设计与应用.北京:清华大学出版
社,20022 李 华.MCS 251系列单片机实用接口技术.北京:北京航空航天大学出版社,19933 余华芳,刘 健.单片机与液晶显示模块的软硬件接口技术.液晶显示,2003,(3):125~128 ■
・
81・。