📄 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.
//========================================================
//========================================================
// 工程名称: ex2_S480_Manual
// 功能描述: 《实验指导书》语音部分第四个实验
// 通过S480手动方式播放语音资源
// 涉及的库: CMacro1016.lib
// SacmV26e.lib
// 组成文件: main.c
// hardware.asm,isr.asm
// hardware.inc,s480.inc
// s480.h
// 硬件连接: DAC短接,选择音频输出
// 维护记录: 2005-09-12 v1.0
//
//========================================================
//========================================================
// 文件名称: main.c
// 功能描述: 通过手动方式播放语音资源
// 维护记录: 2005-09-12 v1.0
//========================================================
#include "s480.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);
PlaySnd_Manual(2,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); //在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_S480_Initial(0); //播放的初始化,手动方式
SACM_S480_InitQueue(); //初始化播放队列
SACM_S480_InitDecoder(uiDAC_Channel); //初始化解码器
while(1)
{
while(SACM_S480_TestQueue()!= 1) //播放队列是否为空
{
if(ulAddr >= ulEndAddr) //地址超出,则退出队列填充操作
{
break;
}
uiRet = SP_GetResource(ulAddr); //从存储器当中获取语音资源,在hardware.asm当中定义
SACM_S480_FillQueue(uiRet); //填充队列
ulAddr++;
}
if((SACM_S480_Status()&0x0001)!=0) //当前还处到播放状态,则进行解码
{
SACM_S480_Decoder();
}
else
{
SACM_S480_Stop(); //否则,停止播放
break; //退出播放循环
}
*P_Watchdog_Clear = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -