通常在 LED 大屏幕的显示过程中,读取数据频繁,且随着显示面积的增加与色彩变化的丰富,对数据输出速度的要求越来越高。普通方式读取一个字节的 RAM 数据,至少需要两个机器周期,即 24 T (时钟周期)。而使用 SPI 方式,数据的输出速度由 SPSCK(最高可设置为 f OSC 的 1/ 4) 决定,而普通方式读 RAM 的速度只有 1/ 24 f OSC ,即在 SPI 模式下,此 LED 大屏幕电路的数据输出速度最大可提高 6 倍。通过此方法对输出电路进行改造,可极大地使原有控制系统满足数据高速输出的要求。本文给出的例子虽是基于 LED 大屏幕应用的,但在 LCD 或是其他对数据有高速输出要求的系统中,同样具有借鉴运用意义。
1引 言
在 LED 大屏幕等显示系统对数据输出速度的要求日益提高的背景下,当前对控制设备进行改造的过程中,首选的办法是更换更高速率的微处理器,而对硬件电路的挖潜往往容易被忽视。
在实践运用中,建议应先考虑在原有的系统上进行硬件电路改造,如仍不能满足显示要求,可再考虑更换高速率微处理器及用 FPGA/ CPLD 器件进行输出电路替代处理的方案。本文以 LED 大屏幕控制电路为例,提出了一种在硬件电路改造上提高显示数据输出速度的实现办法。
2 数据输出电路的优化基理
由 LED 大屏幕的显示原理可知,一个数据显示在 LED 大屏幕的过程分为:从存储器中读出数据与送入到 LED 板中显示两个步骤。这一过程需要产生如下控制信号:数据地址送入存储器,存储器读信号,锁存器开通及 LED 单元板中的行信号、HC595 的 SCK 移位、RCK 锁存、E 使能信号等。这些必需信号的产生增加了数据显示过程的时间。如果能够复用其中的信号,势必减少这一过程的延时。在 LED 显示系统中,常把显示数据按行存储到外部 ROM/ RAM 中的办法即是一例。该办法设定存储器的高位并接到 L ED 的行控制线上,数据按行储存,送入数据地址后,按行读出数据,并同时开通了行控制信号。下面的信号复用方案也是类似的原理。
图 1 信号复用示例
在考查读外存的 MOVX 命令时发现:执行该命令时可产生读信号(RD # ),即读外存时不但不需要另外去产生读信号(RD # ),而且还可以将此信号供给锁存器 74HC273 及 LED 板上的移位信号 SCK 使用。这里要注意的是:在数据读出后,SCK 信号才送出,所以 RD # 信号不可直接做 SCK 信号使用,必须做延时处理(最小延时必须要略大于 RAM 的读写时间 tRC 与 74HC273 的数据锁存延时 tTL H 之和)。
而当连续读出一块存储器数据时,需要通过程序产生新的地址赋值给数据口, 而这些地址都是顺序变化的。基于这一特点,设计采用计数器电路用来保存读数据时的初始地址,利用外部供给的脉冲,只要对计数器的保存地址进行顺序增加,即可将数据连续读出。
单片机 ALE 脚或是利用串行口工作方式也会产生一定频率的脉冲,但没有 SPI 方式下产生的脉冲频率高,且这两种方式的使用均有一定的限制,而启动 SPI 方式比较方便。串行外围接口(Serial Perip heral Interface , SPI) 总线系统是一种同步串行外设接口,是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 系统有 4 个 I/ O 脚,它们是串行时钟 SPSCK、主机输入 / 从机输出数据线 MISO、主机输出 / 从机输入数据线 MOSI 和低位有效的从机选择数据线 SS.SP2SCK 用于同步数据从 MOSI 输入和 MISO 的输出传送。通过对 SPI 控制寄存器 SPCR 的设置,SPSCK 的频率最高可以达到振荡器频率( fOSC )的 1/ 4。
因为 SPI 模式可方便产生出较高频率脉冲的优点,即采用 SPSCK 作为计数器的脉冲,利用计数器对存储器产生连续变化的地址,实现对数据的高速读出。并且 SPSCK 信号经过变换与延时处理,可同时供给 LED 做 SCK 移位信号使用。
图 2 SPI 在读取存储器的运用
3 SPI 运用的实现过程
从上文可以得到这样的启示:在 LED 控制电路的设计中,可借助于 SPI 模式读取数据,即增加一块 SPI 模式的 FLASH 存储器,一方面可以保存重要文档,另一方面可以利用 SPSCK 产生的信号,通过计数器电路实现对存储器高速读数据,并且复用此信号产生屏幕显示的控制信号。在给定了输出数据的首地址并启动 SPI 后,此方式使数据的读出到屏幕显示这一过程自动进行,同一信号源的全硬件方式大大减少了以往分别产生各控制信号方式时的衔接延时。图 3 为 SPI 在 LED 大屏幕控制电路中的运用示例。
图 3 SPI 模式下的 LED 大屏幕控制电路图
级联计数器的个数根据 RAM 的容量大小,即地址线的数目来确定。微处理器通过驱动器连接 SPI 串行存储器, 驱动器可以选择 7407 或 7417 的型号。RM_MODE 用来区别不同的读写操作方式。当 RM_MODE = 1 时,是普通读写外部存储器的方式,当 RM_MODE = 0 时,就可以让主机作为主器件,串行 FLASH 存储器作为从器件,两者以 SPI 方式进行通信,利用此时产生的 SPSCK 信号对存储器进行高速读数据操作。同时 SPSCK 信号经过变换与延时处理,可以供给 LED 做 SCK 移位信号用。在计数脉冲的输入端,可以使用跳线做加、减方式的选择处理。当脉冲接于计数器 UP 端时, 为加计数方式, 接于 DOWN 时,为减计数方式。图 3 也可扩展并接多组计数器,多组 RAM.
减计数器方式的运用大大增强了数据输出的灵活性。在 LED 大屏幕显示中,加、减计数器配合使用,可以使相同一块控制卡输出数据的显示长度提高一倍。当使用减计数器方式时,为了与使用加方式时 LED 大屏幕上显示的图文一致,必须对与减计数器连接的 RAM 的数据进行上、下半屏交换处理,并且在输出时要在程序中改变数据的起始点,给出的行控制信号(RCK) 也应做倒序处理(见图 4)。
图 4 加、减法模式下的数据组织与显示
4 本方式使用时的注意事项
本方式使用时要注意计数器及 RAM 芯片的读写速度必须与 SPSCK 相匹配。SPI 方式的速率比较高,电路各器件读取速度越高,数据出错的几率就会越小。
此外还有其他一些原因也会引起读数据时的错误。如软件编写不当导致数据地址超出 RAM 空间,电路设计未重视计数器高速工作时发热对周边器件与布线带来的影响等。
使用 SPSCK 信号读取外部储存器时,同样会产生 SPI 主、从模式下的溢出错误,即连续传输多个数据时, 后一个数据覆盖了前一个数据而产生的错误。这种错误产生的原因是从器件的传输标志 SPIF 从相对于主器件的传输标志 SPIF 主有一定的滞后,在主器件连续发送数据时,会导致从器件的传输标志和主器件下一个数据的传输标志相重叠,而利用 SPSCK 触发计数器使地址递加读取数据,第一个收到的数据也会被覆盖。
这种传输错误可以用软、硬件的方法进行改进。在本文的设计中,后期在软件编写上采用了如下解决方法:先启动 SPI 模式,再进入计数器读并行 RAM ,浪费一个时序。或是在 RAM 中存入数据时,全部存到它后一位的地址单元上,再用 SPI 方式产生的脉冲去读 RAM ,就可得到正确的数据。
理论上本文方式可使显示数据的输出速度高至 fOSC 的 1/ 4 ,但实际运用时却受到了 RAM、锁存器等输出电路器件的参数限制。SPSCK 的速率设定要根据所选择 RAM 的参数确定,即要满足 RAM 最小的地址有效时间与数据有效时间的要求。
图 5 主、从 SPIF 时序下的数据溢出错误