本软件系统设计简单。主要是因为凌阳的十六位单片机开发环境使用方便,并支持C语言与汇编语言的互相调用,且提供丰富的凌阳语音函数库,只要我们了解这些函数的使用方法,我们就可以很容易的实现语音的播放。本系统采用S480压缩格式,该压缩算法压缩比较大80:3, 存储容量大,音质介于A2000和S240之间,适用于语音播放。例如播放部分代码如下:
其相关API函数如下所示:
int SACM_S480_Initial(int Init_Index) //初始化
void SACM_ S480_ServiceLoop(void) //获取语音资料,填入译码队列
void SACM_ S480_Play(int Speech_Index, int Channel, int Ramp_Set) //播放
void SACM_ S480_Stop(void) //停止播放
void SACM_S480_Pause (void) //暂停播放
void SACM_S480_Resume(void) //暂停后恢复
void SACM_S480_Volume(Volume_Index) //音量的控制
unsigned int SACM_S480_Status(void) //获取模块的状态
Call F_FIQ_Service_ SACM_S480 //中断服务函数
各函数具体内容如下:
1)【API格式】
C:int SACM_S480_Initial(int Init_Index)
ASM:R1=[ Init_Index]
Call F_ SACM_ S480_Initial
【功能说明】SACM_S480语音播放之前的初始化。
【参 数】Init_Index=0 表示手动方式;Init_Index=1 则表示自动方式。
【返 回 值】
0:代表语音模块初始化失败
1:代表初始化成功。
【备 注】该函数用于对定时器、中断和DAC等的初始化。
2) 【API格式】
C:void SACM_S480_ServiceLoop(void)
ASM:Call F_ SACM_S480_ServiceLoop
【功能说明】从资源中获取SACM_S480语音资料,并将其填入解码队列中。
【参 数】无。
【返 回 值】无。
【备 注】播放语音文件中数据,当出现FF FF FFH数据时便停止播放。
3) 【API格式】
C:int SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set);
ASM:R1=[ Speech _Index]
R2=[ Channel]
R3=[ Ramp_Set]
Call SACM_S480_Play
【功能说明】播放资源中SACM_S480语音。
【参 数】Speech _Index 表示语音索引号。
Channel: 1.通过DAC1通道播放; 2.通过DAC2通道播放; 3.通过DAC1和 DAC2双通道播放。
Ramp_Set:0.禁止音量增/减调节; 1.仅允许音量增调节; 2.仅允许音量减调 节; 3.允许音量增/减调节。
【返 回 值】无。
【备 注】
① SACM_S480的数据率有4.8Kbps\7.2Kbps三种,可在同一模块的几种算法中自动选择一种。
②Speech_Index是定义在resource.inc文件中资源表(T_SACM_S480_SpeechTable)的偏移地址。
③ 中断服务子程序中F_FIQ_Service_ SACM_S480必须放在TMA_FIQ中断向量上(参见SPCE的中断系统)。
④函数允许TimerA以所选的的数据采样率(计数溢出)中断。
SACM_S480自动方式主程序流程见:
6 结语
凌阳公司的SPCE061A的结构特点及其相关的一些开发平台为我们控制和播放提供了极其方便的条件,当然SPCE061A还有很多的类似于其他方面的单片机所具有的功能,使用起来同样方便。随着市场竞争的激烈,开发者对产品开发的资金和时间的投入不断缩小,相信凌阳科技能实现开发者们的需求。