表3.2 芯片模式
nLD_Mode 含义
LD_MODE_IDLE 空白模式
LD_MODE_ASR_RUN 语音识别模式
LD_MODE_MP3 MP3播放模式
表3.3 运行状态
nAsrStatus 含义
LD_ASR_NONE 初始化时
LD_ASR_RUNNING 正在运行
LD_ASR_ERROR 运行错误
LD_ASR_FOUNDOK 有识别结果
LD_ASR_FOUNDZERO 无识别结果
值得注意的是,在编程时一定要把对标志位的改变放在函数的正式运行之前。
3.3.1 涉及到的一般函数说明
(1)读函数:
uint8 LD_ReadReg(uint8 ulAddr);
ulAddr为要读取的寄存器地址,函数返回值为指定寄存器中的存储内容。
(2)写函数:
void LD_WriteReg(uint8 ulAddr,uint8 ucVal);
ulAddr为要写入的寄存器地址,ucVal为要写入的数值。
(3)延时函数:
void delay(unsigned long uldata);
该函数内调用空操作函数_nop_();,delay(1)的延迟约为1ms,在程序中使用目的是为了更稳定地工作。
(4)芯片复位:
void LD_reset();
就是对芯片的第47腿(RSTB*)发送低电平,芯片初始化一般在程序的开始进行。当芯片长时间没有响应时,可能是应用程序的设置不合理或者是电源的电压、电流有比较大的波动造成,这时应使用芯片复位的功能,使芯片重新开始工作。
(5)检测DSP忙闲状态:
uint8 LD_Check_ASRBusyFlag_b2();
该函数在100ms内检测DSP的忙闲状态,如果检测到DSP为闲,则返回值1,允许进行下一步ASR动作。
(6)通用初始化:
void LD_Init_Common();
按照指定序列设置寄存器,由于语音识别和MP3播放这两项功能会使用一些公用的资源,所以为了使芯片稳定地工作,在功能切换的时候,必须从通用初始化开始对芯片进行一系列的设置。
3.3.2 语音识别
语音识别的操作顺序是:通用初始化→语音识别用初始化→写入识别列表→开始识别,并准备好中断响应函数,打开中断允许位。
(1)语音识别用初始化:
void LD_Init_ASR()
{
nLD_Mode=LD_MODE_ASR_RUN;
LD_Init_Common();
……
}
将芯片模式设置为语音识别,并首先进行通用初始化,然后才进行语音识别用初始化的寄存器设置。
(2)写入识别列表:
列表的规则是,每个识别条目对应一个特定的编号(1个字节),不同的识别条目的编号可以相同,而且不用连续,但是数值要小于256(00H—FFH)。对应同一编号的,说这两个词会有相同的结果返回。
芯片最多支持50个识别条目,每个识别条目最大限制为79个字节,是标准普通话的汉语拼音(小写),每2个字(汉语拼音)之间用一个空格间隔。
为某个条目指定编号的操作为宏定义#define string x。写入识别列表的函数为:
uint8 LD_AsrAddFixed();
将编号x和条目string分别存入一个一文数组和一个二文数组,其在数组中的位置要对应。当识别列表写入成功时函数返回值1,写入失败返回0值。
写入识别列表的简单流程图如下图: STC10L08XE基于语音识别的智能控制系统开发(6):http://www.youerw.com/tongxin/lunwen_9683.html