ISD1760学习笔记附全套程序.docx

上传人:b****3 文档编号:5444105 上传时间:2022-12-16 格式:DOCX 页数:16 大小:172.97KB
下载 相关 举报
ISD1760学习笔记附全套程序.docx_第1页
第1页 / 共16页
ISD1760学习笔记附全套程序.docx_第2页
第2页 / 共16页
ISD1760学习笔记附全套程序.docx_第3页
第3页 / 共16页
ISD1760学习笔记附全套程序.docx_第4页
第4页 / 共16页
ISD1760学习笔记附全套程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ISD1760学习笔记附全套程序.docx

《ISD1760学习笔记附全套程序.docx》由会员分享,可在线阅读,更多相关《ISD1760学习笔记附全套程序.docx(16页珍藏版)》请在冰豆网上搜索。

ISD1760学习笔记附全套程序.docx

ISD1760学习笔记附全套程序

ISD1700笔记

录音完成后会形成一个EOM标志,局部擦除与放音操作遇到此标志时停止

独立按键操作

1、上电复位后,如果没有存储语音则放音指针和录音指针都指向开始地址,如果有存储的语音信息,放音指针指向最后一段语音段的开始地址,录音指针指向第一行可录音地址

2、录音:

放音指针受FWD与REC操作影响(什么影响:

当REC操作完成后,放音指针会指向新的录音首地址),录音指针在每次REC命令后更新

3、在录音之前,先在要录音的单元执行擦除命令非常重要,必须保证在录音期间的供电,否则会毁坏循环存储结构,要使芯片恢复正常工作必须执行全部擦除命令

4、放音:

两种操作模式:

第一种是下降沿触发,当play引脚检测到一个下降沿时芯片开始一次放音操作,在放音期间如果play引脚再次检测到下降沿则会停止当前放音操作,在放音期间LED会闪烁,播放完成时LED熄灭。

在此时重复播放当前语音段。

第二种播放模式是循环播放,当play引脚持续为低电平时,芯片会持续循环播放所有语音段,只有在play引脚被释放时时才会终止循环播放,并且是在当前语音段播放完成后停止,在播放期间,LED会不停的闪烁。

播放停止后,放音指针指向终止语音段的首地址。

在录音,擦除和下一曲时第一种放音模式是不合法操作将不会被执行。

5、快进:

当放音指针指向最后的语音段时,下一曲操作将会使放音指针指向第一段语音。

当芯片处于掉电状态并且放音指针没有指向最后一段语音信息时进行FWD操作使放音指针指向下一段语音;当芯片处于掉电状态并且放音指针指向最后一段语音信息时进行FWD操作使放音指针指向第一段语音;当芯片正处于播放非最后一段语音状态时其进行FWD操作将会停止当前播放,将放音指针移向下一段语音首地址,然后播放新语音段,LED全程闪烁;;当芯片正处于播放最后一段语音状态时其进行FWD操作将会停止当前播放,将放音指针移向第一段语音首地址,然后播放新语音段,LED全程闪烁。

在擦除,录音时FWD操作不合法,将不会被执行。

6、擦除:

在独立模式下,擦除单个录音段只能在放音指针指向第一段或最后一段时执行,擦除除此之外的单个语音段不被允许。

而全部擦除则会在任意语音段执行。

如果芯片处于掉电模式并且放音指针指向第一或最后一段语音执行ERASE操作会擦除当前语音段,更新放音指针指向第二段也就是存在的第一段语音段或倒数第二段语音段;当芯片处于掉电状态并且放音指针指向非首尾任意语音段时,不进行擦除操作,不改变放音指针;在播放第一或最后语音段时打断播放,擦除当前语音段,更新放音指针指向第二段也就是存在的第一段语音段或倒数第二段语音段;当播放非首尾任意语音段时,不进行任何操作。

电平触发持续2.5秒时并且保持会启动全部擦除命令并且擦除全部语音段,全部擦除操作图如下

7、当复位后,芯片将处于掉电状态,两个指针都指向最后一段语音,与第一条描述不符!

此引脚不用时连接VCC

8、音量操作,每次脉冲是音量减小一次,当减少到最小值时,将反过来增大音量,由此往复。

8阶音量控制,每次改变4分贝,每次复位都将恢复出厂设置的最大值。

SPI模式

1、与独立模式相当的命令:

播放,录音,擦除,快进,全部擦除,复位。

2、先传低位,命令字节的第四位为LED控制位,当此位是1时,LED被激活。

3、SPI命令分类:

A、优先级最高命令:

上电,掉电,停止,读状态,清除中断,读取ID,复位;

B、循环存储命令:

播放,录音,快进,擦除,全部擦除,读播放指针,读录音指针;

C、模拟配置命令:

读APC,写APC,写NVCFG,装载NVCFG,CHE_MEM;

D、内存直通操作命令:

SET_ERASE,SET_REC,SET_PLAY。

SPI指令说明

1、上电命令PU(0x01):

唤醒ISD1700芯片,使其进入空闲状态。

操作完成后RDY以及PU均置1,此操作不产生中断。

2、停止当前操作命令STOP(0x02):

此操作将停止当前操作,并且使芯片恢复到此操作之前的状态,此命令只对于PLAY,REC,SET_PLAY,SET_REC命令有效,当在ERASE,G_ERASE,SET_ERASE动作时发送此命令CMD_ERR会置1,当芯片处于空闲状态时此命令不会产生任何动作。

此命令会产生中断。

3、复位命令RESET(0x03):

终止当前操作,并且令芯片掉电,清除EOM以及INT中断标志。

4、清除中断命令CLR_INT(0x04):

命令读取芯片状态信息,并且清除EOM以及INT中断标志。

5、读状态命令RD_STATUS(0x05):

止读取芯片当前状态。

6、掉电命令PD(0x07):

止将芯片至于掉电状态。

在执行PLAY,REC,ERESE操作时发送此命令会等当前命令完成后执行掉电命令。

产生中断。

7、读取芯片ID指令(0x09):

读取芯片ID。

8、播放指令PLAY(0x40):

此操作从当前播放指针开始播放直到遇到EOM标志或接收到STOP命令。

在执行放音操作时芯片只对STOP,RESET,CLR_INT,RD_STATUS和PD命令响应。

在播放期间RDY为0,PLAY标志位为1。

此操作产生中断。

9、录音指令REC(0x41):

此操作令芯片从录音指针初开始录音,直到接收到STOP指令或存储空间满。

在录音操作期间芯片只对STOP,RESET,CLR_INT,RD_STATUS和PD命令响应。

在录音期间RDY为0,REC标志位为1。

此操作产生中断。

10、擦除指令ERASE(0x42):

放音指针指向第一段或最后一段信息时,此命令一行行擦除信息,遇到EOM标志时停止操作。

擦除操作时芯片只对RESET,CLR_INT,RD_STATUS,PD命令响应。

在擦除期间RDY为0,ERASE标志位为1。

此操作产生中断。

11、全部擦除操作G_ERASE(0x43):

芯片此操作擦除所有存储的语音信息,而不管放音指针在哪里,全部擦除期间芯片只对RESET,CLR_INT,RD_STATUS和PD命令响应。

在全部擦除期间RDY为0,ERASE标志位为1。

此操作产生中断。

12、快进操作FWD(0x48):

此操作使播放指针移向下一段语音首地址。

SPI模式下的FWD操作不会像独立模式中的FWD能打断当前播放操作执行下一曲,而只能在芯片空闲状态时发送执行。

产生中断。

13、读取放音指针指令RD_PLAY_PTR(0x06):

读取放音指针,发送此指令时确保用CHK_MEM指令使循环存储结构满足条件,否则会返回不合法数据。

14、读取录音指针指令RD_REC_PTR(0x08):

读取录音指针,发送此指令时确保用CHK_MEM指令使循环存储结构满足条件,否则会返回不合法数据。

 

15、存储空间检查命令CHK_MEM(0x49):

此命令使芯片检查语音段的排布是否符合环形存储空间协议,此命令必须在上电而且空闲状态下发送执行,当不符合时CMD_ERR位置1,当成功时放音指针指向最后一段语音,录音指针指向最近可用存储单元。

16、读取APC寄存器指令RD_APC(0x44):

读取APC寄存器内容。

17、写APC寄存器指令1,WR_APC1(0x45):

此指令将配置信息写入APC寄存器,此命令对音量的配置是从引脚VOL控制,而不是VOLBit

D0>,改变音量时需要特别注意芯片是否在执行其他动作,否则会发生意外错误。

18、写APC寄存器指令2,WR_APC1(0x65):

此指令将配置信息写入APC寄存器,此命令对音量的配置是从通过VOLBit

D0>控制音量,而不是通过VOL引脚,改变音量时需要特别注意芯片是否在执行其他动作,否则会发生意外错误。

 

19、自由播放指令SET_PLAY(0x80):

此命令从开始地址开始播放一直到结束地址,RDY位只有在芯片锁存地址后,为1,一旦此位为1,就可再次发送此命令,以此实现最小延时连续播放。

执行此命令时芯片只对SET_PLAY,STOP,RESET,CLR_INT,RD_STATUS,PD命令做出相应。

20、自由录音指令SET_REC(0x81):

此命令从开始地址开始录音一直到结束地址,RDY位只有在芯片锁存地址后,为1,一旦此位为1,就可再次发送此命令,以此实现最小延时连续录音。

执行此命令时芯片只对SET_REC,STOP,RESET,CLR_INT,RD_STATUS,PD命令做出相应。

21、自由擦除SET_ERASE(0x82):

;此命令从开始地址开始擦除一直到结束地址,RDY位在擦除过程中一直为低电平,直到擦除完成。

擦除过程中芯片只对RESET,CLR_INT,RD_STATUS,PD命令作出相应

 

SPI操作要点

开始时录音指针和放音指针都指向开头存储空间0x010。

录音完成后,录音指针指向下一个可录音单元,放音指针则随着录音片段的增加指向最新录制完成的语音片段。

播放时可接受的命令:

STOP,RESET,CLR_INT,RD_STATUS和PD,在播放期间RDY以及PLAY标志位均为0。

录音时可接受的命令:

STOP,RESET,CLR_INT,RD_STATUS和PD,在录音期间RDY以及REC标志位均为0。

擦除时可接受的命令:

RESET,CLR_INT,RD_STATUS,PD,在擦除期间RDY以及ERASE标志位均为0。

擦除时必须保证指针指向第一段或最后一段语音片段。

全部擦除时可接受的命令:

RESET,CLR_INT,RD_STATUS和PD,在全部擦除期间RDY以及ERASE标志位均为0。

快进操作只能在芯片空闲状态时发送。

读取放音指针和录音指针最好在CHK_MEM操作后进行。

CHK_MEM使录音指针指向最近可录音单元,是放音指针指向最后一个语音段。

复位,掉电,清除中断,读取状态在播放、擦除或录音时能接收执行,另外播放和录音时能够接收停止指令。

停止命令只有对放音、录音、自由放音和自由录音有效。

中断是一个操作完成的标志,在下一个命令发送之前必须将中断清零。

产生中断的命令:

 

放音录音下一曲擦除全部擦除更新指针CHK_MEM停止复位

电路连接

Reset引脚在不用时接高电平

Anala受APC的D3位影响

MIC-/+受APC的D4位影响

SP-/+受APC的D8位影响

AUD/AUX受APC的D7位影响

AGC引脚可使失真减小到最少,将4.7μF的电容接到此引脚使其工作

ROSC引脚接一个电阻到地决定采样率

FT引脚独立按键模式低电平激活,激活后模拟信号会直接从Anlal引脚传送到SP-/+或AUX/AUD;SPI模式受APC的D6控制

INT/RDY引脚,在独立模式下位RDY功能,在SPI模式下时INT功能,当一个SPI命令完成后为低电平,清除中断后为高电平。

 

/*-------------------------------------------------------.C.H文件----------------------------------------------*/

//H文件

 

#ifndef__1760_H

#define__1760_H

/*----------------------ISD1700SPI通信引脚位定义------------------*/

sbitSS=P1^3;//芯片片选引脚,低电平有效

sbitSCK=P1^4;//时钟线

sbitMOSI=P1^5;//主入从出数据引脚

sbitMISO=P1^6;//主出从入数据引脚

uint8SPI_Senddata(uint8dat);

voidISD_PU(void);

voidISD_STOP(void);

voidISD_RESET(void);

voidISD_CLR_INT(void);

voidRead_Status(void);

voidISD_PD(void);

uint8ISD_DEVID(void);

voidISD_PLAY(void);

voidISD_REC(void);

voidISD_ERASE(void);

voidISD_G_ERASE(void);

voidISD_FWD(void);

voidISD_RD_PLAY_PTR(void);

voidISD_RD_REC_PTR(void);

voidISD_CHK_MEM(void);

voidISD_WR_APC1(uint8apcdatl,uint8apcdath);

voidISD_WR_APC2(uint8apcdatl,uint8apcdath);

voidISD_SET_PLAY(uint8s_addl,uint8s_addh,uint8e_addl,uint8e_addh);

voidISD_SET_REC(uint8s_addl,uint8s_addh,uint8e_addl,uint8e_addh);

voidISD_SET_ERASE(uint8s_addl,uint8s_addh,uint8e_addl,uint8e_addh);

voidISD_Init(void);

#endif

 

//C文件

#include"main.h"

#include"1760.h"

#include"delay.h"

#include"1602.h"

codeuint8message[]="SystemInit";

//SPI数据传送函数,必须保证外部SS=1

//但是不能在此函数中令SS=1

//因为命令为多字节命令,发送命令时必须保证SS=0

uint8SPI_Senddata(uint8dat)

{

uint8i,j,SPI_Buf=dat;

for(i=0;i<8;i++)

{

SCK=0;

for(j=0;j<4;j++);

if(SPI_Buf&0x01)//先移出低位

MOSI=1;

else

MOSI=0;

SPI_Buf>>=1;

if(MISO)

SPI_Buf|=0x80;

SCK=1;

for(j=0;j<4;j++);

}

returnSPI_Buf;

}

 

/*********************************************************************************************************************/

/*********************************************************************************************************************/

/*********************************************************************************************************************/

 

//上电

voidISD_PU(void)

{

SS=0;

SR0_L=SPI_Senddata(0X01);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=0;

}

//停止当前操作

voidISD_STOP(void)

{

SS=0;

SR0_L=SPI_Senddata(0X02);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//复位

voidISD_RESET(void)

{

SS=0;

SR0_L=SPI_Senddata(0X03);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//清除中断

voidISD_CLR_INT(void)

{

SS=0;

SR0_L=SPI_Senddata(0X04);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//读取状态寄存器

voidRead_Status(void)

{

SS=0;

SR0_L=SPI_Senddata(0X05);

SR0_H=SPI_Senddata(0X00);

SR1=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//掉电

voidISD_PD(void)

{

SS=0;

SR0_L=SPI_Senddata(0X07);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//读取ID

uint8ISD_DEVID(void)

{

uint8ID;

SS=0;

SR0_L=SPI_Senddata(0X09);

SR0_H=SPI_Senddata(0X00);

ID=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

returnID;

}

 

/*********************************************************************************************************************/

/*********************************************************************************************************************/

/*********************************************************************************************************************/

 

//放音

voidISD_PLAY(void)

{

SS=0;

SR0_L=SPI_Senddata(0X40);

SR0_H=SPI_Senddata(0X00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//录音

voidISD_REC(void)

{

SS=0;

SR0_L=SPI_Senddata(0x41);

SR0_H=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//局部擦除

voidISD_ERASE(void)

{

SS=0;

SR0_L=SPI_Senddata(0x42);

SR0_H=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//全部擦除

voidISD_G_ERASE(void)

{

SS=0;

SR0_L=SPI_Senddata(0x43);

SR0_H=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//下一曲

voidISD_FWD(void)

{

SS=0;

SR0_L=SPI_Senddata(0x48);

SR0_H=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//读取放音指针

voidISD_RD_PLAY_PTR(void)

{

SS=0;

SR0_L=SPI_Senddata(0x06);

SR0_H=SPI_Senddata(0x00);

PlayAddL=SPI_Senddata(0x00);

PlayAddH=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//读取录音指针

voidISD_RD_REC_PTR(void)

{

SS=0;

SR0_L=SPI_Senddata(0x08);

SR0_H=SPI_Senddata(0x00);

RecAddL=SPI_Senddata(0x00);

RecAddH=SPI_Senddata(0x00);

MOSI=0;//保证MOSI引脚在输入SPI命令之前为低电平

SS=1;

}

//存储空间检查函数

voidISD_CHK_MEM(void)

{

SS=0;

SPI_Senddata(0x49);

SPI_Senddata(0x00);

MOSI=0;

SS=1;

}

//ISD1760配置函数1

voidISD_WR_APC1(uint8apcdatl,uint8apcdath)

{

SS=0;

SPI_Senddata(0x45);

SPI_Senddata(apcdatl);

SPI_Senddata(apcdath);

SS=1;

}

 

//ISD1760配置函数2

voidISD_WR_APC2(uint8apcdatl,uint8apcdath)

{

SS=0;

SPI_Senddata(0x65);

SPI_Senddata(apcdatl);

SPI_Senddata(apcdath);

SS=1;

}

 

/*********************************************************************************************************************/

/*********************************************************************************************************************/

/*****************************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1