⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 arm3000语音开发模块 arm3000语音开发模块
💻 C
字号:
#define	P_IOA_Data 				(volatile unsigned int *)0x7000   
#define P_IOA_Buffer 			(volatile unsigned int *)0x7001
#define P_IOA_Dir 				(volatile unsigned int *)0x7002
#define P_IOA_Attrib 			(volatile unsigned int *)0x7003
#define P_IOA_Latch 			(volatile unsigned int *)0x7004
#define P_IOB_Data				(volatile unsigned int *)0x7005  
#define P_IOB_Buffer			(volatile unsigned int *)0x7006   
#define P_IOB_Dir				(volatile unsigned int *)0x7007   
#define P_IOB_Attrib			(volatile unsigned int *)0x7008   

#define P_Watchdog_Clear		(volatile unsigned int *)0x7012   
#define P_SystemClock			(volatile unsigned int *)0x7013  

#include "bsrsd.h"
#include "hardware.h"

#define NAME_ID 	  	    0x100
#define COMMAND_ONE_ID 	    0x101
#define COMMAND_TWO_ID 	    0x102
#define COMMAND_THREE_ID 	0x103
#define COMMAND_FORE_ID 	0x104
#define COMMAND_FIVE_ID 	0x105
#define COMMAND_SIX_ID 	    0x106
#define COMMAND_SEVEN_ID 	0x107
#define RSP_INTR		0
#define RSP_NAME		1
#define RSP_FIRE		2
#define RSP_GUARD		3
#define RSP_AGAIN		4
#define RSP_NOVOICE		5
#define RSP_NAMEDIFF	6
#define RSP_CMDDIFF		7
#define RSP_STAR		8
#define RSP_MASTER		9
#define RSP_HERE		10
#define RSP_GUNSHOT		0
#define RSP_PATROL		11
#define RSP_READY		12
#define RSP_COPY		13
#define RSP_NOISY		14
extern  unsigned int BSR_SDModel[100];
unsigned int commandID;
unsigned int g_Ret;
//..................全程变量....................
int gActivated = 0;	//该变量用于检测是否有触发命令,当有识别出语句
                    //为触发名称则该位置1 
					 
int gTriggerRespond[] = {RSP_MASTER, RSP_HERE, RSP_MASTER};
int gComm2Respond[] = {RSP_PATROL, RSP_READY, RSP_COPY};
extern void ClearWatchDog();
int PlayFlag = 0;
unsigned  int uiSpeed=0;
void PlayRespond2(int Result)
{
	BSR_StopRecognizer();
	SACM_A2000_Initial(1);
	SACM_A2000_Play(Result, 3, 3);
	while((SACM_A2000_Status()&0x0001) != 0)
	{
		SACM_A2000_ServiceLoop();
		ClearWatchDog();
	}
	SACM_A2000_Stop();
	BSR_InitRecognizer(BSR_MIC);
	BSR_EnableCPUIndicator();	
}

void PlayRespond(int Result)
{
	BSR_StopRecognizer();
	SACM_S480_Initial(1);
	SACM_S480_Play(Result, 3, 3);
	while((SACM_S480_Status()&0x0001) != 0)
	{
		SACM_S480_ServiceLoop();
		ClearWatchDog();
	}
	SACM_S480_Stop();
	BSR_InitRecognizer(BSR_MIC);
	BSR_EnableCPUIndicator();	
}

int TrainWord(int WordID, int RespondID)
{
	int res;
	PlayRespond(RespondID);
	while(1)
	{
		res = BSR_Train(WordID,BSR_TRAIN_TWICE);
		
		if(res == 0) break;
		switch(res)
		{
		case -1: 									//没有检测出声音
			PlayRespond(5);
			return -1;
		case -2: 									//需要重新训练一遍
			PlayRespond(4);
			break;
		case -3: 									//环境太吵
			PlayRespond(5);
			return -1;		
		case -4: 									//数据库满
		 	return -1;
		case -5: 									//检测出声音不同
			if(WordID == NAME_ID)	PlayRespond(5);//两次输入名称不同
			else					PlayRespond(5);//两次输入命令不同
			return -1;
		case -6: 									//序号错误
			return -1;
		}
	}
	return 0;
}

int main()
{
	int res,jk,k, timeCnt=0, random_no=0,iMoveFlag=0xffff,BS_Flag=0,iMoveFlagBS=0,iCarState=0,iCarSpeed=14;
	int uiIOB,i,ulAddr,Ret,free,*p;

 	p=0xef00;
	BS_Flag=*p;
 	ClearWatchDog();
	SP_Init_IOB(0xfff7,0xffff,0x0000); 
	SP_Init_IOA(0x0000,0x0000,0x0000);
	
//    for(i=0;i<65000;i++);                                  //延时                      
   
//   	while(1)                                               //与上位机建立通讯
//	  if(Get_Data_IOB3()==0)break;

    BSR_DeleteSDGroup(0);							       // 初始化存储器RAM

    if(BS_Flag==0xffff)
      {
    	PlayRespond(0);				    		           //播放开始训练的提示音
    	//..........训练名称.............................
	    while(TrainWord(NAME_ID,0) != 0);
	    //..........训练第一条命令.......................
	    while(TrainWord(COMMAND_ONE_ID,1) != 0);
	    //..........训练第二条命令.......................
	    while(TrainWord(COMMAND_TWO_ID,2) != 0);
	    //..........训练第三条命令.......................
	    while(TrainWord(COMMAND_THREE_ID,3) != 0);
	    //..........训练第四条命令.......................
	    while(TrainWord(COMMAND_FORE_ID,4) != 0);

	    BS_Flag=0xaaaa;
	    F_FlashWrite1Word(0xef00,0xaaaa);
        F_FlashErase(0xe000);
        F_FlashErase(0xe100);
        F_FlashErase(0xe200);
    
	    ulAddr=0xe000;
	    for(commandID=0x100;commandID<0x105;commandID++)
	     {
		    g_Ret=BSR_ExportSDWord(commandID);
		    while(g_Ret!=0)
		    g_Ret=BSR_ExportSDWord(commandID);		
		    for(i=0;i<100;i++)
		     {
		        F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
			    ulAddr+=1;												
		     }
	     }
      }
      
    if(BS_Flag==0xaaaa)	
     {
        BSR_DeleteSDGroup(0);
   	    p=0xe000;																					
	    for(jk=0;jk<5;jk++)
	     {
		   for(k=0;k<100;k++)
		    {
		   	   Ret=*p;							
			   BSR_SDModel[k]=Ret;				
			   p+=1;													
		    }					
		   g_Ret=BSR_ImportSDWord();

		   while(g_Ret!=0)
		     g_Ret=BSR_ImportSDWord();							
	     }
     }
	//..........开始识别命令.........................
	BSR_InitRecognizer(BSR_MIC);		    		//辨识器初始化

	PlayRespond(0);			    		            // 播放开始辨识的提示音
	PlayRespond(0);
    
	while(1)
	{
        random_no ++;
		if(random_no >= 3) random_no = 0;
		res = BSR_GetResult();
		
		if(res > 0)							         //识别出命令
		{
			if(gActivated)
			{
				timeCnt = 0;
				switch(res)
				{
				case NAME_ID:
   					PlayFlag = 0;
					ClearWatchDog();

					break;
				case COMMAND_ONE_ID:
				    PlayRespond(1);
				    ClearWatchDog();
                    
                    SET_IOB0();
		   
					gActivated = 0;
					break;
				case COMMAND_TWO_ID:
					PlayRespond(2);
			    
				    SET_IOB1();
		    
					ClearWatchDog();
					gActivated = 0;
					break;
				case COMMAND_THREE_ID:
				    PlayRespond(3);
				    
					SET_IOB2();
					ClearWatchDog();
				    gActivated = 0;

				    break;
//				case COMMAND_FORE_ID:
//				    PlayRespond(4);
			
//				    ClearWatchDog();
//				    gActivated = 0;
//				    break; 
			   }				
			}
			
			else
			{
				if(res == NAME_ID)
				  {
					ClearWatchDog(); 
					PlayRespond(0);
					gActivated = 1;
					timeCnt = 0;
				  }
			}	
		}
		else if (gActivated)
		{
		
			if (++timeCnt > 450)			//超出定时
			{
				ClearWatchDog(); 					
				gActivated = 0;
				timeCnt = 0;
			}
		}
	
            ClearWatchDog();
    /*.................. 检测按键并进入训练模板转头÷态 ...............   */
			i=*P_IOA_Data;    
   		    i=i&0x0080;
   		    if(i==0x0080)  F_FlashErase(0xef00); 
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -