ISD语音芯片SPI通讯协议.docx
- 文档编号:8787778
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:18
- 大小:17.54KB
ISD语音芯片SPI通讯协议.docx
《ISD语音芯片SPI通讯协议.docx》由会员分享,可在线阅读,更多相关《ISD语音芯片SPI通讯协议.docx(18页珍藏版)》请在冰豆网上搜索。
ISD语音芯片SPI通讯协议
#ifndef_SPIEX_
#define_SPIEX_
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//sbitled1=P1^7;
//sbitled2=P1^6;
//sbitled3=P1^5;
sbitISD_SS=P2^7;//ISD1760的slaveselect
sbitISD_SCLK=P2^6;//ISD1760的SPI接口时钟
sbitISD_MOSI=P2^5;//ISD1760的SPI接口数据输入端口
sbitISD_MISO=P2^4;//ISD1760的SPI接口的串行输出
//sbitsbnINT_1760=P3^2;//ISD1760的INT管脚//未使用//外部中断可用此脚
//sbitsbSRT_1760=P3^3;//ISD1760的RESET管脚//未使用
//-----ISD1760SPI命令-----
#defineCMD_1760_PU0x01//上电
#defineCMD_1760_STOP0x02
#defineCMD_1760_RESET0x03//复位
#defineCMD_1760_CLI_INT0x04//清中断
#defineCMD_1760_RD_STATUS0x05//读状态
#defineCMD_1760_RD_PLAY_PTR0x06
#defineCMD_1760_PD0x07//掉电
#defineCMD_1760_RD_REC_PTR0x08
#defineCMD_1760_RD_DEVID0x09//读取芯片ID
#defineCMD_1760_PLAY0x40//播放
#defineCMD_1760_REC0x41//录音
#defineCMD_1760_G_ERASE0x43
#defineCMD_1760_RD_APC0x44//读APC
#defineCMD_1760_WR_APC10x45
#defineCMD_1760_WR_APC20x65//SPI模式下写APC寄存器
#defineCMD_1760_WR_NVCFG0x46//永久写入寄存器
#defineCMD_1760_CHK_MEM0x49//检查环状存储器
#defineCMD_1760_SET_PLAY0x80//设置播放
#defineCMD_1760_SET_REC0x81
#defineCMD_1760_SET_ERASE0x82
unsignedcharbdataSR0_L;
sbitbINT=SR0_L^4;
sbitbEOM=SR0_L^3;
sbitbPU=SR0_L^2;
sbitbFULL=SR0_L^1;
sbitbCMD_ERR=SR0_L^0;
unsignedcharbdataSR0_H;
unsignedcharbdataSR1;
sbitbREC=SR1^3;
sbitbPLAY=SR1^2;
sbitbERASE=SR1^1;
sbitbRDY=SR1^0;
unsignedcharID,APCL=0,APCH=0;
uintcodeaSpeech_Addr[32]
={0x0010,0x001ef,0x001B,0x0025,0x0026,0x0030,0x0031,0x003B,0x003C,0x0046,//1
0x0047,0x0051,0x0052,0x005C,0x005D,0x0067,0x0068,0x0072,0x0073,0x007D,//2
0x007E,0x0088,0x0089,0x0093,0x0094,0x009E,0x009F,0x00A9,0x00AA,0x00B4,//3
0x00B5,0x00C3};
//voidDelayX1ms(uinta);
//ISD1760
ucharISD_SendByte(ucharBUF_ISD);
voidISD_Reset(void);
voidISD_PU(void);
voidISD_Rd_Status(void);
voidISD_ClrInt(void);
voidISD_CHK_MEM(void);
voidISD_WR_APC2(ucharVolume);
voidISD_WR_NVCFG(void);
voidISD_RDAPC(void);
voidISD_PD(void);
ucharISD_RDDevID(void);
voidISD_Init(void);
voidISD_PLAY(void);
/*
#defineRIGHT1
#defineERROR0
//#defineSET_BIT(x,y)(x|=(1< //#defineCLR_BIT(x,y)(x&=~(1< //#defineGET_BIT(x,y)(x&(1< /*----------------------------------------------------------------------- //SR0_L01234567 //CMD_ErrFULLPUEOMINTA0A1A2 //SR0_H89101112131415 //A3A4A5A6A7A8A9A10 //SR101234567 //RDYERASEPLAYRECSE1SE2SE3SE4 //APC01234567 //VOL0VOL1VOL2MON_INMIX_INSE_EDITSPI_FTAUD/AUX(AUD线路输出,AUX直接驱动喇叭) //APC891011 //PWM_SPKPU_AOVALERTEOM_EN(在SETPLAY模式下,置1遇到EOM则结束,否则继续播放) ----------------------------------------------------------------------------*/ /* sbitINT_1700=SR0_L^4; sbitEOM=SR0_L^3; sbitPU_1700=SR0_L^2; sbitFULL=SR0_L^1; sbitCMD_ERR=SR0_L^0; sbitREC_1700=SR1^3; sbitPLAY_1700=SR1^2; sbitERASE_1700=SR1^1; sbitRDY=SR1^0; */ voidISD_GetToneAdd(ucharcNum,uint*ipStartAdd,uint*ipEndAdd); //取出当前语音的首末地址 voidISD_SetPLAY(ucharcNum); /********************************************************************************************* *函数原型: voidISD_Reset(void) *功能: 芯片初始化 ************************************************************************************************/ voidISD_Reset(void) { ISD_SendByte(CMD_1760_RESET|0x10); ISD_SendByte(0x00); ISD_SS=1; do ISD_Rd_Status(); while((SR0_L&0x01)||(! (SR1&0x01))); //DelayX1ms(10); } /******************************************************************** *函数原型: voidISD_PU(void) *功能: 上电 ***********************************************************************/ voidISD_PU(void) { ISD_SendByte(CMD_1760_PU|0x10); ISD_SendByte(0x00); ISD_SS=1; //led1=ISD_SS; delay50ms(); do ISD_Rd_Status(); while((SR0_L&0x01)||(! (SR1&0x01))); } /***************************************************************************** *函数原型: voidISD_Rd_Status(void) *功能: 读取状态寄存器和当前地址 ***********************************************************************************/ voidISD_Rd_Status(void) { ISD_SendByte(CMD_1760_RD_STATUS); ISD_SendByte(0x00); ISD_SendByte(0x00); ISD_SS=1; //DelayX1ms(10); SR0_L=ISD_SendByte(CMD_1760_RD_STATUS); SR0_H=ISD_SendByte(0x00); SR1=ISD_SendByte(0x00); ISD_SS=1; //DelayX1ms(10); } /*************************************************************************************** *函数原型: voidISD_ClrInt(void) *功能: 消除中断和EOM位 ***************************************************************************/ voidISD_ClrInt(void) { ISD_SendByte(CMD_1760_CLI_INT|0x10); ISD_SendByte(0x00); ISD_SS=1; //led1=ISD_SS; delay50ms(); //DelayX1ms(10); } /*************************************************************************************** *函数原型: voidISD_CHK_MEM(void) *功能: 检查环形存储结构 ******************************************************************************/ voidISD_CHK_MEM(void) { ISD_SendByte(CMD_1760_CHK_MEM|0x10); ISD_SendByte(0x00); ISD_SS=1; //led1=ISD_SS; //DelayX1ms(10); } /************************************************************************************** *函数原型: voidISD_WR_APC2(ucharVolume) *功能: 将 D0>的数据写进APC,并由 D0>来调节音量 **************************************************************************************/ voidISD_WR_APC2(ucharVolume) { ISD_SendByte(CMD_1760_WR_APC2|0x10); ISD_SendByte(Volume);//后3位为音量 ISD_SendByte(0x08);//0x04EOM=0,VALERT=1,0x0CEOM=1 ISD_SS=1; //led1=ISD_SS; delay50ms(); ISD_WR_NVCFG();//永久写入寄存器//此程序正在放音要调整音量时不要添加! ! } /********************************************************************************** *函数原型: voidISD_WR_NVCFG(void) *功能: 将APC的内容写到NVCFG中 **********************************************************************************/ voidISD_WR_NVCFG(void) { ISD_SendByte(CMD_1760_WR_NVCFG|0x10); ISD_SendByte(0x00); ISD_SS=1; //led1=ISD_SS; delay50ms(); } /***************************************************************************************** *函数原型: voidISD_RDAPC(void) *功能: 读取状态寄存器,当前地址和APC寄存器 ************************************************************************************/ voidISD_RDAPC(void) { ISD_SendByte(CMD_1760_RD_APC|0x10); ISD_SendByte(0x00); ISD_SendByte(0x00); ISD_SendByte(0x00); ISD_SS=1; do ISD_Rd_Status(); while((SR0_L&0x01)||(! (SR1&0x01))); delay10ms(); SR0_L=ISD_SendByte(CMD_1760_RD_APC); SR0_H=ISD_SendByte(0x00); APCL=ISD_SendByte(0x00); APCH=ISD_SendByte(0x00); ISD_SS=1; delay10ms(); do ISD_Rd_Status(); while((SR0_L&0x01)||(! (SR1&0x01))); } /************************************************************************************* *函数原型: voidISD_PD(void) *功能: 掉电 **************************************************************************************/ /*voidISD_PD(void) { ISD_SendByte(CMD_1760_PD); ISD_SendByte(0x00); ISD_SS=1; //DelayX1ms(5); }*/ /****************************************************************************** *函数原型: ucharISD_SendByte(ucharBUF_ISD) *功能: 发送数据 ***********************************************************************************/ ucharISD_SendByte(ucharBUF_ISD) { uchari,dat=BUF_ISD; ISD_SCLK=1; ISD_SS=1; ISD_MOSI=0; ISD_SS=0; for(i=0;i<8;i++) { ISD_SCLK=0; _nop_(); _nop_(); if(dat&0x01) { ISD_MOSI=1; } else { ISD_MOSI=0; } dat>>=1; _nop_(); ISD_SCLK=1; _nop_(); _nop_(); /*ISD_SCLK=1; _nop_(); _nop_(); ISD_SCLK=0;*/ if(ISD_MISO==1) { dat|=0x80; } ISD_SCLK=1; _nop_(); _nop_(); } ISD_MOSI=0; _nop_(); return(dat); } /****************************************************************************************** *函数原型: ucharISD_RDDevID(void) *功能: 读取器件ID **********************************************************************************************/ ucharISD_RDDevID(void) { ISD_SendByte(CMD_1760_RD_DEVID); ISD_SendByte(0x00); ISD_SendByte(0x00); ISD_SS=1; delay10ms(); SR0_L=ISD_SendByte(CMD_1760_RD_DEVID); SR0_H=ISD_SendByte(0x00); ID=ISD_SendByte(0x00); ISD_SS=1; delay10ms(); return(ID); } /************************************************************************************************ *函数原型: voidISD_Init(void) *功能: 器件初始化 ***********************************************************************************************/ voidISD_Init(void)//初始化 { ISD_Reset();//复位 ISD_PU();//上电指令 //delay50ms(); //SBUF=ISD_RDDevID();//读取芯片ID,----1760为0xA0 ISD_ClrInt();//清中断 ISD_CHK_MEM();//检查环状存储器存储地址是否首尾相连 //改变1700内部存储单元或是内部寄存器的指令前, //都要加上这个指令。 ISD_WR_APC2(0x48);//写APC寄存器,后3位为音量,此设为最大,0xA7为最小F0 delay50ms(); //ISD_RDAPC();//读APC寄存器 //DelayX1ms(25); } /************************************************************************************************** *函数原型: voidISD_GetToneAdd(charcNum,uint*ipStartAdd,uint*ipEndAdd) *功能: 获取当前放音地址 ******************************************************************************************************/ voidISD_GetToneAdd(charcNum,uint*ipStartAdd,uint*ipEndAdd) { *ipStartAdd=aSpeech_Addr[cNum*2]; *ipEndAdd=aSpeech_Addr[cNum*2+1]; } /******************************************************************************************************* *函数原型: voidISD_SetPLAY(ucharcNum) *功能: 定点播放 *****************************************************************************************************/ voidISD_SetPLAY(ucharcNum) { uintAdd_ST,Add_ED; ucharAdd_ST_H,Add_ST_L,Add_ED_H,Add_ED_L; //ISD_Init();//初始化 //ISD_PU(); //ISD_ClrInt();//清中断 ISD_GetToneAdd(cNum,&Add_ST,&Add_ED);//取出当前语音的首末地址 Add_ST_L=(uchar)(Add_ST&0x00ff); Add_ST_H=(uchar)((Add_ST>>8)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ISD 语音 芯片 SPI 通讯 协议