📄 main.c
字号:
//*******************************************************************************************/
// 名称: dvr
// 来源:《SPCE061A单片机原理及应用技术》,"第七章程序7_10"
// 描述: DVR有两种录放音方式,即自动方式和非自动方式,我们可以通
// 过改变Mode的值来切换这两种方式:当Mode=0时以非自动方式录放音,
// 当Mode=1时,以自动方式录放音,而且中断中分别用FIQ中断实现语音的
// 播放,用IRQ1中断实现语音的录制。这里我们给出非自动方式的例子:
// 日期: 2002/12/11
//*******************************************************************************************/
#define Manual 0
#define Auto 1
#define SRAM_Size 0xffff-2
#define Stop 0
#define Record 1
#define Play 2
#define RceMonitorOff 0
#define RceMonitorOn 1
#define DAC1 1
#define DAC2 2
#define Full 1
#define Empty 2
//===============================================================================================
// 函数: main()
// 描述:主函数
//============================================================================================
int main()
{
int Ret=0, Mode;
int Addr, Addr_Save;
Mode == Manual; //采用手动方式
SACM_DVR_Initial(Manual); //手动方式初始化
Addr = 0; //定义语音存放的首址变量
InitWriteSRAM();
SACM_DVR_InitEncoder(RceMonitorOn); //开始对A2000的语音数据以非自动方式编码
while(Addr<SRAM_Size) //判断存储语音的地址是否超出存储单元的大小
{
SACM_DVR_Encode (); //获取数据并编码
if(SACM_DVR_TestQueue()!= Empty)
{
Ret=SACM_DVR_FetchQueue(); // 从队列中获取数据
WriteSRAM(Addr,Ret); // 存入用户定义的存储单元区
Addr+=2; //两个8位SRAM存储一个16位数据
}
}
SACM_DVR_StopEncoder();
SACM_DVR_Initial(Manual); //非自动方式播放的初始化
InitReadSRAM();
Addr=0;
SACM_DVR_InitDecoder(DAC1); //开始对A2000的语音数据以非自动方式解码
while(1)
{
if(SACM_DVR_TestQueue()!=Full)
{
Ret =ReadSRAM(Addr);
SACM_DVR_FillQueue(Ret);
Addr+=2;
}
if(Addr<SRAM_Size) //如果该段语音播完,即到达末地址时
SACM_DVR_Decode (); //获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
else
SACM_DVR_StopDecoder(); //否则,停止播放
}
}
//*******************************************************************************************/
// void SACM_ DVR _Initial(int Init_Index); 来自于sacmv25.lib,API接口函数。SACM_ DVR语音播放
// 之前的初始化:设置中断源、定时器以及播放方式(自动、手动);Init_Index=0 表示手动方式;
// Init_Index=1 则表示自动方式,无返回值。
// void SACM_DVR_Encode(void);来自于acmv25.lib,API接口函数。开始以自动方式录制声音资料到外接
// SRAM中。无入口出口参数。
// void SACM_DVR_InitDecode(int Channel); 来自于sacmv25.lib,API接口函数。开始对SACM_DVR语音
// 资料以非自动方式(编程控制)进行译码。Channel=1,2,3;分别表示使用DAC1、DAC2信道以及
// DAC1和DAC2双通道;无返回值。
// SACM_DVR_StopDecoder(); 来自于sacmv25.lib,API接口函数。无出口入口参数。
// SP_GetResource(Addr);来自于Hardware.asm,F_SP_GetCh.从资源文件里获取一个字型语音数据
// main.c 结束
//*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -