引 言
近年来随着低成本高性能32位微处理器的出现,越来越多的工程设计人员把目光投向32位嵌入式产品的开发中。目前ARM系列32位微处理器在低功耗移动通信设备方面占有绝对优势;Motorola的MC683xx系列和Cold Fire系列主要用于工控、智能化仪表和汽车电子等领域;SoC技术是系统开发越来越倾向于32位CPU为核心,32位微处理器日益显示出其巨大的优越性。显示器件是嵌入式系统进行人机交互的重要设备,液晶显示器具有体积小、微功耗、低辐射、性能可靠等优点,已经成为工程技术人员进行系统设计的首选。但目前常用的多种液晶显示控制器还仅是基于8 位总线并且管理显示存储器空间较小,在系统有大量高速实时数据的情况下就有些吃力,“显示瓶颈”有待解决。对此本文提出了一种基于16位总线的大规模点阵图形液晶显示控制器SED1353和32位微处理器相结合的液晶显示系统,有效地解决上述问题。
SED1353图形液晶显示控制器简介及其接口原理
SED1353图形液晶显示控制器作为计算机系统控制液晶显示模块的专用芯片,具有8 位/16位计算机总线接口;内置调色板,最大支持256种色彩或16级灰度的液晶显示屏;具有管理128KB显示存储器空间的能力,可支持最大分辨率为1024×1024点阵液晶显示模块,提供了比较宽的应用领域。
SED1353是一种可以由微处理器管理显示存储器的液晶显示控制芯片,即微处理器可以采用访问外部存储器的方法直接对显示存储器和它的16个内部寄存器进行设置读取。相比由控制器管理显示存储器方式的液晶显示控制器(典型芯片如SED1335),SED1353的优点是显而易见的,它不需要反复写指令再写数据完成对显示存储器和内部寄存器的管理,控制效率大为提高。由于要分配一定地址空间给显示存储器,SED1353控制器的缺点是占系统资源比较多。微处理器在访问SED1353的内部寄存器时,地址总线分为三部分:A15~A10组合作为寄存器片选信号I/OCS;A9~A4作为基地址且需要与上电时的VD12~VD7 比较,相等才进行内部译码选通寄存器;A3~A0作为16个寄存器AUX[0~F]的地址。微处理器访问显示存储器时,地址总线分为两部分:A19~A17高位地址对应显示存储器的128KB地址空间,与VD15~VD13设置相等才内部译码选通显示存储器;A16等地址线组合作为显示存储器片选信号MEMCS# ,以对显示存储器单元进行操作。
硬件系统设计
MC68332与SED1353的接口电路设计
MC68332通过地址总线、数据总线,CS8片选信号、数据传输宽度信号SIZ0、A0及读写控制R/W,外围器件接口应答信号DSACK1,同SED1353进行异步数据传送。SED1353的I/O地址空间分配为$200000~$23FFFF。其中SED1353的16个8位寄存器地址为$200000~$20000F ;显示存储器占用128KB地址空间,即$220000~$23FFFF。CS8允许的地址空间块大小设置为256KB,起始地址$200000。DSACD1指明外部外围器件宽度为16位;可访问管理/用户级空间;允许进行读写访问。故CS 8基址寄存器和选择寄存器编程为:CSBAR8=$2005;CSOR8=$7BF0。MC68332与SED1353的接口电路如图1 所示。图1 还给出了SED1353与液晶屏LM64P83L的接口电路。SED1353通过显示存储器的数据总线VD15~VD0的复位上电设置自己的I/O地址。设数值1表示该端接一个10kΩ电阻上拉至高电平,0表示不接上拉电阻,x表示任意。故设置VD15~VD13=001;VD12~VD4=000000xxx;其中VD3~VD0=1,表示16位数据总线、直接访问方式、M68000时序及总线高低字节交换。
图1 MC68332与SED1353接口电路
地址译码GAL的设计
当MC68332的字或长字数据传送到SED1353的I/O偶数地址(受对准限制)时,需要使BHE# 、AB0/UDS#同时低电平有效。单字节传输虽然不受对准限制,但单字节数据传送到SED1353的I/O奇数地址时(如访问SED1353内部8 位寄存器) ,需要使SED1353的BHE#低电平有效,AB0/UDS#高电平无效;此外,MC68332设置定义的CS8定义的地址空间包括了内部寄存器和显示存储器的地址空间,此时还不能将各自的片选信号分开。因此可通过可编程逻辑器件来解决这一问题,GAL将依据下列等式编程:
IOCS#=!(!CS 8 &!A17 &!A16 &!A15 &!A14 &!A13&!A12&!A11 &!A10)
MEMCS#=CS8
BHE#=SIZ0&!A0
软件设计
MC68332的硬件初始化程序设计
MC68332的复位向量和初始化程序驻留在ROM中,在系统复位后MC68332从异常情况向量表中取出向量后在管理方式下执行初始化程序来定义相关地址、常数及其他参数。首先进行硬件初始化,依次初始化全局寄存器、各模块和外部设备等。MC68332地址空间的分配如下:寻址空间的$000000~$0FFFFF分配为ROM存储区,$100000~$13FFFF为SRAM 存储区,$200000~$23FFFF为显示存储区,$240000~$FFDFFF分配给其他外设(如串行通信模块的MC68HC681等) 。通过设备BAR 寄存器,把片上RAM 定位在$FFE000~$FFE7FF。通过设置SIM 模块的MCR 寄存器,把$FFF000~$FFFFFF存储区作为模块寄存器区。硬件初始化完成后,MC68332通过设置用户堆栈指针地址USP、状态寄存器SR 以及程序计数器PC将控制权交给应用程序。应用程序一般工作在用户方式下。本文中液晶显示系统使用的液晶屏为SHARP公司的LM64P83L,STN单色双屏结构640×480点阵。限于篇幅,只列出SED1353硬件初始化程序清单。
SED1353初始化程序:
INCLUDE SED1353.ASM
INIT MOVE.B#$00,AUX00;设置为正常工作模式
MOVE.B#$44,AUX01;设置关显示,双屏结构,不屏蔽XSCL,8 位LCD数据,16 位显存结构
MOVE.B#$27,AUX02;设置显示域宽度LBCB8 :0=1×640/16-1=39(十进制)
MOVE.B#$04,AUX03;设置正常运行方式,单色无灰度显示,1 位/像素
MOVE.B#$EF,AUX04;设置扫描行数,TDLC7 :0=480/2-1=239(十进制)
MOVE.B#$00,AUX05;使用默认值,每帧WF翻转一次
MOVE.B#$00,AUX06;设置上半屏显示首址为$220000
MOVE.B#$00,AUX07
MOVE.B#$80,AUX08;设置下半屏显示首址为$224B00(使用连续地址)
MOVE.B#$25,AUX09
MOVE.B#$00,AUX0C;使用默认非显示周期
MOVE.B#$00,AUX0D;不使用虚拟屏
ORI.B#$90,AUX01;开显示和LCDE 使能不需要设置的寄存器会被自动旁路
汉字显示程序的设计
在对系统进行完正确的初始化后将ROM中的字模数据送到SED1353显示存储器,就可以使液晶显示屏显示出汉字。显示汉字需要指定其坐标位置,坐标对应该汉字模入口地址。在显示汉字界面前,首先清屏。由于本文中显示存储器结构为16位,所以X方向以字为单位(偶数地址对齐)。故规定显示区左上角坐标为(0,0) ,右下角坐标为(39,479)。每个汉字都有唯一的代码,所以在调用字模数据前需要对汉字的代码进行解码,对坐标进行解析。
字模入口地址=Y坐标×80+X 坐标×2;字模首地址=汉字代码×32+字库首地址。
以在坐标(30,148)处显示代码为24的16×16 汉字为例,程序如下:
(1) 清屏子程序
MOVE.L# $220000,A4 ;赋当前显示首址
BRA CLRLCD ;调用清屏子程序
CLRLCD CLR.LD3
CLR.LD4
MOVE.W#480,D3 ;需要清480 行
LOOP1 MOVE.W#40,D4 ;每行40 个字
LOOP2 MOVE.W#$0000,(A4)+ ;清零
SUB.W#1,D4 BNE LOOP2 SUB.W#1,D3
BNE LOOP1 RTS
(2) 汉字显示子程序
MOVE.L #0,A1 ;清A1,A2
MOVE.L #0,A2 CLR.L D1 ;清D1~D4
CLR.L D2
CLR.L D3
CLR.L D4
MOVE.B #30,D2 ;赋坐标值
MOVE.W #148,D3
BSR ALXY ;调坐标解析子程序
MOVE.L D3,A1 ;坐标的绝对地址送出
MOVE.W#24, D4 ;赋代码值
BSR DECODE ;调解码子程序
MOVE.L D4,A2 ;字模首址送出
LOOP MOVE.W (A2) +,(A1)
ADD.L #$50,A1 ;字模数据写入换行
SUB.B #1,D1
BNE LOOP
END
DECODE MULU #32,D4
ADD.W #TAB16,D4
MOVE.B #16,D1 ;循环16 次 RTS ....
ALXY MULU #$50,D3
MULU #$2,D2
ADD.W D2,D3
ADD.L #$220000,D3
RTS
TAB16 …
*****设“马”汉字代码为24 ******
DC.W $0020,$3FF0,$0020,$0820;马
DC.W $0820,$0820,$0820,$0824
DC.W $0FFE,$0004,$0024,$FFF4
DC.W $0004,$0004,$0028,$0010
...
结束语
32位嵌入式处理器的软件开发以C语言为主,通常情况下用汇编语言编写与硬件有关的程序,高级语言C编写主程序实现某些复杂算法,若再配上实时多任务任务操作系统更是如虎添翼。本文所述方法可移植性强,稍作修改可应用于摩托罗拉MC68K系列嵌入式系统;选用的SED1353具有直接管理128K大容量显示缓冲区的能力,编程简单、显示速度快和执行效率高;可支持多种单色/彩色液晶显示屏,可以实现数据显示、绘制图表以及翻转等功能,具有良好的显示界面,提高了系统的可操作性,值得在智能化仪器仪表中推广。 |