|
1、STM32的用戶 可以直接 在工程里面 添加如下4個(gè)文件1》LD3320_main.c 2》LDChip.c 3》Reg_RW.c 4》delay.c
2、51的用戶同時(shí)可以根據(jù)以上操作來做相關(guān)的修改。
所有語音識(shí)別程序源代碼下載:
基于STM32 的 LD3320基本驅(qū)動(dòng)程序.rar
(50.55 KB, 下載次數(shù): 244)
2016-4-13 16:11 上傳
點(diǎn)擊文件名下載附件
ldchip.c
- /************************************************************************************
- ** 版權(quán)所有:Copyright (c) 2005 - 2010 ICRoute INC.
- ** 硬件說明:STM32f103vet6 8MHZ 內(nèi)部時(shí)鐘為72MHZ
- ** LD3320 有源晶振 12MHZ 不同的晶振請(qǐng)修改LDChip.h 中的定義值(#define CLK_IN 12)
- ** 軟件說明:并行讀寫寄存器方式,如采用其他方式即修改Reg_RW.c 文件即可!
- ** 修改者: http://shop64790118.taobao.com/
- ** 時(shí)間:2011.10.15
- ** 說明:本程序修改于 ICRoute公司 配套的源程序,版權(quán)歸其所有。
- ************************************************************************************/
- #include <stm32f10x_conf.h>
- #include <stm32f10x.h>
- #include "LDChip.h"
- #include "Reg_RW.h"
- #include "gui_include.h"
- uint8 nLD_Mode = LD_MODE_IDLE; // 用來記錄當(dāng)前是在進(jìn)行ASR識(shí)別還是在播放MP3
- uint8 ucRegVal;
- uint8 ucHighInt;
- uint8 ucLowInt;
- extern uint8 nAsrStatus;
- void ProcessInt0(void);
- /************************************************************************
- 功能描述: 芯片硬件初始化
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- void LD_reset(void)
- {
- LD_RST_H();
- LD3320_delay(10);
- LD_RST_L();
- LD3320_delay(10);
- LD_RST_H();
- LD3320_delay(10);
- LD_CS_L();
- LD3320_delay(10);
- LD_CS_H();
- LD3320_delay(10);
- }
- /************************************************************************
- 功能描述: 初始化命令 軟初始化
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- void LD_Init_Common(void)
- {
- LD_ReadReg(0x06);
- LD_WriteReg(0x17, 0x35);
- LD3320_delay(10);
- LD_ReadReg(0x06);
- LD_WriteReg(0x89, 0x03);
- LD3320_delay(5);
- LD_WriteReg(0xCF, 0x43);
- LD3320_delay(5);
- LD_WriteReg(0xCB, 0x02);
-
- /*PLL setting*/
- LD_WriteReg(0x11, LD_PLL_11);
- if (nLD_Mode == LD_MODE_MP3)
- {
- LD_WriteReg(0x1E, 0x00);
- LD_WriteReg(0x19, LD_PLL_MP3_19);
- LD_WriteReg(0x1B, LD_PLL_MP3_1B);
- LD_WriteReg(0x1D, LD_PLL_MP3_1D);
- }
- else
- {
- 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);
- }
- LD3320_delay(10);
-
- LD_WriteReg(0xCD, 0x04);
- LD_WriteReg(0x17, 0x4c);
- LD3320_delay(5);
- LD_WriteReg(0xB9, 0x00);
- LD_WriteReg(0xCF, 0x4F);
- LD_WriteReg(0x6F, 0xFF);
- }
- /************************************************************************
- 功能描述: 初始化ASR
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- void LD_Init_ASR(void)
- {
- nLD_Mode=LD_MODE_ASR_RUN;
- LD_Init_Common();
- LD_WriteReg(0xBD, 0x00);
- GUI_DispDecAt(LD_ReadReg(0xBD),300,20,3); //text................................
- LD_WriteReg(0x17, 0x48);
-
- LD3320_delay( 10 );
- LD_WriteReg(0x3C, 0x80);
- GUI_DispDecAt(LD_ReadReg(0x3C),300,40,3); //1 text................................
- LD_WriteReg(0x3E, 0x07);
- GUI_DispDecAt(LD_ReadReg(0x3e),300,60,3); //text................................
- LD_WriteReg(0x38, 0xff);
- GUI_DispDecAt(LD_ReadReg(0x38),300,80,3); //text................................
- LD_WriteReg(0x3A, 0x07);
- GUI_DispDecAt(LD_ReadReg(0x3a),300,100,3); //text................................
- LD_WriteReg(0x40, 0);
- GUI_DispDecAt(LD_ReadReg(0x40),300,120,3); //text................................
- LD_WriteReg(0x42, 8);
- GUI_DispDecAt(LD_ReadReg(0x42),300,140,3); //text................................
- LD_WriteReg(0x44, 0);
- GUI_DispDecAt(LD_ReadReg(0x44),300,160,3); //text................................
- LD_WriteReg(0x46, 8);
- GUI_DispDecAt(LD_ReadReg(0x46),300,180,3); //text................................
- LD3320_delay( 1 );
- }
- /************************************************************************
- 功能描述: 識(shí)別處理函數(shù) ,可以利用查詢方式,或中斷方式進(jìn)行調(diào)用
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- void ProcessInt0(void)
- {
- uint8 nAsrResCount=0;
- ucRegVal = LD_ReadReg(0x2B);
- if(nLD_Mode == LD_MODE_ASR_RUN)
- {
- //GUI_DispDecAt(2,20,70,5); //text................................
- // 語音識(shí)別產(chǎn)生的中斷
- // (有聲音輸入,不論識(shí)別成功或失敗都有中斷)
- LD_WriteReg(0x29,0) ;
- LD_WriteReg(0x02,0) ;
- //
- GUI_DispDecAt(ucRegVal,200,100,3);
- GUI_DispDecAt(LD_ReadReg(0xb2),200,120,3);
- GUI_DispDecAt(LD_ReadReg(0xbf),200,140,3);
-
- if((ucRegVal & 0x10) && LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)
- {
- GUI_DispDecAt(3,20,90,5); //text................................
- nAsrResCount = LD_ReadReg(0xba);
-
- if(nAsrResCount>0 && nAsrResCount<=4)
- {
- nAsrStatus=LD_ASR_FOUNDOK;
- }
- else
- {
- nAsrStatus=LD_ASR_FOUNDZERO;
- }
- }
-
- else
- { GUI_DispDecAt(4,20,100,5); //text................................
- nAsrStatus=LD_ASR_FOUNDZERO; //執(zhí)行沒有識(shí)別
- }
- LD_WriteReg(0x2b, 0);
- LD_WriteReg(0x1C,0); //ADC開關(guān) 設(shè)為不可用
- }
-
- // 聲音播放產(chǎn)生的中斷,有三種:
- // A. 聲音數(shù)據(jù)已全部播放完。
- // B. 聲音數(shù)據(jù)已發(fā)送完畢。
- // C. 聲音數(shù)據(jù)暫時(shí)將要用完,需要放入新的數(shù)據(jù)。
-
- ucHighInt = LD_ReadReg(0x29);
- ucLowInt=LD_ReadReg(0x02);
- GUI_DispDecAt(ucHighInt,20,160,4);
- GUI_DispDecAt(ucLowInt,20,180,4);
- LD_WriteReg(0x29,0) ;
- LD_WriteReg(0x02,0) ;
- if(LD_ReadReg(0xBA)&CAUSE_MP3_SONG_END)
- {
- // A. 聲音數(shù)據(jù)已全部播放完。
- LD_WriteReg(0x2B, 0);
- LD_WriteReg(0xBA, 0);
- LD_WriteReg(0xBC,0x0);
- LD_WriteReg(0x08,1);
- LD3320_delay_2(5);
- LD_WriteReg(0x08,0);
- LD_WriteReg(0x33, 0);
- return ;
- }
- else
- {
- // B. 聲音數(shù)據(jù)已發(fā)送完畢。
-
- LD_WriteReg(0xBC, 0x01);
- LD_WriteReg(0x29, 0x10);
- return;
- }
-
- LD_WriteReg(0x29,ucHighInt);
- LD_WriteReg(0x02,ucLowInt) ;
- LD3320_delay_2(1);
- }
- /************************************************************************
- 功能描述: 檢測(cè) ASR 是否忙狀態(tài), 返回1為空閑狀態(tài)
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- uint8 LD_Check_ASRBusyFlag_b2(void)
- {
- uint8 j;
- uint8 flag = 0;
- for (j=0; j<10; j++)
- {
- if (LD_ReadReg(0xb2) == 0x21)
- {
- flag = 1;
- break;
- }
- LD3320_delay(10);
- }
- return flag;
- }
- void LD_AsrStart()
- {
- LD_Init_ASR();
- }
- /************************************************************************
- 功能描述:
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- // Return 1: success.
- uint8 LD_AsrRun(void)
- {
- LD_WriteReg(0x35, MIC_VOL);
- LD_WriteReg(0x1C, 0x09);
- LD_WriteReg(0xBD, 0x20);
- LD_WriteReg(0x08, 0x01);
- LD3320_delay( 1 );
- LD_WriteReg(0x08, 0x00);
- LD3320_delay( 1 );
- if(LD_Check_ASRBusyFlag_b2() == 0)
- {
- return 0;
- }
- LD_WriteReg(0xB2, 0xff);
- LD_WriteReg(0x37, 0x06);
- LD_WriteReg(0x37, 0x06);
- LD3320_delay( 5);
- GUI_DispDecAt(LD_ReadReg(0xbf),200,40,3); //text 0xbf==0x31--49
- LD_WriteReg(0x1C, 0x0b);
- LD_WriteReg(0x29, 0x10);
-
- LD_WriteReg(0xBD, 0x00);
- return 1;
- }
- /************************************************************************
- 功能描述: 添加識(shí)別關(guān)鍵詞語
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- // Return 1: success.
- // 添加識(shí)別關(guān)鍵詞語,開發(fā)者可以學(xué)習(xí)"語音識(shí)別芯片LD3320高階秘籍.pdf"中關(guān)于垃圾詞語吸收錯(cuò)誤的用法
- uint8 LD_AsrAddFixed(void)
- {
- uint8 k, flag;
- uint8 nAsrAddLength;
- const char sRecog[5][13] = {"kai deng", "guan deng",
- "fang jian a", "tian jin", "chong qing"};
- const uint8 pCode[5] = {CODE_KAIDENGD, CODE_GUANDENG, CODE_FANGJIANA, CODE_TIANJIN, CODE_CHONGQING};
-
- flag = 1;
- for (k=0; k<5; k++)
- {
- if(LD_Check_ASRBusyFlag_b2() == 0)
- {
- flag = 0;
- break;
- }
-
- LD_WriteReg(0xc1, pCode[k] );
- LD_WriteReg(0xc3, 0 );
- LD_WriteReg(0x08, 0x04);
- LD3320_delay(1);
- LD_WriteReg(0x08, 0x00);
- LD3320_delay(1);
- 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);
- LD_WriteReg(0x37, 0x04);
- }
- GUI_DispDecAt(LD_ReadReg(0xbf),200,20,3); //text 0xbf==0x31--49
- return flag;
- }
- /************************************************************************
- 功能描述: 獲取識(shí)別結(jié)果
- 調(diào)用函數(shù):
- 入口參數(shù):
- 返回函數(shù):
- **************************************************************************/
- uint8 LD_GetResult(void)
- {
- GUI_DispDecAt(LD_ReadReg(0xc5),200,80,3);
- return LD_ReadReg(0xc5 );
- }
復(fù)制代碼
LD3320_main.c
|
|