#include "main.h"
uint8 nLD_Mode = LD_MODE_IDLE; // 用来记录当前是在进行ASR识别还是在播放MP3
unsigned char ucRegVal;
unsigned char ucHighInt;
unsigned char ucLowInt;
/*****************************************
函数功能 ;LD3320外部中断初始化P1_6
入口参数:无
出口参数:无
******************************************/
void LD3320_EXTERINT_Init()
{
P1SEL&=~BIT6;
P1DIR&=~BIT6;
P1REN|=BIT6;
P1OUT|=BIT6;
P1IES|=BIT6;
P1IE|=BIT6;
P1IFG&=~BIT6;
}
/*****************************************
函数功能 ;LD3320控制端口初始化
入口参数:无
出口参数:无
******************************************/
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;
}
/*****************************************
函数功能 ;LD3320 SPI通信测试
入口参数:无
出口参数:无
******************************************/
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));
}
/*****************************************
函数功能 ;LD3320写函数
入口参数:address LD3320地址
dataout LD3320数据
出口参数:无
******************************************/
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;
}
//////////////////////写数据
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;//关闭片选
}
/*****************************************
函数功能 ;LD3320读函数
入口参数:address LD3320地址
出口参数:datain LD3320读出的收据
******************************************/
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);
}
/////////////////////读数据
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;
}
/*****************************************
函数功能 ;LD3320复位函数
入口参数:无
出口参数:无
******************************************/
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
入口参数: none
返 回 值: none
其他
GJZGRB
- 粉丝: 2975
- 资源: 7735
最新资源
- 开关磁阻电机多重控制策略仿真模型(MATLAB 2016b版)-包括传统控制、智能控制与离线迭代算法的综合应用(研究生自用),开关磁阻电机控制仿真(matlab 2016b版本仿真模型 自用) 模型
- Java毕业设计-基于SpringBoot+Vue的家政服务平台的设计与实现2(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的交通管理在线服务系统的开发(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的交通管理在线服务系统的开发2(附源码,部署教程).zip
- 量子力学的双层理论探索
- Java毕业设计-基于SpringBoot+Vue的家政服务平台的设计与实现(附源码,部署教程).zip
- "蛇群优化算法进阶支持机器学习算法,涵盖分类回归及时序预测新突破-高效智能算法集",蛇群优化算法优化用于分类 回归 时序预测 蛇群优化支持向量机SVM,最小二乘支持向量机LSSVM,随机森林RF,极
- Java毕业设计-基于springboot+Vue的大学生一体化服务平台的设计与实现(附源码,部署教程).zip
- Java毕业设计-基于SpringBoot+Vue的技术的美食烹饪互动平台的设计与实现(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的大学生科创项目在线管理系统的设计与实现2(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的大学生心理健康管理系统的设计与实现(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的计算机学院校友网(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的基于web的机动车号牌管理系统2(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的基于mysql的商业辅助决策系统的设计与实现(附源码,部署教程).zip
- Java毕业设计-基于springboot+Vue的大学生科创项目在线管理系统的设计与实现(附源码,部署教程).zip
- Java毕业设计-基于SpringBoot+Vue的搭建的疫情管理系统(附源码,部署教程).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈