使用vs1053录音,录出来的声音好像快放一样,声音比正常要快很多,设置什么的都对,测试也是对的,就是不知道加上操作系统哪里出问题了
---------------------------
/*******************************************
函数名称:u8 rec_pre_input(void)
功能描述:话筒预录导入
全局变量:无
参数说明:无
返回值: 无
说明:
********************************************/
u8 rec_pre_input(void)
{
u16 i;
u32 rec_mic_num = 0;
u32 offset;
u8 ptt_flag = 0;
u8 temp;//段数
u16 count, start;//读取文件的扇区数量
u16 vs_temp;
u16 rec_start;
OS_ENTER_CRITICAL();
NAND_ReadSector(0, nand_buf);
temp = nand_buf[PRE_NUM_ADD + 3];//该写入的段数
start = ((u16)nand_buf[PRE_START_ADD + ((temp - 1) * 16) + 2]) << 8;//读取上一段起始地址
start = start | (u16)nand_buf[PRE_START_ADD + ((temp - 1) * 16) + 3];
count = ((u16)nand_buf[PRE_START_ADD + ((temp - 1) * 16) + 6]) << 8;//读取上一段扇区总数
count = count | (u16)nand_buf[PRE_START_ADD + ((temp - 1) * 16) + 7];
rec_start = count + start;//新段的开始地址
while(1)
{
if(PTT_OPEN == 0)
{
if(ptt_flag == 0)
{
recoder_mode_mic();//开启录音模式
}
ptt_flag = 1;
vs_temp = VS_RD_Reg(VS1003_HDAT1);
if((vs_temp >= 256) && (vs_temp < 896))
{
for(i = 0; i < 256; i++)
{
vs_temp = VS_RD_Reg(VS1003_HDAT0);
nand_buf[i * 2] = vs_temp >> 8;
nand_buf[i * 2 + 1] = vs_temp;
}
NAND_WriteSector((pre_count + rec_start + 1), nand_buf);
while(NAND_RB == 0);//等待忙管脚变高
pre_count++;
}
if(pre_count > 25599)
{
for(i = 201; i < 300; i++)
{
NAND_EraseBlock(i);
}
NAND_ReadSector(0, nand_buf);//读取第0扇区
rec_mic_num = (nand_buf[MIC_NUM_ADD] << 24);//读取话筒录音计数值
rec_mic_num = rec_mic_num | (nand_buf[MIC_NUM_ADD + 1] << 16);
rec_mic_num = rec_mic_num | (nand_buf[MIC_NUM_ADD + 2] << 8);
rec_mic_num = rec_mic_num | nand_buf[MIC_NUM_ADD + 3];
if(rec_mic_num >= 0x3fec)
{
rec_mic_num = 0;
}
offset = MIC_START_ADD + (rec_mic_num * 16);
offset = offset / 512;
for(i = 0; i < offset; i++)
{
NAND_ReadSector(i, nand_buf);
NAND_WriteSector(i + 256, nand_buf);
}
NAND_ReadSector(0, nand_buf);//读第一块第0扇区
NAND_EraseBlock(0);//擦除第0块
nand_buf[PRE_NUM_ADD + 3] = 0;
nand_buf[PRE_START_ADD + 2] = 0xC9;
nand_buf[PRE_START_ADD + 3] = 0;
nand_buf[PRE_START_ADD + 6] = 0;
nand_buf[PRE_START_ADD + 7] = 0;
NAND_WriteSector(0, nand_buf);
for(i = 1; i < offset; i++)
{
NAND_ReadSector(i + 256, nand_buf);
NAND_WriteSector(i, nand_buf);
}
OS_EXIT_CRITICAL();
return 99;
}
}
if((ptt_flag == 1) && (PTT_OPEN == 1))
{
ptt_flag = 0;
recoder_header_info(rec_start, pre_count);
NAND_ReadSector(0, nand_buf);//读取第0扇区
rec_mic_num = (nand_buf[MIC_NUM_ADD] << 24);//读取话筒录音计数值
rec_mic_num = rec_mic_num | (nand_buf[MIC_NUM_ADD + 1] << 16);
rec_mic_num = rec_mic_num | (nand_buf[MIC_NUM_ADD + 2] << 8);
rec_mic_num = rec_mic_num | nand_buf[MIC_NUM_ADD + 3];
if(rec_mic_num >= 0x3fec)
{
rec_mic_num = 0;
}
offset = MIC_START_ADD + (rec_mic_num * 16);
offset = offset / 512;
for(i = 0; i < offset; i++)
{
NAND_ReadSector(i, nand_buf);
NAND_WriteSector(i + 256, nand_buf);
}
NAND_ReadSector(0, nand_buf);//读第一块第0扇区
NAND_EraseBlock(0);//擦除第0块
nand_buf[PRE_NUM_ADD + 3] = temp;
nand_buf[PRE_START_ADD + (temp * 16) + 2] = (u8)((rec_start >> 8) & 0xff);
nand_buf[PRE_START_ADD + (temp * 16) + 3] = (u8)(rec_start & 0xff);
nand_buf[PRE_START_ADD + (temp * 16) + 6] = (u8)(((pre_count + 1) >> 8) & 0xff);
nand_buf[PRE_START_ADD + (temp * 16) + 7] = (u8)((pre_count + 1) & 0xff);
NAND_WriteSector(0, nand_buf);
for(i = 1; i < offset; i++)
{
NAND_ReadSector(i + 256, nand_buf);
NAND_WriteSector(i, nand_buf);
}
OS_EXIT_CRITICAL();
return 99;
}
}
} |