2019-07-20 01:54发布
正点原子 发表于 2018-9-18 02:07 因为我们设置的i2s工作在 主机模式下,必须发送数据,产生LRCK才可以正常读取来自ADC的数据。
刘先森 发表于 2019-5-13 15:47 原子哥,可以加QQ或者微信聊么,你说的这个方法不太会啊,这个例程看了好久了,发0是在哪里发的啊
最多设置5个标签!
原子哥,可以加QQ或者微信聊么,你说的这个方法不太会啊,这个例程看了好久了,发0是在哪里发的啊
void recoder_enter_rec_mode(void)
{
WM8978_ADDA_Cfg(1,1); //¿aÆôADC
WM8978_Input_Cfg(1,1,1); //¿aÆôêäèëí¨μà(MIC&LINE IN)
WM8978_Output_Cfg(1,1); //¿aÆôBYPASSêä3ö
WM8978_MIC_Gain(20); //MICÔöòæéèÖÃ
WM8978_I2S_Cfg(2,0); //·éàûÆÖ±ê×¼,16λêy¾Y3¤¶è
my_decode_init(&wavctrl);//μÃμ½ÎļtμÄDÅÏ¢
I2S3_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,Ö÷»ú·¢Ëí,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,′ó»ú½óêÕ,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3_SampleRate_Set(16000); //éèÖÃ2éÑùÂê
I2S3_TX_DMA_Init(audiodev.i2sbuf1,audiodev.i2sbuf2,WAV_I2S_TX_DMA_BUFSIZE/2); //ÅäÖÃTX DMA
//DMA1_Stream4->CR&=~(1<<4); //1رÕ′«êäíê3éÖD¶Ï(Õaàï2»óÃÖD¶ÏËíêy¾Y)
audio_stop();
i2s_tx_callback=wav_i2s_dma_tx_callback;
I2S3ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2); //ÅäÖÃRX DMA
i2s_rx_callback=rec_i2s_dma_rx_callback;//»Øμ÷oˉêyÖ¸wav_i2s_dma_callback
I2S_Rec_Stop(); //¿aê¼I2Sêy¾Y½óêÕ(′ó»ú)
}
void rec_i2s_dma_rx_callback(void)
{
u8 *p,*pp;
int32_t j;
if(DMA1_Stream2->CR&(1<<19))
{
p = i2srecbuf1;
}else
{
p = i2srecbuf2;
}
pp = (u8 *)i2srecbuf3;
for(j=0;j<I2S_RX_DMA_BUF_SIZE;j++)
{
pp=p[j];
if(i==I2S_RX_DMA_BUF_SIZE*14-1)
{
i=0;
}
else
{
i++;
}
}
}
u32 wav_buffill(u8 *buf,u16 size,u8 bits)
{
// u16 readlen=0;
u32 bread;
int32_t j;
if(bits==24)//24bitòôÆμ,Dèòa′|àíò»ÏÂ
{
// // readlen=(size/4)*3; //′Ë′Îòa¶áè¡μÄ×Ö½úêy
//// f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread); //¶áè¡êy¾Y
// p=audiodev.tbuf;
// for(1=0;i<size;)
// {
// buf[1++]=p[1];
// buf[1]=p[2];
// 1+=2;
// buf[1++]=p[0];
// p+=3;
// }
// bread=(size*4)/3; //ìî3äoóμÄ′óD¡.
}else
{
for(j=0;j<size;j++)
{
buf[j]=i2srecbuf3[a];
if(a==I2S_RX_DMA_BUF_SIZE*14-1)
{
a=0;
}
else
{
a++;
}
}
bread=size;
}
return bread;
}
这个我改了一下,和例程里面的不一样,你可以把上面的I2S3改成I2S2就行了,和楼主说的有点不一样的就是,我是把录进来的数据直接播放出去,不是播放其他的音频文件。楼主说的和这个差不多,你只要把填充的BUFF改成你从SD卡读出来的音频数据就行了。
一周热门 更多>