標題:
基于MSP430單片機的LD3320源代碼
[打印本頁]
作者:
biggodzhou
時間:
2019-4-4 00:16
標題:
基于MSP430單片機的LD3320源代碼
直接下載附件吧,兄弟們,程序里面都有,關于MSP430的LD3320代碼
單片機源程序如下:
#include "main.h"
uint8 nLD_Mode = LD_MODE_IDLE; // 用來記錄當前是在進行ASR識別還是在播放MP3
unsigned char ucRegVal;
unsigned char ucHighInt;
unsigned char ucLowInt;
/*****************************************
函數(shù)功能 ;LD3320外部中斷初始化P1_6
入口參數(shù):無
出口參數(shù):無
******************************************/
void LD3320_EXTERINT_Init()
{
P1SEL&=~BIT6;
P1DIR&=~BIT6;
P1REN|=BIT6;
P1OUT|=BIT6;
P1IES|=BIT6;
P1IE|=BIT6;
P1IFG&=~BIT6;
}
/*****************************************
函數(shù)功能 ;LD3320控制端口初始化
入口參數(shù):無
出口參數(shù):無
******************************************/
void LD3320_Port_Init()
{
P7OUT|=(BIT3+BIT4+BIT5+BIT6+BIT7);
P7REN|=(BIT3+BIT4+BIT5+BIT6+BIT7);
P7DIR|=(BIT3+BIT4+BIT5+BIT6+BIT7);
DIR_LD_CS_OUT;
DIR_LD_CLK_OUT;
DIR_LD_DI_OUT;
DIR_LD_DO_IN;
DIR_LD_RST_OUT;
DIR_LD_SPIS_OUT;
}
/*****************************************
函數(shù)功能 ;LD3320 SPI通信測試
入口參數(shù):無
出口參數(shù):無
******************************************/
void Test_Information()
{
//測試讀寫是否正常
LD_reset();
LD_ReadReg(0x06);
LD_WriteReg(0x35, 0x33);
LD_WriteReg(0x1b, 0x55);
LD_WriteReg(0xb3, 0xaa);
nAsrRes=(LD_ReadReg(0x35));
nAsrRes=(LD_ReadReg(0x1b));
nAsrRes=(LD_ReadReg(0xb3));
//測試寄存器初始值是否正常
LD_reset();
nAsrRes=(LD_ReadReg(0x06));
nAsrRes=(LD_ReadReg(0x06));
nAsrRes=(LD_ReadReg(0x35));
nAsrRes=(LD_ReadReg(0xb3));
}
/*****************************************
函數(shù)功能 ;LD3320寫函數(shù)
入口參數(shù):address LD3320地址
dataout LD3320數(shù)據(jù)
出口參數(shù):無
******************************************/
void LD_WriteReg( unsigned char address, unsigned char dataout )
{
unsigned char i = 0;
unsigned char command=0x04;
CLR_LD_CS;//打開片選
__delay_cycles(500);
///////////////////////寫命令
for(i=0;i<8;i++)
{
if ((command & 0x80)>0)
SET_LD_DI;
else
CLR_LD_DI;
__delay_cycles(500);
CLR_LD_CLK;
command = (command << 1);
__delay_cycles(500);
SET_LD_CLK;
}
/////////////////////寫地址
for(i=0;i<8;i++)
{
if ((address & 0x80) >0)
SET_LD_DI;
else
CLR_LD_DI;
__delay_cycles(500);
CLR_LD_CLK;
address = (address << 1);
__delay_cycles(500);
SET_LD_CLK;
}
//////////////////////寫數(shù)據(jù)
for(i=0;i<8;i++)
{
if ((dataout & 0x80) >0)
SET_LD_DI;
else
CLR_LD_DI;
__delay_cycles(500);
CLR_LD_CLK;
dataout = (dataout << 1);
__delay_cycles(500);
SET_LD_CLK;
}
__delay_cycles(500);
SET_LD_CS;//關閉片選
}
/*****************************************
函數(shù)功能 ;LD3320讀函數(shù)
入口參數(shù):address LD3320地址
出口參數(shù):datain LD3320讀出的收據(jù)
******************************************/
unsigned char LD_ReadReg( unsigned char address )
{
unsigned char i = 0;
unsigned char datain =0 ;
unsigned char command=0x05;
CLR_LD_CS;//打開片選
__delay_cycles(2000);
///////////////////////寫命令
for(i=0;i<8;i++)
{
if ((command & 0x80)>0)
SET_LD_DI;
else
CLR_LD_DI;
__delay_cycles(2000);
CLR_LD_CLK;
command = (command << 1);
__delay_cycles(2000);
SET_LD_CLK;
}
/////////////////////寫地址
for(i=0;i<8;i++)
{
if ((address & 0x80) >0)
SET_LD_DI;
else
CLR_LD_DI;
__delay_cycles(2000);
CLR_LD_CLK;
address = (address << 1);
__delay_cycles(2000);
SET_LD_CLK;
__delay_cycles(2000);
}
/////////////////////讀數(shù)據(jù)
DIR_LD_DO_IN;
for(i=0;i<8;i++)
{
datain = datain << 1;
CLR_LD_CLK;
if(LD_DO) datain|=0x01;
__delay_cycles(200);
SET_LD_CLK;
__delay_cycles(200);
}
__delay_cycles(2000);
SET_LD_CS;//關閉片選
return datain;
}
/*****************************************
函數(shù)功能 ;LD3320復位函數(shù)
入口參數(shù):無
出口參數(shù):無
******************************************/
void LD_reset()
{
SET_LD_RST;
__delay_cycles(200);
CLR_LD_RST;
__delay_cycles(200);
SET_LD_RST;
__delay_cycles(200);
CLR_LD_CS;
__delay_cycles(200);
SET_LD_CS;
__delay_cycles(200);
}
void LD_Init_Common()
{
LD_ReadReg(0x06);
LD_WriteReg(0x17, 0x35);
__delay_cycles(200);
LD_ReadReg(0x06);
LD_WriteReg(0x89, 0x03);
__delay_cycles(200);
LD_WriteReg(0xCF, 0x43);
__delay_cycles(200);
LD_WriteReg(0xCB, 0x02);
/*PLL setting*/
LD_WriteReg(0x11, LD_PLL_11);
LD_WriteReg(0x1E,0x00);
LD_WriteReg(0x19, LD_PLL_ASR_19);
LD_WriteReg(0x1B, LD_PLL_ASR_1B);
LD_WriteReg(0x1D, LD_PLL_ASR_1D);
__delay_cycles(2000);
LD_WriteReg(0xCD, 0x04);
LD_WriteReg(0x17, 0x4c);
__delay_cycles(200);
LD_WriteReg(0xB9, 0x00);
LD_WriteReg(0xCF, 0x4F);
LD_WriteReg(0x6F, 0xFF);
}
void LD_Init_ASR()
{
nLD_Mode=LD_MODE_ASR_RUN;
LD_Init_Common();
LD_WriteReg(0xBD, 0x00);
LD_WriteReg(0x17, 0x48);
__delay_cycles(200);
LD_WriteReg(0x3C, 0x80);
LD_WriteReg(0x3E, 0x07);
LD_WriteReg(0x38, 0xff);
LD_WriteReg(0x3A, 0x07);
LD_WriteReg(0x40, 0);
LD_WriteReg(0x42, 8);
LD_WriteReg(0x44, 0);
LD_WriteReg(0x46, 8);
__delay_cycles(200);
}
// Return 1: success.
unsigned char LD_Check_ASRBusyFlag_b2()
{
unsigned char j;
unsigned char flag = 0;
for (j=0; j<10; j++)
{
if (LD_ReadReg(0xb2) == 0x21)
{
flag = 1;
break;
}
__delay_cycles(200);
}
return flag;
}
/************************************************************************
功能描述: 啟動ASR
入口參數(shù): none
返 回 值: none
其他說明: none
**************************************************************************/
void LD_AsrStart()
{
LD_Init_ASR();
}
// Return 1: success.
unsigned char LD_AsrRun()
{
LD_WriteReg(0x35, MIC_VOL);
LD_WriteReg(0x1C, 0x09);
LD_WriteReg(0xBD, 0x20);
LD_WriteReg(0x08, 0x01);
__delay_cycles(20000);
LD_WriteReg(0x08, 0x00);
__delay_cycles(20000);
if(LD_Check_ASRBusyFlag_b2() == 0)
{
return 0;
}
LD_WriteReg(0xB2, 0xff);
LD_WriteReg(0x37, 0x06);
__delay_cycles(20000);
LD_WriteReg(0x1C, 0x0b); //配置麥克風做為輸入信號
//LD_WriteReg(0x1C, 0x07); //配置雙通道音頻信號做為輸入信號
LD_WriteReg(0x29, 0x10);
LD_WriteReg(0xBD, 0x00);
//EX0=1;
return 1;
}
/************************************************************************
功能描述:添加關鍵詞,此處為用戶修改部分
調(diào)用函數(shù):
入口參數(shù):
返回函數(shù):
**************************************************************************/
// Return 1: success.
// 添加識別關鍵詞語,開發(fā)者可以學習"語音識別芯片LD3320高階秘籍.pdf"中關于垃圾詞語吸收錯誤的用法
unsigned char LD_AsrAddFixed()
{
unsigned char k, flag;
uint8 nAsrAddLength;
//uint8 code sRecog[4][20] = {"","kai fa ban yan zheng", "dai ma ce shi","jian cha wan bi"}; /*添加關鍵詞,用戶修改*/
unsigned char sRecog[4][20] = {"","wo shi", "ce shi cheng gong ","jian yan wan bi"};
unsigned char pCode[4] = {0,CODE_KFBYZ, CODE_DMCS, CODE_JCWB}; /*添加識別碼,用戶修改*/
flag = 1;
for (k=0; k<4; k++)
{
if(LD_Check_ASRBusyFlag_b2() == 0)
{
flag = 0;
break;
}
LD_WriteReg(0xc1, pCode[k] );
LD_WriteReg(0xc3, 0 );
LD_WriteReg(0x08, 0x04);
__delay_cycles(2000);
LD_WriteReg(0x08, 0x00);
__delay_cycles(2000);
for (nAsrAddLength=0; nAsrAddLength<20; 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;
}
/************************************************************************************/
// RunASR()函數(shù)實現(xiàn)了一次完整的ASR語音識別流程
// LD_Init_ASR() 函數(shù)實現(xiàn)了ASR初始化
// LD_AsrAddFixed() 函數(shù)實現(xiàn)了添加關鍵詞語到LD3320芯片中
// LD_AsrRun() 函數(shù)啟動了一次ASR語音識別流程
//
// 任何一次ASR識別流程,都需要按照這個順序,從初始化開始進行
/************************************************************************************/
unsigned char RunASR()
{
unsigned char i=0;
unsigned char asrflag=0;
for (i=0; i<5; i++) // 防止由于硬件原因導致LD3320芯片工作不正常,所以一共嘗試5次啟動ASR識別流程
{
LD_AsrStart();
__delay_cycles(20000);
if (LD_AsrAddFixed()==0)
{
LD_reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
__delay_cycles(20000); // 并從初始化開始重新ASR識別流程
continue;
}
__delay_cycles(20000);
if (LD_AsrRun() == 0)
{
LD_reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
__delay_cycles(20000); // 并從初始化開始重新ASR識別流程
continue;
}
asrflag=1;
break; // ASR流程啟動成功,退出當前for循環(huán)。開始等待LD3320送出的中斷信號
}
return asrflag;
}
/************************************************************************
功能描述: 獲取識別結構
調(diào)用函數(shù):
入口參數(shù):
返回函數(shù):
**************************************************************************/
unsigned char LD_GetResult()
{
return LD_ReadReg(0xc5 );
}
void ProcessInt0(void)
{
uint8 nAsrResCount=0;
//EX0=0;
ucRegVal = LD_ReadReg(0x2B);
LD_WriteReg(0x29,0) ;
LD_WriteReg(0x02,0) ;
if((ucRegVal & 0x10) &&
LD_ReadReg(0xb2)==0x21 &&
LD_ReadReg(0xbf)==0x35) /*識別成功*/
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
MSP430 源程序.zip
(194.56 KB, 下載次數(shù): 16)
2019-4-4 00:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1