请教:VS1003录音时,不能用文件系统把数据写进sd卡中
本帖最后由 jiaohaitao 于 2012-7-29 17:27 编辑代码如下,用的振南的文件系统,模拟spi读写sd卡实现mp3播放。
下面的录音程序是比着1003的数据手册上的程序改的
调试的时候,刚开始用串口输出缓冲区的数据,正常。
一旦加上文件系统写数据到sd文件的函数,就会出错。串口也不再输出数据,感觉卡在了某个地方,这是要退出录音的话
令KEY!=1;还是卡在那,有时猛拍两下单片机会跳出来,,,,,郁闷死了。。。。
我感觉有问题的地方就是因为内存不足,在读缓冲区的时候,我就把缓冲字符改成了256b,而手册上是512b
而文件系统的写函数又会占据一定时间,导致。。。。。。下面就不知道了
有遇到这样问题的同学没???指导下,不胜感激!!!
//录音函数
void RecordAdpcm1003(void)
{
unsigned int w = 0, idx = 0;
SD_Reset();
SD_Init();
UART_Send_Str("SD已就绪....\n");// Check and locate free space on disk
//上面是sd初始化
if(FAT32_Open_File(&FileInfo,"\\recorder0.wav",0))
{
UART_Send_Str("打开文件成功\n");
}
else
UART_Send_Str("打开文件失败\n");
//上面是打开要存入录音数据文件
UART_Send_Str("下面开始录音.........\n");
//寄存器设置,都是按数据手册来的
VS_Write_Reg(0x0b,0x14,0x14);
VS_Write_Reg(0x02,0,0);
VS_Write_Reg(0x03,0x44,0x30);//(SCI_CLOCKF, 0x4430);//* 2.0x 12.288MHz
delay1(10);
VS_Write_Reg(0x0c,0,12);//WriteMp3SpiReg(SCI_AICTRL0, 12); // Div -> 12=8kHz 8=12kHz 6=16kHz
delay1(10);
VS_Write_Reg(0x0d,0,0);//WriteMp3SpiReg(SCI_AICTRL1, 0); // Auto gain
delay1(10);
//这里line_in=0
if (line_in)
{
VS_Write_Reg(0x00,0x58,0x04);//WriteMp3SpiReg(SCI_MODE, 0x5804); //Normal SW reset + other bits
}
else
{
VS_Write_Reg(0x00,0x18,0x04);//WriteMp3SpiReg(SCI_MODE, 0x1804); // Normal SW reset + other bits
}
//写入wav文件的头
for (idx=0; idx < sizeof(header); idx++)
{
db = header;
UART_Send_Byte(header);//把wav的格式头输出到串口
}
FAT32_Add_Dat(&FileInfo,sizeof(header),header);//把格式头写到文件中,这个写文件是可以执行的,下面的就不行了
idx=0;
//key=1时录音
while(KEY==1)
{
do {
w=VS_Read_Reg(0x09); //w = ReadMp3SpiReg(SCI_HDAT1);
}
while ((w < 128 || w >= 896)); // wait until 512 bytes available *
//下面是对256个字节的处理
while(idx < 256)
{
w=VS_Read_Reg(0x08);//w = ReadMp3SpiReg(SCI_HDAT0);
db = w>>8;
db = w&0xFF;
}
UART_Send_Str(db); //问题在这:如果不加下面的写数据到文件的函数,就会正常输出数据到串口
// FAT32_Add_Dat(&FileInfo,256,db);//一旦加上这个函数,就只会写入上面第一装入db[]中的数据,,,,而后单片机就会卡住了
idx = 0;
}
VS_Reset();
UART_Send_Str("录音结束.......\n");
} 追问下。。。。是不是把vs1003录音的寄存器设置好后,,,,不论操不操作缓冲区的数据,,,插上耳机都会听到正在录得声音?? 顶一下,谁有1003录音的代码,能否让小弟参考下撒。。。。。。 高手出来撒。。。。还有当要中断wma格式的文件时,怎么设置才能继续播放。。。。 我也正在做录音并播放这一块,但是我需要实时播放,不好整啊 木v风 发表于 2012-11-7 17:08 static/image/common/back.gif
我也正在做录音并播放这一块,但是我需要实时播放,不好整啊
实时播放很简单,1003设置下寄存器,就是个话筒了,就是按照录音的设置,你试试就知道的,亲 jiaohaitao 发表于 2012-11-7 22:36 static/image/common/back.gif
实时播放很简单,1003设置下寄存器,就是个话筒了,就是按照录音的设置,你试试就知道的,亲 ...
哦,好的,谢谢。我想直接用一个麦克风传感器,接stm32自带的ad装换成数字信号,不知道这样行不行
页:
[1]