📄 rap.c
字号:
//***********************************************************
// Note: DVR有两种录放音方式,即自动方式和非自动方式,我们可以通
// 过改变Mode的值来切换这两种方式:当Mode=0时以非自动方式录放音,
// 当Mode=1时,以自动方式录放音,而且中断中分别用FIQ中断实现语音的
// 播放,用IRQ1中断实现语音的录制。这里我们给出非自动方式的例子:
// DATA:2003/05/14
// IDE: 1.8.0
//*************************************************************
#define Manual 0
#define Auto 1
#define SRAM_Size 0xffff-2
#define RceMonitorOff 0
#define RceMonitorOn 1
#define DAC1 1
#define DAC2 2
#define Full 1
#define Empty 2
int main()
{
int Ret=0;
int Addr;
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(); //否则,停止播放
}
F_ClearWatchdog(); //清看门狗
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -