请问有没有哪位写过WM8978录音和播放同时工作的驱动程序?

2019-07-20 01:54发布


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
13372533333
2019-07-20 22:54
本帖最后由 13372533333 于 2019-5-15 16:31 编辑
刘先森 发表于 2019-5-13 15:47
原子哥,可以加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&#216;±&#213;′&#171;ê&#228;íê3é&#214;D&#182;&#207;(&#213;aà&#239;2&#187;ó&#195;&#214;D&#182;&#207;&#203;íêy&#190;Y)
        audio_stop();
        i2s_tx_callback=wav_i2s_dma_tx_callback;
        I2S3ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2);         //&#197;&#228;&#214;&#195;RX DMA
  i2s_rx_callback=rec_i2s_dma_rx_callback;//&#187;&#216;μ÷oˉêy&#214;&#184;wav_i2s_dma_callback
        I2S_Rec_Stop();         //&#191;aê&#188;I2Sêy&#190;Y&#189;óê&#213;(′ó&#187;ú)
}

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ò&#244;&#198;μ,Dèòa′|àíò&#187;&#207;&#194;
        {
//        //        readlen=(size/4)*3;                                                        //′&#203;′&#206;òa&#182;áè&#161;μ&#196;×&#214;&#189;úêy
////                f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread);        //&#182;áè&#161;êy&#190;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;                //ì&#238;3&#228;oóμ&#196;′óD&#161;.
        }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卡读出来的音频数据就行了。

一周热门 更多>