📄 main.c
字号:
//========================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//========================================================
// 工程名称: ex1_A2000_Manual
// 功能描述: 《实验指导书》语音部分第一个实验
// 通过手动方式播放两段语音资源
// 涉及的库: CMacro1016.lib
// sacmv26e.lib
// 组成文件: main.c
// hardware.asm isr.asm
// hardware.inc a2000.inc
// a2000.h
// 硬件连接: DAC跳线短接,选择语音输出
// 维护记录: 2005-09-12 v1.0
// 2005-10-25 规范化
//========================================================
//========================================================
// 文件名称: main.c
// 功能描述: 通过手动方式播放两段语音资源
// 维护记录: 2005-09-12 v1.0
//========================================================
#include "a2000.h"
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
void PlaySnd_Manual(unsigned int SndIndex,unsigned int DAC_Channel);
//========================================================
// 语法格式: int main(void)
// 实现功能: 调用语音播放函数,通过手动方式播放两段语音资源
// 参数: 无
// 返回值: 无
//========================================================
int main(void)
{
while(1)
{
PlaySnd_Manual(0,3);
PlaySnd_Manual(1,3);
*P_Watchdog_Clear = 0x0001;
}
}
//========================================================
// 语法格式: void PlaySnd_Manual(unsigned int uiSndIndex,
// unsigned int uiDAC_Channel)
// 实现功能: 通过手动方式播放语音资源
// 参数: 1.uiSndIndex:语音资源序号
// 2.uiDAC_Channel:语音播放通道
// 返回值: 无
//========================================================
unsigned int SP_GetResource(unsigned long ulAddr); //define of hardware.asm
void PlaySnd_Manual(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
extern unsigned long RES_Table; //语音资源列表,在Resource.asm当中定义
unsigned long ulAddr,ulEndAddr;
unsigned int uiRet;
ulAddr = *(&RES_Table + (uiSndIndex<<1)); //获取要播放的语音的首地址
ulEndAddr = *(&RES_Table + (uiSndIndex<<1) + 1);//获取要播放的语音的结束地址
SACM_A2000_Initial(0); //播放的初始化,手动方式
SACM_A2000_InitQueue(); //初始化播放队列
SACM_A2000_InitDecoder(uiDAC_Channel); //初始化解码器
while(1)
{
while(SACM_A2000_TestQueue()!= 1) //播放队列是否为空
{
if(ulAddr >= ulEndAddr)
{ //地址超出,则退出队列填充操作
break;
}
uiRet = SP_GetResource(ulAddr); //从存储器当中获取语音资源
SACM_A2000_FillQueue(uiRet); //填充队列
ulAddr++;
}
if((SACM_A2000_Status()&0x0001)!=0)
{ //当前还处到播放状态,则进行解码
SACM_A2000_Decoder();
}
else
{
SACM_A2000_Stop(); //否则,停止播放
break; //退出播放循环
}
*P_Watchdog_Clear = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -