嵌入式.docx

上传人:b****8 文档编号:9292222 上传时间:2023-02-04 格式:DOCX 页数:33 大小:23.04KB
下载 相关 举报
嵌入式.docx_第1页
第1页 / 共33页
嵌入式.docx_第2页
第2页 / 共33页
嵌入式.docx_第3页
第3页 / 共33页
嵌入式.docx_第4页
第4页 / 共33页
嵌入式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

嵌入式.docx

《嵌入式.docx》由会员分享,可在线阅读,更多相关《嵌入式.docx(33页珍藏版)》请在冰豆网上搜索。

嵌入式.docx

嵌入式

LDCHIP.H

/************************************************************************************/

//版权所有:

Copyright(c)2005-2010ICRouteINC.

/************************************************************************************/

#ifndefLD_CHIP_H

#defineLD_CHIP_H

#defineuint8unsignedchar

#defineuint16unsignedint

#defineuint32unsignedlong

//以下三个状态定义用来记录程序是在运行ASR识别还是在运行MP3播放

//#defineLD_MODE_IDLE0x00

//#defineLD_MODE_ASR_RUN0x08

//#defineLD_MODE_MP30x40

//以下五个状态定义用来记录程序是在运行ASR识别过程中的哪个状态

#defineLD_ASR_NONE0x00//表示没有在作ASR识别

#defineLD_ASR_RUNING0x01//表示LD3320正在作ASR识别中

#defineLD_ASR_FOUNDOK0x10//表示一次识别流程结束后,有一个识别结果

#defineLD_ASR_FOUNDZERO0x11//表示一次识别流程结束后,没有识别结果

#defineLD_ASR_ERROR0x31//表示一次识别流程中LD3320芯片内部出现不正确的状态

#defineCLK_IN22.1184/*用户注意修改输入的晶振时钟大小*/

#defineLD_PLL_11(uint8)((CLK_IN/2.0)-1)

#defineLD_PLL_MP3_190x0f

#defineLD_PLL_MP3_1B0x18

#defineLD_PLL_MP3_1D(uint8)(((90.0*((LD_PLL_11)+1))/(CLK_IN))-1)

#defineLD_PLL_ASR_19(uint8)(CLK_IN*32.0/(LD_PLL_11+1)-0.51)

#defineLD_PLL_ASR_1B0x48

#defineLD_PLL_ASR_1D0x1f

//LDchipfixedvalues.

#defineRESUM_OF_MUSIC0x01

#defineCAUSE_MP3_SONG_END0x20

#defineMASK_INT_SYNC0x10

#defineMASK_INT_FIFO0x04

#defineMASK_AFIFO_INT0x01

#defineMASK_FIFO_STATUS_AFULL0x08

//函数声明

voidLD_Reset();

voidLD_Init_Common();

voidLD_Init_ASR();

voidLD_AsrStart();

uint8LD_AsrRun();

uint8LD_AsrAddFixed();

uint8LD_GetResult();

externuint8idatanLD_Mode;

//识别码客户修改处

#defineCODE_DMCS1

#defineCODE_KFBYZ2

#defineCODE_JCWB3

#defineMIC_VOL0x43//咪头增益

#endif

REG_WR.H

/************************************************************************************/

//版权所有:

Copyright(c)2005-2010ICRouteINC.

/************************************************************************************/

#ifndefREG_RW_H

#defineREG_RW_H

//读写模式选择,开启定义

#defineHARD_PARA_PORT

//#defineSOFT_PARA_PORT//软件模拟并行读写

//#defineSOFT_SPI_PORT//软件模拟SPI读写

//驱动端口定义

sbitLD_MODE=P3^5;/*读写模式选择*/

sbitRSTB=P3^3;/*复位端口*/

sbitCSB=P2^1;/*模块片选端口*/

//函数声明

voidLD_WriteReg(unsignedcharaddress,unsignedchardataout);

unsignedcharLD_ReadReg(unsignedcharaddress);

#endif

LDChip.c

/************************************************************************************

**CPU:

STC89LE52

**晶振:

22.1184MHZ

**波特率:

9600bit/S

**配套产品信息:

LD3320非特定语音模块开发板

**

**版本:

zds0.0.3

**修改日期:

2011.12.10

/************************************************************************************/

#include"config.h"

externvoiddelay(unsignedlonguldata);

uint8idataucRegVal;

externuint8idatanAsrStatus;

voidProcessInt0(void);

/************************************************************************

功能描述:

复位LD模块

入口参数:

none

返回值:

none

其他说明:

none

**************************************************************************/

voidLD_Reset()

{

RSTB=1;

delay

(1);

RSTB=0;

delay

(1);

RSTB=1;

delay

(1);

CSB=0;

delay

(1);

CSB=1;

delay

(1);

}

/************************************************************************

功能描述:

LD模块命令初始化

入口参数:

none

返回值:

none

其他说明:

该函数为出厂配置,一般不需要修改;

有兴趣的客户可对照开发手册根据需要自行修改。

**************************************************************************/

voidLD_Init_Common()

{

LD_ReadReg(0x06);

LD_WriteReg(0x17,0x35);

delay(10);

LD_ReadReg(0x06);

LD_WriteReg(0x89,0x03);

delay(5);

LD_WriteReg(0xCF,0x43);

delay(5);

LD_WriteReg(0xCB,0x02);

/*PLLsetting*/

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(10);

LD_WriteReg(0xCD,0x04);

LD_WriteReg(0x17,0x4c);

delay(5);

LD_WriteReg(0xB9,0x00);

LD_WriteReg(0xCF,0x4F);

LD_WriteReg(0x6F,0xFF);

}

/************************************************************************

功能描述:

LD模块ASR功能初始化

入口参数:

none

返回值:

none

其他说明:

该函数为出厂配置,一般不需要修改;

有兴趣的客户可对照开发手册根据需要自行修改。

**************************************************************************/

voidLD_Init_ASR()

{

LD_Init_Common();

LD_WriteReg(0xBD,0x00);

LD_WriteReg(0x17,0x48);

delay(10);

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

(1);

}

/************************************************************************

功能描述:

中断处理函数

入口参数:

none

返回值:

none

其他说明:

当LD模块接收到音频信号时,将进入该函数,

判断识别是否有结果,如果没有从新配置寄

存器准备下一次的识别。

**************************************************************************/

voidProcessInt0(void)

{

uint8nAsrResCount=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)/*识别成功*/

{

nAsrResCount=LD_ReadReg(0xba);

if(nAsrResCount>0&&nAsrResCount<=4)

{

nAsrStatus=LD_ASR_FOUNDOK;

}

else

{

nAsrStatus=LD_ASR_FOUNDZERO;

}

}/*没有识别结果*/

else

{

nAsrStatus=LD_ASR_FOUNDZERO;

}

LD_WriteReg(0x2b,0);

LD_WriteReg(0x1C,0);/*写0:

ADC不可用*/

LD_WriteReg(0x29,0);

LD_WriteReg(0x02,0);

LD_WriteReg(0x2B,0);

LD_WriteReg(0xBA,0);

LD_WriteReg(0xBC,0);

LD_WriteReg(0x08,1);/*清除FIFO_DATA*/

LD_WriteReg(0x08,0);/*清除FIFO_DATA后再次写0*/

EX0=1;

}

/************************************************************************

功能描述:

检测LD模块是否空闲

入口参数:

none

返回值:

flag:

1->空闲

其他说明:

none

**************************************************************************/

uint8LD_Check_ASRBusyFlag_b2()

{

uint8j;

uint8flag=0;

for(j=0;j<10;j++)

{

if(LD_ReadReg(0xb2)==0x21)

{

flag=1;

break;

}

delay(10);

}

returnflag;

}

/************************************************************************

功能描述:

启动ASR

入口参数:

none

返回值:

none

其他说明:

none

**************************************************************************/

voidLD_AsrStart()

{

LD_Init_ASR();

}

/************************************************************************

功能描述:

运行ASR

入口参数:

none

返回值:

1:

启动成功

其他说明:

none

**************************************************************************/

uint8LD_AsrRun()

{

EX0=0;

LD_WriteReg(0x35,MIC_VOL);

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)

{

return0;

}

//LD_WriteReg(0xB6,0xa);//识别时间1S

//LD_WriteReg(0xB5,0x1E);//背景音段时间300ms

//LD_WriteReg(0xB8,10);//结束时间

//LD_WriteReg(0x1C,0x07);//配置双通道音频信号做为输入信号

LD_WriteReg(0x1C,0x0b);//配置麦克风做为输入信号

LD_WriteReg(0xB2,0xff);

delay

(1);

LD_WriteReg(0x37,0x06);

delay

(1);

LD_WriteReg(0x37,0x06);

delay(5);

LD_WriteReg(0x29,0x10);

LD_WriteReg(0xBD,0x00);

EX0=1;

return1;

}

/************************************************************************

功能描述:

向LD模块添加关键词

入口参数:

none

返回值:

flag:

1->添加成功

其他说明:

用户修改.

1、根据如下格式添加拼音关键词,同时注意修改sRecog和pCode数组的长度

和对应变了k的循环置。

拼音串和识别码是一一对应的。

2、开发者可以学习"语音识别芯片LD3320高阶秘籍.pdf"中

关于垃圾词语吸收错误的用法,来提供识别效果。

**************************************************************************/

uint8LD_AsrAddFixed()

{

uint8k,flag;

uint8nAsrAddLength;

uint8codesRecog[4][20]={"","kaifabanyanzheng","daimaceshi","jianchawanbi"};/*添加关键词,用户修改*/

uint8codepCode[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

(1);

LD_WriteReg(0x08,0x00);

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);

}

returnflag;

}

/************************************************************************

功能描述:

获取识别结果

入口参数:

none

返回值:

LD_ReadReg(0xc5);读取内部寄存器返回识别码。

其他说明:

none

**************************************************************************/

uint8LD_GetResult()

{

returnLD_ReadReg(0xc5);

}

REG_rw.c

/************************************************************************************

**CPU:

STC89LE52

**晶振:

22.1184MHZ

**波特率:

9600bit/S

**配套产品信息:

LD3320非特定语音模块开发板

**

**版本:

zds0.0.3

**修改日期:

2011.12.10

/************************************************************************************/

#include"config.h"

#ifdefHARD_PARA_PORT

#defineLD_INDEX_PORT(*((volatileunsignedcharxdata*)(0x8100)))

#defineLD_DATA_PORT(*((volatileunsignedcharxdata*)(0x8000)))

//评估板上MCU的A8连接到LD芯片的AD

//MCU的A14连接到LD芯片的CSB

//MCU的RD、WR连接LD芯片的RD、WR(xdata读写时自动产生低信号)

//

//0x8100的二进制是1000000100000000CSB=0AD=1

//^^

//0x8000的二进制是1000000000000000CSB=0AD=0

//^^

voidLD_WriteReg(unsignedcharaddress,unsignedchardataout)

{

LD_INDEX_PORT=address;

LD_DATA_PORT=dataout;

}

unsignedcharLD_ReadReg(unsignedcharaddress)

{

LD_INDEX_PORT=address;

return(unsignedchar)LD_DATA_PORT;

}

#endif

//软件模拟并行方式读写

#ifdefSOFT_PARA_PORT

#defineDELAY_NOP_nop_();_nop_();_nop_();_nop_();_nop_();

sbitLD_WR=P3^6;

sbitLD_RD=P3^7;

sbitLD_CS=P2^1;

sbitLD_A0=P2^0;

voidLD_WriteReg(unsignedcharaddress,unsignedchardataout)

{

P0=address;

LD_A0=1;

LD_CS=0;

LD_WR=0;

DELAY_NOP;

LD_WR=1;

LD_CS=1;

DELAY_NOP;

P0=dataout;

LD_A0=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1