Пример #1
0
static unsigned char LD_AsrRun(void)		
{
	LD_WriteReg(0x35, MIC_VOL);	   //麦克风音量
//	LD_Write(0xB3, 0x0D);	//
	LD_WriteReg(0x1C, 0x09);	//ADC开关控制,写09H Reserve 保留命令字
	LD_WriteReg(0xBD, 0x20);	//初始化控制寄存器 写入20H;
	LD_WriteReg(0x08, 0x01);	//清除FIFO内容第0位:写入->清除FIFO_DATA第二位
	delay( 1 );
	LD_WriteReg(0x08, 0x00);	//
	delay( 1 );

	if(LD_Check_ASRBusyFlag_b2() == 0)	 
	{
		return 0;
	}

	LD_WriteReg(0xB2, 0xff);	  //
	LD_WriteReg(0x37, 0x06);	  //
	delay( 5 );
	//LD_TEST();
	LD_WriteReg(0x1C, 0x0b);	  //
	LD_WriteReg(0x29, 0x10);	  //
	
	LD_WriteReg(0xBD, 0x00);	  //
	//EX0=1;		  //
	EXTI_ClearITPendingBit(EXTI_Line5);
	return 1;
}
Пример #2
0
uint8 LD_AsrRun()		//开始识别
{

	ld3320_write_reg(0x35, MIC_VOL);//麦克风音量
	ld3320_write_reg(0xB3, 0xF);    //灵敏度


	ld3320_write_reg(0x1C, 0x09);	//ADC开关控制 写09H Reserve保留命令字
	ld3320_write_reg(0xBD, 0x20);	//初始化控制寄存器 写入20H;Reserve保留命令字
	ld3320_write_reg(0x08, 0x01);	//清除FIFO内容第0位:写入1→清除FIFO_DATA 第2位:写入1→清除FIFO_EXT
	delay_ms( 1 );
	ld3320_write_reg(0x08, 0x00);	//清除FIFO内容第0位(清除指定FIFO后再写入一次00H)
	delay_ms( 1 );

	if (LD_Check_ASRBusyFlag_b2() == 0)	  //芯片内部出错
	{
		return 0;
	}

	ld3320_write_reg(0xB2, 0xff);	  //ASR:DSP忙闲状态 0x21 表示闲,查询到为闲状态可以进行下一步 ??? 为什么不是read??
	ld3320_write_reg(0x37, 0x06);	  //识别控制命令下发寄存器 写06H 通知DSP开始识别语音 下发前,需要检查B2寄存器
	delay_ms( 5 );
	LD_TEST();
	ld3320_write_reg(0x1C, 0x0b);	  // ADC开关控制  写0BH 麦克风输入ADC通道可用
	ld3320_write_reg(0x29, 0x10);	  //中断允许 第2位:FIFO 中断允许 第4位:同步中断允许 1允许;0不允许

	ld3320_write_reg(0xBD, 0x00);	  //初始化控制寄存器 写入00 然后启动 为ASR模块


	return 1;
}
Пример #3
0
// Return 1: success.
uint8 LD_AsrRun()
{
	SendString("LD_AsrRun().");
	SendLineEnd();

	LD_WriteReg(0x35, MIC_VOL);
//	LD_WriteReg(0xB3, 0x0D);	// 用户阅读 开发手册 理解B3寄存器的调整对于灵敏度和识别距离的影响


	LD_WriteReg(0x1C, 0x09);
	LD_WriteReg(0xBD, 0x20);
	LD_WriteReg(0x08, 0x01);
	delay( 1 );
	LD_WriteReg(0x08, 0x00);
	delay( 1 );

	if(LD_Check_ASRBusyFlag_b2() == 0)
	{
		return 0;
	}

	LD_WriteReg(0xB2, 0xff);	
	LD_WriteReg(0x37, 0x06);
	delay( 5 );
	LD_WriteReg(0x1C, 0x0b);
	LD_WriteReg(0x29, 0x10);
	
	LD_WriteReg(0xBD, 0x00);
	EX0=1;
	return 1;
}
Пример #4
0
// Return 1: success.
//	添加识别关键词语,开发者可以学习"语音识别芯片LD3320高阶秘籍.pdf"中关于垃圾词语吸收错误的用法
uint8 LD_AsrAddFixed()
{
	uint8 k, flag;
		
	SendString("\nLD_AsrAddFixed().");
	SendLineEnd();


	flag = 1;
	for (k=0; k<ITEM_COUNT; k++)
	{
			
		if(LD_Check_ASRBusyFlag_b2() == 0)
		{
			flag = 0;
			break;
		}
		
		LD_AsrAddFixed_ByIndex(k);
	}
    return flag;
}
Пример #5
0
static unsigned char LD_AsrAddFixed(void)
{
	unsigned char k, flag;
	unsigned char nAsrAddLength;
	#define DATE_A 12    //数组二维数值
	#define DATE_B 50		//数组以为数值
	//添加关键词
	unsigned char  sRecog[DATE_A][DATE_B] = {
	 			"ni shi shui",	\
				"ni zai na li",		\
				"wo shi shui",	\
				"xuan zhuan",			\
				"ting zhi",		\
				"chang shou ge",		\
				"xiang qian zou",		\
				"xiang hou tui",		\
				"yao tou",		\
				"niu yao",		\
				"zuo ge bo",		\
				"you ge bo",		\
		};	
	unsigned char  pCode[DATE_A] = {
									1,	\
									2,	\
									3,	\
									4,	\
									5,	\
									6,	\
		7,	\
		8,	\
		9,	\
		10,	\
		11,	\
		12,	\
									};	
	flag = 1;
	for (k=0; k<DATE_A; k++)
	{			
		if(LD_Check_ASRBusyFlag_b2() == 0)
		{
			flag = 0;
			break;
		}

		LD_WriteReg(0xc1, pCode[k] );
		LD_WriteReg(0xc3, 0);
		LD_WriteReg(0x08, 0x04);
		delay(1);
		LD_WriteReg(0x08, 0x00);
		delay(1);

		for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
		{
			if (sRecog[k][nAsrAddLength] == 0)
				break;
			LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
		}
		LD_WriteReg(0xb9, nAsrAddLength);
		LD_WriteReg(0xb2, 0xff);
		LD_WriteReg(0x37, 0x04);
	}	 
	return flag;
}