}
LD_WriteReg(0x44, 0); LD_WriteReg(0x46, 8); delay( 1 );
/************************************************************************ 功能描述: 中断处理函数 入口参数:
none
返 回 值: none 其他说明:
当LD模块接收到音频信号时,将进入该函数,
判断识别是否有结果,如果没有从新配置寄
存器准备下一次的识别。
**************************************************************************/ void ProcessInt0(void) {
uint8 nAsrResCount=0; EX0=0;
ucRegVal = LD_ReadReg(0x2B); LD_WriteReg(0x29,0) ; LD_WriteReg(0x02,0) ; if((ucRegVal & 0x10) &&
{ { } else { }
LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)
nAsrResCount = LD_ReadReg(0xba); if(nAsrResCount>0 && nAsrResCount<=4) { } else
nAsrStatus=LD_ASR_FOUNDOK;
/*识别成功*/
}
nAsrStatus=LD_ASR_FOUNDZERO;
/*没有识别结果*/
nAsrStatus=LD_ASR_FOUNDZERO;
LD_WriteReg(0x2b, 0);
LD_WriteReg(0x1C,0);/*写0:ADC不可用*/
LD_WriteReg(0x29,0) ; LD_WriteReg(0x02,0) ;
}
LD_WriteReg(0x2B, 0); LD_WriteReg(0xBA, 0); LD_WriteReg(0xBC,0);
LD_WriteReg(0x08,1); /*清除FIFO_DATA*/
LD_WriteReg(0x08,0); /*清除FIFO_DATA后 再次写0*/ EX0=1;
/************************************************************************ 功能描述: 运行ASR识别流程 入口参数:
none
返 回 值: asrflag:1->启动成功, 0—>启动失败 其他说明: 程
2、LD_AsrStart() 函数实现了ASR初始化 3、LD_AsrAddFixed() 函数实现了添加关键词语到
识别顺序如下:
1、RunASR()函数实现了一次完整的ASR语音识别流
LD3320芯片中
任何一次ASR识别流程,都需要按照这个顺序,从4、LD_AsrRun()
函数启动了一次ASR语音识
别流程
初始化开始
**************************************************************************/
uint8 RunASR(void) { uint8 i=0; uint8 asrflag=0;
for (i=0; i<5; i++)
正常,所以一共尝试5次启动ASR识别流程 {LD_AsrStart(); delay(50);
if (LD_AsrAddFixed()==0) {
LD_Reset();
重启LD3320芯片 delay(50);
continue;
}
delay(10);
if (LD_AsrRun() == 0)
{LD_Reset();
LD3320芯片 delay(50);
continue;
}
asrflag=1;
//
防止由于硬件原因导致LD3320芯片工作不
//
LD3320芯片内部出现不正常,立即
//
并从初始化开始重新ASR识别流程
//
LD3320芯片内部出现不正常,立即重启
//
并从初始化开始重新ASR识别流程
break; // ASR流程启动成功,退出当前for
循环。开始等待LD3320送出的中断信号
}
return asrflag; }
/************************************************************************ 功能描述: 检测LD模块是否空闲 入口参数:
none
返 回 值: flag:1-> 空闲 其他说明:
none
**************************************************************************/ uint8 LD_Check_ASRBusyFlag_b2() {
uint8 j; uint8 flag = 0; for (j=0; j<10; j++) {
if (LD_ReadReg(0xb2) == 0x21) {
flag = 1; break;