嵌入式.docx
- 文档编号:9292222
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:23.04KB
嵌入式.docx
《嵌入式.docx》由会员分享,可在线阅读,更多相关《嵌入式.docx(33页珍藏版)》请在冰豆网上搜索。
嵌入式
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式