1 GSM-R手持终端功能概述
铁道部已确定以GSM-R系统作为中国铁路无线通信平台,因此,以GSM-R为平台建立综合无线通信系统,为GSM-R网络的各种作业提供无线通信手段和设备已迫在眉睫。
WT588D接收端反应速度较快,整个语音信息从触发到播放并发送BUSY反馈信号的时间不到5ms,能在速度上很好的迎合整套系统所追求的速率。在配套软件方面,从语音编辑到下载语音工程,操作都趋向简易模式,不仅能很好的被资深设计者使用,而且也适合入门者做实验测试。
GSM-R手持终端在编组站中有着特殊的应用。编组站的作业以小组为单位,完成调车、编组工作。小组的每位成员均配备GSM-R专业手持终端,并根据职务要求的不同,具有各自的功能。本文主要介绍语音回示功能的实现方式。调车长发出的调度指令种类是有限的,因此,GSM-R手持终端可以先预存相应指令的语音信息,然后根据收到的调度指令,播放出相应的语音。这个功能是编组站手持终端必备的功能,本文采用ATMEGA48和WT588D语音芯片完成此功能,并采用一种全新的方法高效完成ATMEGA48与WT588D语音芯片之间的通信与控制,完全发挥了ATMEGA48高速的特点。
2 器件简述
本文采用WT588D语音芯片与ATMEGA48之间的SPI控制接口,完成所需要的语音回示功能。
ATMEGA48是AVR单片机的一个型号,AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算术逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。它还废除了机器周期,采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中,取指周期短,又可预取指令,实现流水作业,可高速执行指令。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比的单片机。
WT588D语音芯片采用语音数据直接在SPI-Flash存储器中存储的技术,下载速度快,并经过D/A转换后输出。因此能够非常真实、自然地再现语音、音乐、音调和效果声。功能多、音质好、应用范围广性能稳定是WT588D系列语音芯片的特长,弥补了以往各类语音芯片应用领域狭小的缺陷。能够完全取代ISD1700、ISD1425、ISD4000、PM50等语音芯片。
WT588D系列语音芯片具有如下特点:变更语音内容简单,放音方便;高音质,声音自然;支持2M~64M的SPI-Flash内存,在6K采样下能达到2149S的放音;手动操作/微控制器控制兼容;放音时可用边沿触发或电平触发;可以循环放音;具有自动节电控制,节电时静态电流小于10uA;信息存储无需后背电源;最多可加载220段语音;PWM输出可直接推动0.5W/8Ω扬声器;可重复擦除烧写10万次;放音可用单片机编程控制;单电源工作;模块封装(带FLASH存储器)为16脚、28脚嵌入式形式,芯片封装为DIP18、SSOP20和LQFP32形式。
WT588D VoiceChip 软件是根据WT588D 语音芯片特性开发出来的相对应配套软件。它很好的完成对WT588D 语音芯片各种控制模式程序的写入,当单片机口线不够可选用一线串口控制或SPI串口控制,更有能够作为扩展单片机I/O口线的功能,非常适合在单片机场合下使用。软件还能完成语音的替换、组合,音频输出模式的设置等,而且操作界面简单,编辑过程方便。
3 硬件电路设计
WT588D的所有操作都由微控制器控制,操作命令可通过串行通信接口SPI送入。SPI 协议假定微控制器的SPI移位寄存器在SCLK的下降沿动作,因此对WT588D而言,在时钟上升沿锁存MOSI引脚的数据。使用ATMEGA48的SPI接口直接控制WT588D,因此硬件设计相对比较简单。如图1所示。
ATMEGA48作为SPI主设备,WT588D作为SPI从设备。ATMEGA48通过/SS片选WT588D,MOSI控制线向WT588D发送控制信息,播放相应的语音信息。当WT588D读到语音尾端时,会产生一个中断,ATMEGA48接收此中断,播放下一段语音。
具体引脚连接如下:
1、ATMEGA48的SS与WT588D的CS相连,当ATMEGA48对WT588D进行操作时,选通此芯片。
2、ATMEGA48的MOSI与WT588D的DATA相连,进行数据的传输。
3、ATMEGA48的SCLK与WT588D的CLK相连,提供串行数据的时钟。
4、ATMEGA48的中断线与WT588D的BUSY相连,可以作为语音播放完毕的中断信号。
5、WT588D可以设置为DAC(外接功放)输出或者PWM(直接驱动喇叭)输出,播放选中的语音信息。
4 软件实现
本文使用ATMEGA48的SPI接口直接控制WT588D,对其相应的地址进行读操作,完成选定语音的播放。SPI收发程序往往是一段采用轮循方式完成收发的简单代码,也就是单片机通过MOSI寄存器发送数据。同时根据查询MOSI状态寄存器的状态来判断是否能发送下一个数据。在此过程中,单片机处于死等的状态,不能进行任何其它任务的执行。对于高速的AVR来讲,采用这种方式大大降低了MCU的效率,无法发挥其高速、高效的特点。同时,由于ATMEGA48在完成语音回示的同时,还需要完成语音通话、故障记录等功能,因此需要MCU能更高效地完成SPI收发功能。
在使用ATMEGA48时,根据芯片本身的特点(片内大容量RAM,适合采用高级语言编写系统程序),使用了一种新的方法,采用接收和发送缓冲器加中断的方法,编写高效可靠的SPI收发程序。
基本思路如下:
1、发送数据时,如果MOSI数据寄存器为空,则直接将需要发送的数据填入MOSI数据寄存器,由单片机自动完成数据的发送。
2、发送数据时,如果MOSI数据寄存器不为空,也就是说有待发的数据,此时将需要发送的数据填入发送数据缓冲区(构建在ATMEGA48的RAM中)。单片机将数据置入发送缓冲区中,就算已经完成了数据的发送,可以执行别的指令,这样,充分发挥了其并行高速运行的特点。本文在中断处理程序中完成对发送缓冲区数据的处理。每次MOSI数据寄存器数据发送完成,都会产生一个中断,因此当产生中断时,表明前一个数据已经发送完成,将待发的发送缓冲区数据置入MOSI数据寄存器,进行数据的自动发送。
以下为SPI数据发送程序和SPI中断处理程序,流程分别如图2、图3所示。
图2 数据发送程序
图3 中断处理程序
采用缓冲加中断的SPI发送方法,能够高效地完成数据的收发,提高MCU的效率,具有以下优点:
l、采用两个8字节的接收和发送缓冲器来提高MCU的效率,如当程序发送数据时,如果SPI口不空闲,就将数据放入发送缓冲器中,MCU不必等待,可以继续执行其它工作。而SPI的硬件发送完一个数据后,产生中断,由中断服务程序负责将发送缓冲器中的数据依次送出。
2、数据缓冲器结构是一个线性的循环队列,由读、写和队列计数器3个指针控制,用于判断队列是否空、溢出,以及当前数据在队列中的位置。
3、由于在数据发送程序和中断服务程序中都要对数据缓冲器的读、写和队列计数器3个指针进行判断和操作,为了防止冲突,在数据发送程序中对3个指针操作时临时将中断关闭,提高了程序的可靠性。
5 结语
整个控制系统采用缓冲加中断的SPI发送方法,使用两个数据缓冲器,分别构成循环队列。这种程序设计思路,不但程序的结构性完整,同时也解决了高速MCU和低速串口之间的矛盾,实现 程序中任务的并行运行,提高了MCU的运行效率,同时这种程序设计的思路对编写UART、I2C的串行通信接口程序都是非常好的借鉴。