ISD1730语音芯片编程c.docx
- 文档编号:25319062
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:14
- 大小:16.74KB
ISD1730语音芯片编程c.docx
《ISD1730语音芯片编程c.docx》由会员分享,可在线阅读,更多相关《ISD1730语音芯片编程c.docx(14页珍藏版)》请在冰豆网上搜索。
ISD1730语音芯片编程c
ISD1730语音芯片编程c
ISD1730语音芯片编程c
2010-07-1121:
22
自己编写的芯片头文件:
#ifndef__SPI_H__
#define__SPI_H__
#include"reg52.h"
//-------------------------------------------------------------------
--------------------
//命令定义
#definePU0x01//17xx上电
#defineSTOP0x02//停止当前操作
#defineRESET0x03//芯片复位
#defineCLR_INT0x04//清除EOM标志和中断信号#defineRD_STATUS0x05//返回状态寄存器内容#defineRD_PLAY_PTR0x06//在1,2字节返回状态寄存器信息,2,3字节返回放音指针
#definePD0x07//芯片下电
#defineRD_REC_PTR0x08//在1,2字节返回状态寄存器信息,2,3字节返回录音指针
#defineDEVID0x09//读取芯片ID号码
#definePLAY0x40//从当前地址放音
#defineREC0x41//从当前地址录音
#defineERASE0x42//擦除当前语音段
#defineG_ERASE0x43//擦除芯片所有语音
#defineRD_APC0x44//返回状态寄存器信息在1,2字节,APC寄存器信息在3字节
#defineWR_APC10x45//将 D0>写入APC寄存器#defineWR_APC20x65//将 D0>写入APC寄存器,并由 D0>位控制音量 #defineWR_NVCFG0x46//将APC内容写入NVCFG#defineLD_NVCFG0x47//将NVCFG内容写入APC#defineFWD0x48//将放音指针指向下一段语音地址处#defineCHK_MEM0x49//检查环状存储体系 #defineEXTCLK0x4a//外部时钟使能 #defineSET_PLAY0x80//从起始地址 S0>放音到结束地址 E0>结束 #defineSET_REC0x81//从起始地址 S0>录音到结束地址 E0>结束 #defineSET_ERASE0x82//从起始地址 S0>擦除到结束地址 E0>结束 #defineucharunsignedchar #defineuintunsignedint //------------------------------------------------------------------- -------------------- //SPI与MCU引脚连接 sbitISD1730_MISO=P0^0;sbitISD1730_MOSI=P0^1;sbitISD1730_SCLK=P0^2;sbitISD1730_SS=P0^3;#defineENISD1730_SSISD1730_SS=0#defineDISENISD1730_SSISD1730_SS=1#defineISD1730_MISO_LISD1730_MISO=0#defineISD1730_MISO_HISD1730_MISO=1#defineISD1730_MOSI_LISD1730_MOSI=0#defineISD1730_MOSI_HISD1730_MOSI=1#defineISD1730_SCLK_LISD1730_SCLK=0#defineISD1730_SCLK_HISD1730_SCLK=1//------------------------------------------------------------------- -------------------- //函数声明 voidisd1730_delay(); voiddelay10ms(unsignedintn); unsignedcharISD1730_Spio(unsignedchardat);voidISD1730_PU(void); voidISD1730_Set_Play(unsignedcharVOICE_NUM);voidISD1730_PLAY(unsignedcharvoice_name);voidISD1730_Write_APC2(void); #endif 芯片的源文件: #include"SPI.h" unsignedcharSR0H;//bdata unsignedcharSR0L;//bdata unsignedcharSR1;//bdata unsignedcharSR2; //程序中的延时都屏蔽了也可以运行/******************************************************************** ****** *函数原型: voidGetToneAdd(ucharcNum,Uint*ipStartAdd,Uint* ipEndAdd); *功能: 取出当前语音的首末地址********************************************************************* *****/ voidGetToneAdd(unsignedcharNUM,unsignedint*ipStartAdd,unsigned int*ipEndAdd) { unsignedint caToneAdd[]={0x0010,0x00ff/*0x0015,0x0016,0x001c,0x001d,0x0023,0x0024 0x002a,0x002b,0x0030, 0x0031,0x0035,0x0036,0x003b,0x003c,0X0041,0x0042,0x0047,0X0048,0x004d, 0x004e,0x0053,0x0054,0x0059,0x005a,0x005f*/}; *ipStartAdd=caToneAdd[NUM*2]; *ipEndAdd=caToneAdd[NUM*2+1]; } /*------------------------------------------------------------------- -------------------- 名称: isd1730_delay 功能: 7us延时 输入: 无 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ /*staticvoidisd1730_delay(void) { unsignedchari; for(i=0;i<7;i++) { ; } }*/ /*------------------------------------------------------------------- -------------------- 名称: delay10ms 功能: 延时n*1毫秒 输入: n 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ /*staticvoiddelay10ms(unsignedintn){ unsignedinti,j; for(i=0;i { for(j=0;j<1000;j++); } }*/ /*------------------------------------------------------------------- -------------------- 名称: ISD1730_Spio 功能: ISD1730SPI驱动函数 输入: dat: 要传送到ISD1730的数据 输出: 无 返回: receive: 接收的数据 备注: 无 --------------------------------------------------------------------- ------------------*/ staticunsignedcharISD1730_Spio(unsignedchardat){ unsignedchari; unsignedcharrecevice; ISD1730_SCLK_L;//先将SCLK清0 for(i=0;i<8;i++)//将dat字节的8个位数据一一送到MOSI线上 { if((dat&0x01)==0x01) { ISD1730_MOSI_H;//数据位是1 } else { ISD1730_MOSI_L;//数据位是0 } dat>>=1;//要写入的数据左移一位 //isd1730_delay();//稍微延时7us ISD1730_SCLK_H;//将要发送的数据位送到MOSI上后,置SCLK为 1,上升沿时将当前MOSI上的数据传到ISD1730 //isd1730_delay();//下面开始接收从MISO发出的数据位 recevice>>=1; // ISD1730_MISO_H; if(ISD1730_MISO==1)//SPI接口的串行输出。 ISD1700在SCLK下降沿之前的半个周期将数据 //放置在MISO端。 数据在SCLK的下降沿时移出 { recevice|=0x80; } ISD1730_SCLK_L; } returnrecevice; } /*------------------------------------------------------------------- -------------------- 名称: ISD1730_PU 功能: ISD1730上电操作 输入: 无 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ staticvoidISD1730_PU(void) { //------------------------------------------------------------------- -------------------- //SPI初始条件 DISENISD1730_SS; ISD1730_SCLK_H; ISD1730_MOSI_L; ENISD1730_SS; //------------------------------------------------------------------- -------------------- //发送命令 SR0L=ISD1730_Spio(PU);//发送命令字节 SR0H=ISD1730_Spio(0x00);//发送数据字节1 DISENISD1730_SS; //delay10ms (2); } /*------------------------------------------------------------------- -------------------- 名称: ISD1730_Write_APC2 功能: 写入APC参数 输入: 无 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ voidISD1730_Write_APC2(void) { //------------------------------------------------------------------- -------------------- //SPI初始条件 DISENISD1730_SS; ISD1730_SCLK_H; ISD1730_MOSI_L; ENISD1730_SS; //------------------------------------------------------------------- -------------------- //发送命令 SR0L=ISD1730_Spio(WR_APC2);//发送命令字节SR0H=ISD1730_Spio(0x40);//发送数据字节1SR1=ISD1730_Spio(0x0c);//发送数据字节2DISENISD1730_SS; //delay10ms (2); } /*------------------------------------------------------------------- -------------------- 名称: 功能: 输入: 输出: 返回: 备注: --------------------------------------------------------------------- ------------------*/ voidISD1730_Set_Play(unsignedcharVOICE_NUM){ unsignedintAdd_ST,Add_ED; unsignedcharAdd_ST_H,Add_ST_L,Add_ED_H,Add_ED_L; GetToneAdd(VOICE_NUM,&Add_ST,&Add_ED); Add_ST_L=(unsignedchar)(Add_ST&0x00ff); Add_ST_H=(unsignedchar)((Add_ST>>8)&0x00ff); Add_ED_L=(unsignedchar)(Add_ED&0x00ff); Add_ED_H=(unsignedchar)((Add_ED>>8)&0x00ff);//------------------------------------------------------------------- -------------------- //SPI初始条件 DISENISD1730_SS; ISD1730_SCLK_H; ISD1730_MOSI_L; ENISD1730_SS; //------------------------------------------------------------------- -------------------- //发送命令 SR0L=ISD1730_Spio(SET_PLAY);//发送命令字节SR0H=ISD1730_Spio(0x00);//发送数据字节1SR1=ISD1730_Spio(Add_ST_L);//发送数据字节2,放音起始地址低8位 S0> SR2=ISD1730_Spio(Add_ST_H);//发送数据字节3,放音起邕地址高3位 S8>,ISD1730不用 SR0H=ISD1730_Spio(Add_ED_L);//发送数据字节4,放音结束地址低8位 E0> SR0H=ISD1730_Spio(Add_ED_H);//发送数据字节5,放音结束地址低8位 E8>,ISD1730不用 SR0H=ISD1730_Spio(0x00);//发送数据字节6 DISENISD1730_SS; //delay10ms (2); } /*------------------------------------------------------------------- -------------------- 名称: ISD1730_PD 功能: ISD1730下电命令 输入: 无 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ voidISD1730_PD(void) { //------------------------------------------------------------------- -------------------- //SPI初始条件 DISENISD1730_SS; ISD1730_SCLK_H; ISD1730_MOSI_L; ENISD1730_SS; //------------------------------------------------------------------- -------------------- //发送命令 SR0L=ISD1730_Spio(PD);//发送命令字节SR0H=ISD1730_Spio(0x00);//发送数据字节1DISENISD1730_SS; //delay10ms (2); } /*------------------------------------------------------------------- -------------------- 名称: ISD1720_PLAY 功能: 播放指定的语音信息 输入: voice_num,语音索引编号 输出: 无 返回: 无 备注: 无 --------------------------------------------------------------------- ------------------*/ voidISD1730_PLAY(unsignedcharvoice_name){ ISD1730_PU(); //delay10ms(5); ISD1730_Set_Play(voice_name); //delay10ms(350); ISD1730_PD(); //delay10ms(15); } //------------------------------------------------------------------- -------------------- //程序结束 //------------------------------------------------------------------- -------------------- 主函数所在的C文件: #include"reg52.h" #include"SPI.h" #include"intrins.h" /**********************************延时********************/ voiddelay(ucharms) {//延时子程序 uchari; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } /**********************************主函数********************/ voidmain() { ISD1730_Write_APC2(); ISD1730_PLAY(0); delay(500); while (1); } 这个是能用的一个工程,电路就是芯片资料中的独立按键的那个图,把SPI的四 条线和单片机相连就可了,先录音。 在SCLK端接一个上拉电阻。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ISD1730 语音 芯片 编程