打印

求助大家isd4004语音芯片无法录音但可以放音。请大家帮助,

[复制链接]
3703|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
krstc|  楼主 | 2008-7-19 01:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这次问一下有关isd4004语音芯片的问题,现在的问题在于: 
我写的代码可以顺利的播放语音芯片里面的内容,但是不能录音。不知道为啥。 
刚买isd4004的时候让老板作为测试在芯片里面录了一小段语音。现在可以把录制的内容放出来,但是遗憾的是,我自己写的录音程序无法讲自己的声音录进去, 
就是虽然我执行了录音程序,但是再次同样地址播放的时候还是原来老板录好的声音。所以录音不成功。下面是我的代码,请教以下大家哪里有错。 
谢谢大家! 


//////////////////函数申明区//////////////////////// 
void delay4004(unsigned int time); 
void spi_send(uchar data4004);                //isd4004spi发送数据函数 
void isd_stop(void);                            //发送停止指令 
void isd_pu(void);                                //上电指令 
void isd_pd(void);                                //下电指令 
void isd_play(void);                            //播放指令 
void isd_rec(void);                              //录音指令 
void isd_setplay(uchar adl,uchar adh);    //设置播放模式指令 
void isd_setrec(unsigned char adl,unsigned char adh); 
              //设置录音模式指令 
//unsigned char chk_isdovf(void)              //检查是否溢出函数 
////////////////////////////////////////////////// 
void init12864(uchar c_command,uchar c_time); 
void print12864(uchar c_12864add,uchar c_12864hdate,uchar c_12864ldate,uchar c_12864time); 
uchar keyboard(uchar c_break); 


void delay4004(unsigned int time) //延迟n 微秒 

while(time--) 





//************************************ 
//ISD4002 spi 串行发送子程序,8 位数据 
//************************************ 
void spi_send(uchar data4004) 

unsigned char isx_counter; 
SCLK=0; 
SS=0; //ss=0,打开spi 通信端 
for(isx_counter=0;isx_counter <8;isx_counter++) //先发低位再发高位,依次发送。 

if ((data4004&0x01)==1) 
MOSI=1; 
else 
MOSI=0; 
data4004=data4004>>1; 
SCLK=0; //下降沿发送数据 
delay4004(2); 
SCLK=1; 
delay4004(2); 



//******************************* 
//发送stop 指令 
//******************************* 
void isd_stop(void) 

delay4004(10); 
SS=0; 
spi_send(0x30); 
SS=1; 
// delay4004ms(50); 


//******************************* 
//发送上电指令,并延迟50ms 
//******************************* 
void isd_pu(void) 

delay4004(10); 
SS=0; 
spi_send(0x20); 
SS=1; 
// delay4004ms(50); 

//******************************* 
//发送掉电指令,并延迟50ms 
//******************************* 
void isd_pd(void) 

delay4004(10); 
SS=0; 
spi_send(0x10); 
SS=1; 
// delay4004ms(50); 

//******************************* 
//发送play 指令 
//******************************* 
void isd_play(void) 

spi_send(0xf0); 
SS=1; 

//******************************* 
//发送rec 指令 
//******************************* 
void isd_rec(void) 

spi_send(0xb0); 
SS=1; 

//******************************* 
//发送setplay 指令 
//******************************* 
void isd_setplay(uchar adl,uchar adh) 

delay4004(1); 
spi_send(adl); //发送放音起始地址低位 
delay4004(2); 
spi_send(adh); //发送放音起始地址高位 
delay4004(2); 
spi_send(0xe0); //发送setplay 指令字节 
SS=1; 

//******************************* 
//发送setrec 指令 
//******************************* 
void isd_setrec(unsigned char adl,unsigned char adh) 

spi_send(adl); //发送放音起始地址低位 
delay4004(2); 
spi_send(adh); //发送放音起始地址高位 
delay4004(2); 
spi_send(0xa0); 
SS=1; 


void isd4004(uchar c_select) 

uint isd4004add=0; 
SS=MOSI=MISO=SCLK=ISD_INT=RAC=1; 
ISD_INT=0; 
RAC=0; 
init12864(0x01,0); 
print12864(0x80,'o','k',0); 
if(c_select=='A') 

print12864(0x80,'A','!',0); 
isd_pu(); 
delay4004(5118); 
isd_pu(); 
delay4004(5118); 
delay4004(5118); 
delay4004(5118); 
isd_setrec(0x00,0x00); 
isd_rec(); 
while(1) 

if(ISD_INT==1) 

if(RAC==1) 

delay4004(2000); isd4004add++; 
print12864(0x90,isd4004add/1000+0x30,isd4004add%1000/100+0x30,0); 
print12864(0x92,isd4004add%100/10+0x30,isd4004add%10+0x30,0); 
if(keyboard(0))break; 



if(keyboard(0)){print12864(0x82,'f','a',0);break;} 

isd_stop(); 
isd_pd(); 

if(c_select=='B') 

isd4004add=0; 
print12864(0x98,'B','!',0); 
isd_pu(); 
delay4004(5118); 
isd_setplay(0x00,0x00); 
isd_play(); 
while(1) //等待放音完毕的EOM 中断信号 

if(RAC==0) 

delay4004(2000); isd4004add++; 
print12864(0x90,isd4004add/1000+0x30,isd4004add%1000/100+0x30,0); 
print12864(0x92,isd4004add%100/10+0x30,isd4004add%10+0x30,0); 
if(keyboard(0))break; 

if(keyboard(0)){print12864(0x82,'f','a',0); break;} 

isd_stop(); 
isd_pd(); 



谢谢大家! 

相关帖子

沙发
hotpower| | 2008-7-19 05:05 | 只看该作者

年代久了都忘了~~~肯定是录音程序的错~~~SPI如何???

使用特权

评论回复
板凳
krstc|  楼主 | 2008-7-19 13:18 | 只看该作者

貌似录音程序没有错误啊。。我查了不少网上的示范程序。

麻烦做过的朋友给予帮助。谢谢了

使用特权

评论回复
地板
古道热肠| | 2008-7-20 09:42 | 只看该作者

看过中青世纪的汇编代码吗?去参考参考

还是就是录音过程分三步走,准备录音,录音,停止录音,前提是必须确保硬件无故障的前提下调软件.千万别软硬件混在一起,扯不清,理还乱.

使用特权

评论回复
5
krstc|  楼主 | 2008-7-20 21:24 | 只看该作者

可以正常放音,硬件应该没有问题。不知道问题在哪。

请大家帮助。

使用特权

评论回复
6
hotpower| | 2008-7-22 23:55 | 只看该作者

中青世纪的汇编代码不怎么样~~~记得俺搞到自动识别...早忘

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

53

帖子

0

粉丝