查看文章
 
ISD4004 中文资料与基本程序-语音芯片
2008-06-10 22:40

1.      ISD4000系列语音录放电路分为以下三个系列:

2.      4002-120/150/180/240    22.534分钟

3.      4003-04/05/06/08M       4568分钟

4.      4004-08/10/12/16M       8101216分钟

4004系列独有的特性

除前面介绍的ISD语音电路主要特性外,4000系列独有的特性为:

1. 3v单电源供电。

2. 内置微机串行通信接口。


五、典型应用线路图

/********************************************************************
                ISD4004
基本程序               AVR meag16
     Pafone                         SPI
端口 1M内部晶振

                13th April 2007                It took me about 3 days

********************************************************************/
i nclude<iom16v.h>
i nclude<macros.h>
#define uchar unsigned char
#define DDR_SPI DDRB
#define DD_MOSI 5
#define DD_SCK 7
#define DD_SS 4
//*******************************
延时
100ms*****************************
void delay100ms()
{
unsigned char i,j;
for(j = 0;j<316;j++)
for(i = 0;i<316;i++);//1MHz
的晶振

}
//************************
初始化SPI***********************************
void SPI_MasterInit()
{
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);//
设置MOSI,SCK,SS OUTPUT,其它为
INPUT
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|BIT(SPR1)|BIT(DORD);//SPI
使能,主机方式,设置SCKfosc/128,上升沿
,LSB First
}
//****************************
数据传送函数
**********************************
void SpiTransmit(unsigned char data)
{
SPDR = (unsigned char)data;
while(!(SPSR&(1<<SPIF)));//Wait for transmission finish
}
//****************cmdSend*********************************
void cmdSend(unsigned int Addr,unsigned char cmd)
{
PORTB = PORTB&(~(1<<DD_SS));//
变低
SS
NOP();//
为保证那个
500ns
SpiTransmit(Addr);          //
传地址低位

SpiTransmit(Addr>>8);   //
传地址高字节
SpiTransmit(cmd);    //
传命令
PORTB = PORTB|(1<<DD_SS);//
变高SS
NOP();//
为保证那个
500ns
}
//*************************
放音函数
**********************
void play(unsigned int addrs)
{
cmdSend(0x0000,0x20);//Power up
delay100ms();//
上电延时

cmdSend(addrs,0xe0);//
发地址值为addrSetplay命令
cmdSend(0x0000,0xf0);//
Play命令
}
//************
录音函数*******************************
void rec(unsigned int addrs)
{
cmdSend(0x0000,0x20);//
POWER UP命令
;
delay100ms();//
等待TPUD(上电延时
);
cmdSend(0x0000,0x20);//
POWER UP命令

cmdSend(addrs,0xa0);//
发地址值为00SETREC命令;
cmdSend(0x0000,0xb0);//
REC命令。

}
//**************
停止当前操作函数*****************************
void stop(void)
{
cmdSend(0x0000,0x30);
}
///////////////////////////
void delay(uchar k)
{
unsigned char a,b;
for(a = k;a>0;a--)
for(b = 1;b;b++);
}
////////////////////////
void main()
{unsigned int j = 0;
DDRA = 0xff;
PORTB = PORTB|(1<<DD_SS);//
变高
SS
// PORTB &= ~BIT(DD_MOSI);//
这个没用的?控制不了---SPI
?
SPI_MasterInit();
delay(255);
rec(0);
PORTA = 0xff;//
开始录音,灯亮

for(;j<100;j++)
{
delay(255);
}
stop();
delay(255);
PORTA = 0x00;//
停止录音,灯灭
play(0);
}


类别:技术||添加到搜藏 |分享到i贴吧|浏览(8031)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu