历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2018年01月08日 | ISD1760录放音程序

2018-01-08 来源:eefocus

/**************************************************************************  
*    SPI操作ISD1760 

*    SPI操作ISD1760  
**************************************************************************/  

#include  


uchar bdata SR0_L;  
uchar bdata SR0_H;  
uchar bdata SR1;  
uchar ID,APCL=0,APCH=0;  

/**************************************************************************  
*    函数原型: void ISD_Init(void);  
*    功    能: 初始化  
**************************************************************************/  
void   ISD_Init(void){  
ISD_Reset();  
do{  
ISD_PU();  
RdStatus();  
DogReset();  
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}  

SBUF=RD_DevID();//读取芯片ID,----1760为0xa0  
ClrInt();  
ISD_WR_APC2(0xaf);  
RdAPC();  
}  

/**************************************************************************  
*    函数原型: void ISD_PU(void);  
*    功    能: 空间检查  
**************************************************************************/  
void ISD_CHK_MEM(void){  
ISD_SendData(CHK_MEM);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);  
}  

/**************************************************************************  
*    函数原型: void ISD_PU(void);  
*    功    能: 上电  
**************************************************************************/  
void  ISD_PU(void){  
ISD_SendData(PU);  
ISD_SendData(0x00);  
SS=1;  
    delay_ms(50);  
}  

/**************************************************************************  
*    函数原型: void ISD_Stop(void);  
*    功    能: 停止  
**************************************************************************/  
/*  
void ISD_Stop(void){  
ISD_SendData(STOP);  
ISD_SendData(0x00);  
SS=1;  
    delay_ms(50);  
}  

/**************************************************************************  
*    函数原型: void ISD_Reset(void);  
*    功    能: 复位  
**************************************************************************/  
void ISD_Reset(void){  
ISD_SendData(RESET);  
ISD_SendData(0x00);  
SS=1;  
    delay_ms(50);  
}  

/**************************************************************************  
*    函数原型: void ISD_PD(void);  
*    功    能: 掉电  
**************************************************************************/  
/*  
void ISD_PD(void){  
ISD_SendData(PD);  
ISD_SendData(0x00);  
SS=1;  
}  

/**************************************************************************  
*    函数原型: void ISD_SendData(uchar BUF_ISD);  
*    功    能: 发送数据  
**************************************************************************/  
uchar ISD_SendData(uchar BUF_ISD){  
uchar i,dat=BUF_ISD;  
SCLK=1;  
SS=0;  
for(i=0;i<8;i++){  
SCLK=0;  
I_delay();  
if(dat&0x01){  
MOSI=1;  
}  
else{  
MOSI=0;  
}  
dat>>=1;  
if(MISO){  
dat|=0x80;  
}  
SCLK=1;  
I_delay();  
}  
MOSI=0;  
// SS=1;  
return(dat);  
}  

/**************************************************************************  
*    函数原型: void RdStatus(void);  
*    功    能: 读取状态  
**************************************************************************/  
void RdStatus(void){  
ISD_SendData(RD_STATUS);  
ISD_SendData(0x00);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  
SR0_L =ISD_SendData(RD_STATUS);  
SR0_H =ISD_SendData(0x00);  
SR1 =ISD_SendData(0x00);  
SS=1;  
delay_ms(10);  

}  

/**************************************************************************  
*    函数原型: void RdStatus(void);  
*    功    能: 读取ID  
**************************************************************************/  
uchar RD_DevID(void){  
ISD_SendData(RD_DEVID);  
ISD_SendData(0x00);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  
SR0_L =ISD_SendData(RD_DEVID);  
SR0_H =ISD_SendData(0x00);  
ID =ISD_SendData(0x00);  
SS=1;  
delay_ms(10);  
return(ID);  
}  

/**************************************************************************  
*    函数原型: void RD_APC(void);  
*    功    能: 读取APC  
**************************************************************************/  
void RdAPC(void){  
ISD_SendData(RD_APC);  
ISD_SendData(0x00);  
ISD_SendData(0x00);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  

SR0_L =ISD_SendData(RD_APC);  
SR0_H =ISD_SendData(0x00);  
APCL =ISD_SendData(0x00);  
APCH =ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  
/*  
SBUF=SR0_L;  
delay_ms(1);  
SBUF=SR0_H;  
delay_ms(1);  
SBUF=APCL;  
delay_ms(1);  
SBUF=APCH;  
*/  
}  

/**************************************************************************  
*    函数原型: void ClrInt(void);  
*    功    能: 清除中断  
**************************************************************************/  
void ClrInt(void){  
ISD_SendData(CLI_INT);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  
}  

/**************************************************************************  
*    函数原型: void ISD_WR_APC2(uchar voICeValue);  
*    功    能: 设置APC2  
**************************************************************************/  
void ISD_WR_APC2(uchar voiceValue){  
ISD_SendData(WR_APC2);  
ISD_SendData(0xa8|voiceValue); //0xa8声音最大,0xaf声音最小  
ISD_SendData(0x0c); //D11=1,在SETPLAY模式下,执行到EOM自动结束。或者在连续两个SET_PLAY命令后,执行到第一个EOM自动跳到第二段开始  
SS=1;  
delay_ms(10);               //延迟10ms  
ISD_WR_NVCFG(); //永久写入寄存器  
}  

/**************************************************************************  
*    函数原型: void ISD_WR_NVCFG(void);  
*    功    能: 永久写入寄存器  
**************************************************************************/  
void ISD_WR_NVCFG(void){  
ISD_SendData(WR_NVCFG);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  
}  

/**************************************************************************  
*    函数原型: void GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd);  
*    功    能: 取出当前语音的首末地址  
**************************************************************************/  
/*  
void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd){  

*ipStartAdd=caToneAdd[cNum*2];  
*ipEndAdd=caToneAdd[cNum*2+1];  
}  

/**************************************************************************  
*    函数原型: void SetPLAY(uchar cNum);  
*    功    能: 定点播放  
**************************************************************************/  
void SetPLAY(uchar cNum){  

uint Add_ST, Add_ED;  
uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;  

do{  
RdStatus();  
DogReset();  
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}  

ClrInt();  

GetToneAdd(cNum, &Add_ST, &Add_ED);  

Add_ST_L=(uchar)(Add_ST&0x00ff);  
Add_ST_H=(uchar)((Add_ST>>8)&0x00ff);  
Add_ED_L=(uchar)(Add_ED&0x00ff);  
Add_ED_H=(uchar)((Add_ST>>8)&0x00ff);  
/*  
delay_ms(1);  
SBUF=Add_ST_L;  
delay_ms(1);  
SBUF=Add_ST_H;  
delay_ms(1);  
SBUF=Add_ED_L;  
delay_ms(1);  
SBUF=Add_ED_H;  
delay_ms(1);  
*/  
ISD_SendData(SET_PLAY);  
ISD_SendData(0x00);  
ISD_SendData(Add_ST_L);          //S7:S0  开始地址  
ISD_SendData(Add_ST_H);           //S10:S8  
ISD_SendData(Add_ED_L);           //E7:E0  结束地址  
ISD_SendData(Add_ED_H);           //E10:E8  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  

do{  
RdStatus();  
DogReset();  
}while((SR0_L&0x01)||((SR1&0x04))); //if(SR0_L^0==1){system Err}  

}  

/**************************************************************************  
*    函数原型: void SetREC(uchar cNum);  
*    功    能: 定点录音  
**************************************************************************/  
void SetREC(uchar cNum){  

uint Add_ST, Add_ED;  
uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;  

do{  
RdStatus();  
DogReset();  
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}  

ClrInt();  

GetToneAdd(cNum, &Add_ST, &Add_ED);  

Add_ST_L=(uchar)(Add_ST&0x00ff);  
Add_ST_H=(uchar)((Add_ST>>8)&0x00ff);  
Add_ED_L=(uchar)(Add_ED&0x00ff);  
Add_ED_H=(uchar)((Add_ST>>8)&0x00ff);  

ISD_SendData(SET_REC);  
ISD_SendData(0x00);  
ISD_SendData(Add_ST_L);           //S7:S0  开始地址  
ISD_SendData(Add_ST_H);           //S10:S8  
ISD_SendData(Add_ED_L);           //E7:E0  结束地址  
ISD_SendData(Add_ED_H);          //E10:E8  
ISD_SendData(0x00);  
SS=1;  
delay_ms(10);               //延迟10ms  

do{  
RdStatus();  
DogReset();  
// }while((SR0_L&0x01)||((SR1&0x08))); //if(SR0_L^0==1){system Err}  
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}  
}  

/**************************************************************************  
*    函数原型: void SetERASE(uchar cNum);  
*    功    能: 定点删除,容易破坏存储结构(CMA),所以不用  
**************************************************************************/  
/*  
void SetERASE(uchar cNum){  

uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;  

Add_ST_L=(uchar)(Add_ST&0xff);  
Add_ST_H=(uchar)(Add_ST>>8);  
Add_ED_L=(uchar)(Add_ED&0xff);  
Add_ED_H=(uchar)(Add_ED>>8);  

ISD_SendData(SET_ERASE);  
ISD_SendData(0x00);  
ISD_SendData(Add_ST_L);          //S7:S0  开始地址  
ISD_SendData(Add_ST_H);          //S10:S8  
ISD_SendData(Add_ED_L);          //E7:E0  结束地址  
ISD_SendData(Add_ED_H);          //E10:E8  
ISD_SendData(0x00);  
// SS=1;  
//  delay_ms(120);  
}  

/**************************************************************************  
*    函数原型: void Erase_All(void);  
*    功    能: 全部删除  
**************************************************************************/  
void Erase_All(void){  
ISD_SendData(G_ERASE);  
ISD_SendData(0x00);  
SS=1;  
delay_ms(100);               //延迟10ms  
}  

/**************************************************************************  
*    END  
*    END  
**************************************************************************/  


以下是SPI.H  
#ifndef _SPIEX_  
#define _SPIEX_  

#include  
#include "typedef.h"  

#define  PU   0x01  
#define  STOP   0x02  
#define  RESET   0x03  
#define  CLI_INT  0x04  
#define  RD_STATUS 0x05  
#define  RD_PLAY_PTR   0x06  
#define  PD   0x07  
#define  RD_REC_PTR   0x08  
#define  RD_DEVID 0x09  
#define  G_ERASE 0x43  
#define  RD_APC   0x44  
#define  WR_APC1   0x45  
#define  WR_APC2   0x65  
#define  WR_NVCFG   0x46  
#define  CHK_MEM 0x49  
#define  SET_PLAY   0x80  
#define  SET_REC   0x81  
#define  SET_ERASE   0x82  

#define  HIGH 1  
#define  LOW 0  
/*  
#define  RIGHT 1  
#define  ERROR 0  

//#define SET_BIT(x,y)  (x|=(1<//#define CLR_BIT(x,y)  (x&=~(1<//#define GET_BIT(x,y)  (x&(1</*-----------------------------------------------------------------------  
//SR0_L 0 1 2 3 4 5 6 7  
//  CMD_Err   FULL     PU    EOM    INT     A0 A1 A2  

//SR0_H 8  9 10 11 12 13 14 15  
// A3 A4 A5 A6 A7 A8 A9 A10  

//SR1 0 1 2 3 4 5 6 7  
//    RDY    ERASE    PLAY    REC     SE1     SE2     SE3    SE4  

//APC 0 1 2 3 4 5 6 7  
//   VOL0   VOL1    VOL2  MON_IN   MIX_IN  SE_EDIT  SPI_FT  AUD/AUX(AUD线路输出,AUX直接驱动喇叭)  

//APC 8  9 10 11  
//   PWM_SPK  PU_AO  VALERT  EOM_EN(在SETPLAY模式下,置1遇到EOM则结束,否则继续播放)  
----------------------------------------------------------------------------*/  
/*  
sbit INT_1700 = SR0_L^4;  
sbit EOM = SR0_L^3;  
sbit PU_1700 = SR0_L^2;  
sbit FULL = SR0_L^1;  
sbit CMD_ERR = SR0_L^0;  

sbit REC_1700 = SR1^3;  
sbit PLAY_1700 = SR1^2;  
sbit ERASE_1700 = SR1^1;  
sbit RDY = SR1^0;  
*/  
sbit SS = P4^3;  
sbit SCLK = P4^2;  
sbit MOSI = P4^1;  
sbit MISO = P4^0;  


extern void  I_delay(void);  
extern void delay_ms(register uint Count);  
extern void DogReset(void) reentrant;  

/**************************************************************************  
*    函数原型: void GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd);  
*    功    能: 取出当前语音的首末地址  
**************************************************************************/  
void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd);  

/**************************************************************************  
*    函数原型: void ISD_Init(void);  
*    功    能: 初始化  
**************************************************************************/  
void  ISD_Init(void);  

/**************************************************************************  
*    函数原型: void ISD_PU(void);  
*    功    能: 上电  
**************************************************************************/  
void ISD_CHK_MEM(void);  

/**************************************************************************  
*    函数原型: void ISD_Up(void);  
*    功    能: 上电  
**************************************************************************/  
void  ISD_PU(void);  

/**************************************************************************  
*    函数原型: void ISD_Stop(void);  
*    功    能: 停止  
**************************************************************************/  
void ISD_Stop(void);  

/**************************************************************************  
*    函数原型: void ISD_Reset(void);  
*    功    能: 复位  
**************************************************************************/  
void ISD_Reset(void);  

/**************************************************************************  
*    函数原型: void ISD_PD(void);  
*    功    能: 掉电  
**************************************************************************/  
void ISD_PD(void);  

/**************************************************************************  
*    函数原型: void ISD_SendData(uchar BUF_ISD);  
*    功    能: 发送数据  
**************************************************************************/  
uchar ISD_SendData(uchar BUF_ISD);  

/**************************************************************************  
*    函数原型: void RdStatus(void);  
*    功    能: 读取状态  
**************************************************************************/  
void RdStatus(void);  

/**************************************************************************  
*    函数原型: void RdStatus(void);  
*    功    能: 读取ID  
**************************************************************************/  
uchar RD_DevID(void);  

/**************************************************************************  
*    函数原型: void RD_APC(void);  
*    功    能: 读取APC  
**************************************************************************/  
void RdAPC(void);  

/**************************************************************************  
*    函数原型: void ClrInt(void);  
*    功    能: 清除中断  
**************************************************************************/  
void ClrInt(void);  

/**************************************************************************  
*    函数原型: void ISD_WR_APC2(uchar voiceValue);  
*    功    能: WR_APC2  
**************************************************************************/  
void ISD_WR_APC2(uchar voiceValue);  

/**************************************************************************  
*    函数原型: void ISD_WR_NVCFG(void);  
*    功    能: 永久写入寄存器  
**************************************************************************/  
void ISD_WR_NVCFG(void);  

/**************************************************************************  
*    函数原型: void SetPLAY(uchar cNum);  
*    功    能: 定点播放  
**************************************************************************/  
void SetPLAY(uchar cNum);  

/**************************************************************************  
*    函数原型: void SetREC(uchar cNum);  
*    功    能: 定点录音  
**************************************************************************/  
void SetREC(uchar cNum);  

/**************************************************************************  
*    函数原型: void SetERASE(uchar cNum);  
*    功    能: 定点删除  

**************************************************************************/  
/*  
void SetERASE(uchar cNum);  

/**************************************************************************  
*    函数原型: void Erase_All(void);  
*    功    能: 全部删除  
**************************************************************************/  
void Erase_All(void);  

/**************************************************************************  
*    END  
*    END  
**************************************************************************/  
#endif  


推荐阅读

史海拾趣

EMMICRO公司的发展小趣事

EMMICRO公司自创立之初,就致力于在电子微芯片领域进行技术创新。公司研发团队不断突破技术瓶颈,成功研发出具有高性能、低功耗的芯片产品,填补了市场的空白。通过不断的创新和技术迭代,EMMICRO的芯片产品在市场上赢得了广泛的认可,并逐渐树立起品牌的知名度和影响力。

峰岹(Fortior Tech )公司的发展小趣事

EMMICRO公司非常注重国际化战略的实施。公司积极参加国际展览和交流活动,与全球范围内的合作伙伴建立了良好的合作关系。同时,公司还通过引进国际先进的生产技术和管理经验,不断提升自身的核心竞争力和国际化水平。在海外市场拓展方面,EMMICRO公司也取得了显著的成果,为公司的长期发展奠定了坚实的基础。

台湾义隆电子(ELAN)公司的发展小趣事

义隆电子非常重视研发实力和人才培养。公司拥有一支高素质的研发团队,员工总数的七成以上为研发人才。公司每年投入大量资金用于研发新产品,并注重培养员工的创新能力和实践能力。此外,义隆电子还与国内外知名学府合作,共同培养高素质的人才,为公司的长期发展提供了有力保障。

High Voltage Semiconductor Inc公司的发展小趣事

美高测的起源可以追溯到上世纪80年代末,当时电力工程师斯坦利·珀希尔(虚构对应美高测创始人)在父亲的高压设备公司中工作,积累了深厚的高压测试技术经验。1992年,他带着对高压测试技术的深刻理解,从Hipotronics公司独立出来,创立了美高测。公司初期便专注于研发更高效、更安全的高压测试设备,特别是在交流串联谐振技术和C低频技术上的突破,为公司在高压半导体测试领域奠定了坚实的基础。

City_Technology公司的发展小趣事

为了进一步推动公司的发展,City Technology于1993年决定售出部分股份,并在1996年成功在伦敦股票交易所上市。这一举措为公司带来了更多的资金支持,也为其后续的资本运作和战略扩张提供了可能。上市后的City Technology在资金、人才和市场资源等方面得到了极大的提升,为其日后的快速发展奠定了坚实的基础。

B&F Fastener Supply公司的发展小趣事

为了进一步完善电子供应链,B&F Fastener Supply公司积极寻求并购机会。经过多轮谈判和尽职调查,公司成功收购了某家专注于电子元器件供应的公司。这次并购使得B&F的产品线更加丰富,能够为客户提供一站式的电子供应链解决方案。

问答坊 | AI 解惑

记录波形

1、  想把一个时间段的波形录制下来再看,或者传到电脑上进一步分析,有没有这样的示波器?或者有这样功能的仪器叫什么,大家有用到的介绍下…

查看全部问答>

sigmatel 9200 HD 声卡没有混音功能怎么办

能够记录机器里面播放的声音,或者使用麦克可以录音,但就是不能同时实现卡拉ok混音功能。怎么办,网上找到的补丁都用过了,就是不能用混音。 高手在哪里?…

查看全部问答>

单片机通信能发送浮点数据吗?

请问各位经过AD转换后存放在单片机里的浮点数据,要发送给其他单片机,需要把浮点转换成字符型或其他型数据吗?如果要转换,算法是什么?谢谢指点!…

查看全部问答>

wince wifi有问题

WINCE在开机后自动弹出来一个WIFI无线配置的窗口,但是这个窗口比LCD高了,有没有好办法把这个窗口缩小一点呀!如果单改代码来缩小窗口,那窗口上的控件也要调整,比较麻烦,改资源文件又好像只有英文版的才有效,哪位前辈能给小弟一点建议呀?!…

查看全部问答>

【招兵买马】响应论坛活动

随着论坛LM811的开发板的活动,先前我也在论坛发过一些关于DIY机器人的意见贴!~ 随着我实习已经快接近尾声了,在论坛活动结束之后,召集申请到得开发板的童鞋,当然没有申请到得童鞋也是可以的啦,一起来DIY机器人,如果我没有申请到我会自己出钱 ...…

查看全部问答>

【MSP430共享】自动控制升降旗系统

自动控制升降旗系统专为运动会以及企事业单位的升旗仪式所制,系统有单片机MSP430F247、步进电机、语音芯片时钟芯片、液晶、遥控模块、按键等基本部分组成 ,考虑到在实际情况中的应用,完成标准升旗、降旗、降半旗、自定义升旗、远程遥控升旗、定 ...…

查看全部问答>

TI课堂进不去

上周学习了前三讲,后面的几次课就没有办法进去了,登陆不上去,不知怎么解决…

查看全部问答>

【TI课程ppt】开关电源组件选择

开关电源组件选择 开关电源组件选择 (Switch-Power-Supply-Component-Selection) 开关电源深入浅出之设计选型篇,作为能量转换的装置-电源,此篇告诉你想了解的储能元器件类型和如何选择,理解并能优化选择电容和电感 课程大纲: 拓扑敏感回路 ...…

查看全部问答>

CCS昨天编译出现“gmake: *** 拒绝访问",所有编译无法运行,奇怪得很呐

大家早上好,我这边遇到个关于CCS的小问题,想请大家帮帮忙。 问题描述:从昨天下午开始,使用CCS编译已经写好的程序之后,进度一直停留在大概7%左右的位置,查看编译信息,发现有如下提示:gmake: *** 拒绝访问 经过无数次的测试,就算是新建的 ...…

查看全部问答>

中秋节,晒福利

如题,晒晒你们公司的中秋福利吧…

查看全部问答>