OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5751|回复: 11

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

[复制链接]

5

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-5-4
在线时间
8 小时
发表于 2016-11-2 17:18:22 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2016-9-16
在线时间
38 小时
发表于 2017-3-28 11:48:05 | 显示全部楼层
楼主,请问你的驱动程序搞出来没?我正准备弄这个东西,能分享下吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-3-28 23:31:36 | 显示全部楼层
我们的录音机程序就可以。只要你把我们一直发送的0,变成你要播放的音频数据流就可以了
回复

使用道具 举报

78

主题

137

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-6-28
在线时间
138 小时
发表于 2017-6-28 21:00:34 | 显示全部楼层
正点原子 发表于 2017-3-28 23:31
我们的录音机程序就可以。只要你把我们一直发送的0,变成你要播放的音频数据流就可以了

原子哥,全双工的例程,你发一下啊
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-9-10
在线时间
7 小时
发表于 2018-9-17 15:07:34 | 显示全部楼层
正点原子 发表于 2017-3-28 23:31
我们的录音机程序就可以。只要你把我们一直发送的0,变成你要播放的音频数据流就可以了

原子哥  发送的0是啥意思 哪儿发送的0
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-9-18 02:07:09 | 显示全部楼层
ljszfc12333 发表于 2018-9-17 15:07
原子哥  发送的0是啥意思 哪儿发送的0

因为我们设置的i2s工作在 主机模式下,必须发送数据,产生LRCK才可以正常读取来自ADC的数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2018-12-16
在线时间
1 小时
发表于 2018-12-16 15:06:20 | 显示全部楼层
有实现的吗  能共享下吗  感谢
回复

使用道具 举报

14

主题

62

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7703
金钱
7703
注册时间
2011-10-14
在线时间
704 小时
发表于 2019-4-24 16:25:38 | 显示全部楼层
大家好,我也正在做这个,但总是不成功,大家有例程吗?就是采样的同时播放实时采样的音频。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-5-7
在线时间
3 小时
发表于 2019-5-13 15:47:48 来自手机 | 显示全部楼层
正点原子 发表于 2018-9-18 02:07
因为我们设置的i2s工作在 主机模式下,必须发送数据,产生LRCK才可以正常读取来自ADC的数据。

原子哥,可以加QQ或者微信聊么,你说的这个方法不太会啊,这个例程看了好久了,发0是在哪里发的啊
回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2019-5-15 16:27:38 | 显示全部楼层
本帖最后由 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卡读出来的音频数据就行了。

回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-5-16
在线时间
10 小时
发表于 2019-9-25 18:30:55 | 显示全部楼层
请问你会遇到啸叫问题吗
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-12-18
在线时间
9 小时
发表于 2019-12-20 20:36:51 | 显示全部楼层
13372533333 发表于 2019-5-15 16:27
void recoder_enter_rec_mode(void)
{
        WM8978_ADDA_Cfg(1,1);                //&#191;a&#198; ...

请问里面的my_decode_init(&wavctrl)函数是怎么使用的?如何定义的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 08:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表