本帖最后由 CLLS2080000 于 2019-12-27 14:15 编辑
///录音 I2S_DMA接收中断服务函数.在中断里面写入数据
void rec_i2s_dma_rx_callback(void)
{
u16 bw;
u8 res;
u16 i;
if(rec_sta==0X80)//录音模式
{
if(DMA1_Stream3->CR&(1<<19))
{
//将右声道剔除,i2srecbuf1前一半数据放入左声道,i2srecbuf1后半段是错误的右声道数据,不可用
for(i=2;i<I2S_RX_DMA_BUF_SIZE;i++)
{
i2srecbuf1[ i]=i2srecbuf1[i*2];//i2srecbuf1=i2srecbuf1[i*2];
i2srecbuf1[i+1]=i2srecbuf1[i*2+1];
i++;
}
res=f_write(f_rec,i2srecbuf1,I2S_RX_DMA_BUF_SIZE/2,(UINT*)&bw);//写一半左声道
if(res)
{
printf("write error:%d\r\n",res);
}
}
else
{
for(i=2;i<I2S_RX_DMA_BUF_SIZE;i++)
{
i2srecbuf2 [i ]=i2srecbuf2[i*2];
i2srecbuf2[i+1]=i2srecbuf2[i*2+1];
i++;
}
res=f_write(f_rec,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2,(UINT*)&bw);//写一半左声道
if(res)
{
printf("write error:%d\r\n",res);
}
}
wavsize+=I2S_RX_DMA_BUF_SIZE;
}
} 这样搞单声道可以了,不过电脑播放正常了,开发板播放快了一倍,可能要该播放器了
|