1. F2812与液晶显示模块接口设计
在上图中,RAM和FLASH ROM是F2812的外扩存储器,CPLD是用来作为地址译码产生片选信号的,它们都映射到F2812的XINTF区域。F2812的XINTF包括5个存储区域:
Zone0 存储区域: 0x002000—0x003FFF,8K x 16位
Zone1 存储区域: 0x004000—0x005FFF,8K x 16位
Zone2 存储区域: 0x080000—0x0FFFFF,512K x 16位
Zone6 存储区域: 0x100000—0x17FFFF,512K x 16位
Zone7 存储区域: 0x3FC000—0x3FFFFF,16K x 16位
其中,Zone0和Zone1共用1个片选线XZCS0AND1,Zone6和Zone7共用1个片选线XZCS6AND7,Zone2单独使用1个片选线XZCS2.如上图所示。CPLD映射到Zone0(地址0x2000—0x3FFF),即当访问Zone0区域时,XZCS0AND1有效(CS1有效),此时选中CPLD;同样,RAM和FLASH分别映射到Zone6和Zone2,当访问Zone6(0x100000—0x17FFFF)或Zone2(0x080000—0x0FFFFF),则XZCS6AND7(CS6)或XZCS2(CS2)有效,表明选中了RAM或FLASH。
可以注意到CPLD使用了F2812的4位地址线A12…A9作为译码信号,通过CPLD译码来实现LCDCS信号有效。在本系统中通过CPLD编程实现当A12…A9为1100时经CPLD译码后LCDCS有效,但应注意前提是CPLD必须被选中。因为CPLD映射到Zone0,只有访问0x2000—0x3FFF这个区域时,才能选中CPLD。这就要求A15…A13必须为001,其余A8…A1不参与译码,可取任意值,在此全部取为0。如此一来,只有A15…A0为0x3800和0x3801时LCDCS有效,此时F2812可以访问LCD.
在液晶模块接口中,A0脚为数据/指令寄存器的选择信号.A0=1,访问指令寄存器,A0=0,访问数据寄存器。在硬件图中我们可以看到液晶模块接口的A0脚直接接F2812的XA0脚,再综合上面所述,就可以确定0x3800为液晶模块数据寄存器地址,0x3801为液晶模块指令寄存器地址
2. 液晶模块内嵌控制器及其指令介绍
SED-1335是整个320x240液晶模块的核心部分,接下来将简要介绍一下其指令集。为便于浏览,特将SED-1335的所有指令列表如下。
带有参数的指令代码的作用之一就是选通相应参数的寄存器,任一条指令的执行(除SLEEP IN, CSRDIR, CSRR和MREAD外)都产生在附属参数的输入完成之后。MPU可用写入新的指令代码来结束上一条指令参数的写入,此时已写入的新参数与余下的旧参数有效地组合成新的参数组,需要注意的是虽然参数可以不必全部写入,但所写的参数顺序不能改变,也不能省略。
在下面将列出部分初始化程序来说明指令的使用,但对于CSRDIR和CSRW指令,有必要详细解释一下。CSRDIR指令是用来设置光标移动方向的,有上,下,左,右四个移动方向(4EH,4FH,4DH,4CH),CSRW指令则是用来设置光标地址的。要特别注意这里的光标是对应显存里面的一个字节(byte),而不是对应字节里的一个位(bit),当设置光标向右移动时,每写完一个字节数据到显存,光标地址就会加一,此时对应显存的字节地址加一;同理,设置光标向左移动时,对应显存的字节地址减一。而当设置光标向下移动时,目标光标地址(字节地址)=当前光标地址(字节地址)+AP(液晶屏一行所对应显存的字节数),注:一般AP设置为完整显示液晶屏一行所用字节数加1,即40+1=41. 如下图所示,如果当前光标在字节地址Add1处,则写完一个字节数据后光标则移到了字节地址Add42处;同理,设置光标向上移动时,如果当前光标在Add81处,则写完一个字节数据后光标则移到了Add40处