ISD1760语音芯片使用总结

更新时间:2023-10-13 11:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ISD1760语音芯片SPI使用总结

注意:此资料参照前人总结,经自己细心成功调试程序后,修改的文档,做了细致的补充。

一 、该语音芯片的使用要仔细分析英文PDF的资料,电路可按中青世纪论坛上面所给的电路搭建,也可按英文PDF后面所画的电路图焊接。本芯片使用不单纯是一个放音电路,还含有其他的控制,因此程序要仔细参考。

二、试验中采用的是ISD1760语音芯片,采样率为8K时,一共能播放60S的语音,最大地址为0x1EF,录音实际地址为0x10~0x1EF,(千万不要以为开始地址为:S0—S10,结束地址为:E0—E10,这样算下来地址就是:0X7ff=2047,从0—2047为2048个字节,采样频率为8K即:每个字节就是125ms,125 X 2048个字节=256s,可是,实际的录音时长为60S,所以是错误的)则最大地址为:0x1EF-0x10=0x1DF=479。479+1=480个字节;480*125MS =60S,也就是说8K采样率时每1个地址最小语音长度为125MS,因此如果知道单个语音的长度,暂时无编程器的时候,也可自己推断每个语音所占的地址长度。

三、SPI操作时要严格遵守PDF上所给的各项操作,这里不列出。暂时仅给出试验中遇到的所有问题并如何解决的。

1, 一开始本实验是自己用通用板自己照电路搭建的平台,此电路正确与否可把PLAY管腿和地短路,如果芯片有语音并且电路功放及外围电路正确的话,此时芯片就会把所有语音全都循环读一遍。接下来把4个SPI口与单片机接通,尝试软件控制。主循环中可设置一个连续播放的程序,上电就循环放音。放音程序没错的话第一步便成功了!这期间我遇到的问题主要有放不出音,读音混乱,有杂音。如果放不出音,先检查电路,程序放出声音应该没出现什么问题。

本芯片设置的APC值为0xA0和0x04(第三位设置声音大小),具体对应功能参见中文PDF。

在SPI协议总叙述中有一句错误:如图所示

状态寄存器返回值表在PDF中标志的不太明显,标出是错误的。如下:

附件:源代码 .H头文件:

#ifndef __ISD17XX_H__ #define __ISD17XX_H__

//--------------------------------------------------------------------------------------- //命令定义

#define PU 0x01 //17xx上电 #define STOP 0x02 //停止当前操作 #define RESET 0x03 //芯片复位

#define CLR_INT 0x04 //清除EOM标志和中断信号 #define RD_STATUS 0x05 //返回状态寄存器内容

#define RD_PLAY_PTR 0x06 //在1,2字节返回状态寄存器信息,2,3字节返回放音指针

#define PD 0x07 //芯片下电

#define RD_REC_PTR 0x08 //在1,2字节返回状态寄存器信息,2,3字节返回录音指针

#define DEVID 0x09 //读取芯片ID号码 #define PLAY 0x40 //从当前地址放音 #define REC 0x41 //从当前地址录音 #define ERASE 0x42 //擦除当前语音段 #define G_ERASE 0x43 //擦除芯片所有语音

#define RD_APC 0x44 //返回状态寄存器信息在1,2字节,APC寄存器信息在3字节 #define WR_APC1 0x45 //将 写入APC寄存器

#define WR_APC2 0x65 //将 写入APC寄存器,并由 位控制音量 #define WR_NVCFG 0x46 //将APC内容写入NVCFG #define LD_NVCFG 0x47 //将NVCFG内容写入APC #define FWD 0x48 //将放音指针指向下一段语音地址处 #define CHK_MEM 0x49 //检查环状存储体系 #define EXTCLK 0x4a //外部时钟使能

#define SET_PLAY 0x80 //从起始地址 放音到结束地址 结束 #define SET_REC 0x81 //从起始地址 录音到结束地址 结束 #define SET_ERASE 0x82 //从起始地址 擦除到结束地址 结束 //经测试,该语音最大地址为:0x1ef

//--------------------------------------------------------------------------------------- //定义除命令外剩余字节个数

#define Surplus_One_BYTE 1 //定义字节个数为4 #define Surplus_Two_BYTE 2 //定义字节个数为2 #define Surplus_Three_BYTE 3 //定义字节个数为3

//--------------------------------------------------------------------------------------- //数据类型定义

本文来源:https://www.bwwdw.com/article/ch4f.html

Top