摘要:采用MAX II系列CPLD器件来实现LCD控制器。由于MAX II CPLD是唯一具有用户闪存(UFM)的CPLD,因此用一片CPLD 芯片就可完成LCD全部的时序控制、显示控制等功能,这样无需再加入其它的接口器件,使微处理器和LCD显示模块之间的接口电路变得更加简洁。 本文对LCD控制器的硬件及软件都给出了较详细的说明,并在EPM240ZM上实现了LCD控制器的功能。
关键词:CPLD,LCD 控制器,用户闪存
0前言
液晶显示屏(LCD)是薄型平面显示设备,由排列在光源或者反射器之前一定数量的彩色或者单色象素构成。这类显示屏已经成为大部分嵌入式系统不可缺少的组成部分。但是在嵌入式系统中八位和十六位微处理器大多没有内置的LCD控制器,又由于LCD屏的分辨率很高,即使有内置的LCD控制器,也较难进行控制;另外内置LCD控制器对内存带宽的占用较高,使控制器所能支配的资源也会变得非常有限。因此在微处理器和LCD屏之间加上一个LCD控制器是非常必要的。常用的LCD控制器主要有两种:专用的控制芯片和基于可编程器件的控制器。本文采用Altera公司的MAX II系列CPLD器件来实现LCD控制器。CPLD一般使用外加的串行EEPROM来存储非易失信息,而MAX II CPLD是唯一具有用户闪存(UFM)的CPLD,它支持用户存储高达8Kbits的非易失信息,因此不需要采用外部存储器,并且在实现LCD控制器时还可以利用CPLD的内部UFM振荡器来满足时钟需求,从而避免了采用外部时钟信号。这些独特的功能使MAX II CPLD成为实现LCD控制器最好的目标器件。
1 嵌入式系统的LCD接口电路结构
基于MAX II CPLD的LCD接口电路一般采用图1所示结构。图中LCD接口电路负责接受微处理器的配置,通过总线把DRAM上保存的显示数据读出,然后按照屏类型和显示设置转换为需要的格式,并按照屏时序要求发送出去。在设计显示控制器时,需要注意如下几个方面:支持的屏类型、总线类型的选择、同微处理器之间的交互方式、动态图像显示和中断设计。基于CPLD的LCD控制器可以提供合适的显示单元,它产生需要的时序信号,满足LCD的时序要求,同时卸载了微处理器和控制器繁重的LCD处理任务,从而提高了处理器和控制器执行其他操作的效率。
2 LCD 控制器组成与接口信号
2.1 LCD 控制器组成
由图1可知,LCD控制器有三个主要模块:有限状态机(FSM)、时钟分频器和用户闪存(UFM)模块。
1、初始化LCD和有限状态机模块
FSM模块有8个不同的状态。它用于初始化LCD,初始化完成后显LCD进行读写操作。图2所示为LCD模块的初始化步骤。为简化初始化过程,每次发送一条命令后,延时15ms(而不是检查忙标志的状态)。但是向LCD模块写入数据时,每一数据写操作之后,要检查忙标志的状态。这样就加速了写操作过程。
2、时钟分频器模块
时钟分频器模块主要是降低内部振荡器输出频率,从而满足了LCD模块的时序要求以及控制器的性能要求。该模块把振荡器输出信号osc的频率由.5MHz降低到43kHz左右。降低频率以后的信号(即Clk信号)从时钟分频器模块输出(见图3)。该模块主要代码为:
module divider (osc, clk);
input osc;
output clk;
reg clk;
reg [6:0]count;
initial
begin
count = 7'b0000000;
end
always @ (posedge(osc))
begin
count = count + 7'b0000001;
clk = count[6];
end
endmodule
3、用户闪存模块
MAX II CPLD中的用户闪存UFM模块主要用于存储LCD控制器打开之后,需要在LCD屏上显示的信息。采用十六进制(Intel格式)文件(.hex)对UFM进行设置,并利用UFM宏功能进行例化。
UFM模块接口信号主要有addr、nread、do、dv、osc和clk信号:
Addr为9位地址总线,用于选择UFM的某一存储位置。
nread 若该信号设置为0,以读取地址总线所指向存储器的内容。
do 为数据输出信号。8位数据总线,保持地址总线所指向16位存储器的高8位。
dv 为数据有效信号。该信号指示8位数据总线上的数据有效并且可读。
osc 为UFM模块内部振荡器输出。输出信号到时钟分频器,输出频率为5.5MHz。
2.2 LCD 控制器接口信号
1、LCD控制器与LCD屏之间的接口信号
LCD控制器与LCD模块之间的接口信号有E、RS、RW 、DB0-DB7:
E为使能选通信号。该信号下降沿将双向总线上的数据锁存到数据或者命令寄存器中,反之亦然。
RS为寄存器选择信号。用于选择LCD模块的数据和命令寄存器。当RS=0时为命令寄存器;
RS=1时为数据寄存器。
RW为区分读写操作的读写信号。RW=0:写操作;RW=1:读操作
DB0-DB7为8位双向总线,承载LCD模块的数据和命令。
2、LCD控制器与微处理器之间的接口信号
LCD控制器与微处理器之间的接口信号有DATA0-DATA7、RST、WE、ACK:
DATA0-DATA7 为处理器和控制器的8位总线,承载LCD模块上显示的ASCII字符值。
RST 为复位信号。该信号用于复位控制器,再次初始化LCD模块。
WE 为写使能信号。该信号指示写周期的开始。应将它设为低电平,使能对LCD模块的写操作。
ACK 为应答信号。该信号指示数据已经成功地发送到LCD模块,准备接收后面的数据。
在此信号变为低电平之前发送的任何数据都被控制器忽略。
3设计与仿真
本设计通过MAX II CPLD EPM240ZM成功地实现了处理器和LCD模块的接口,图5-图7分别给出了LCD控制器的整体模块、综合结果和仿真波形。
4结论
本设计采用MAX II系列CPLD器件EPM240ZM来实现LCD控制器,解决了微处理器与LCD显示模块之间的接口问题,并在OptrexSC1602D 16×2字符LCD模块上实现了嵌入式系统的显示功能。由于是使用一片MAX II CPLD芯片完成LCD全部的时序控制、显示控制等功能,所以是接口电路变得更加简洁、可靠,具有很好的应用价值。
本文作者创新点: 使用唯一具有用户闪存(UFM)的MAX II CPLD,不需要采用外部存储器就实现了LCD 全部的时序控制、显示控制等功能,使LCD 接口电路变得更加简洁、可靠。