OpenEdv-开源电子网

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

WM8978的loopback环回功能调不通,bypass有声音

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-5-2
在线时间
6 小时
发表于 2019-5-4 00:12:03 | 显示全部楼层 |阅读模式
1金钱
STM32F407的板子外接WM8978模块,打算用L2和R2输入(3.5mm接口),使用LOOPBACK功能将AD的数据直接传给DA(为了使用内置的均衡器),然后经LOUT1和ROUT1输出(耳机)。按照这个思路有了以下的配置代码,对WM8978寄存器的进行配置以后OUT1完全没有输出,不知道是哪里配置错了,求助各位大大,感激不尽!!!

(以下的寄存器都进行了宏定义,看看注释)
[mw_shl_code=c,true]
       
        //软复位
        WM8978_Write_Reg(RST,0x000);
       
        /*使能*/
        //Vmin电阻选择5k(快速启动)/开启模拟电路偏置/未使用输出封锁
        WM8978_Write_Reg(PWR_M1,VMIN_SEL_5K|BIAS_EN|BUF_IO_EN);
        //ADC使能/输出1使能/推子使能
        WM8978_Write_Reg(PWR_M2,ADC_EN_L|ADC_EN_R|LOUT1_EN|ROUT1_EN|BOOST_EN_L|BOOST_EN_R);
        //DAC使能/混音器使能
        WM8978_Write_Reg(PWR_M3,DAC_EN_L|DAC_EN_R|MIX_EN_L|MIX_EN_R);                                                                                                                                                                       
       
        /*信号路径*/
       
        /*模拟输入*/
        //PGA输入选择:无
        WM8978_Write_Reg(IN,0);                                                                                                                               
        //PGA增益:关闭
        WM8978_Write_Reg(IN_L_GAIN,INP_PGA_MUTE);                                                       
        WM8978_Write_Reg(IN_R_GAIN,INP_PGA_MUTE);
        //推子2 R2 +0db
        WM8978_Write_Reg(ADC_L_BOOST,PGA_BOOST|(5<<OF_LR2_2_BOOST_VOL));               
        WM8978_Write_Reg(ADC_R_BOOST,PGA_BOOST|(5<<OF_LR2_2_BOOST_VOL));
       
        /*ADC*/
        //过采样x128,高通滤波
        WM8978_Write_Reg(ADCC,ADC_OSR|HPF_EN);
        //+0db
        WM8978_Write_Reg(ADC_L_VOL,255);                       
        WM8978_Write_Reg(ADC_R_VOL,255|ADC_VU);
       
        //开启环回
        WM8978_Write_Reg(CMP,LOOPBACK);
       
        /*DAC*/
        //过采样x128
        WM8978_Write_Reg(DACC,DAC_OSR);
        //+0db
        WM8978_Write_Reg(DAC_L_VOL,255);
        WM8978_Write_Reg(DAC_R_VOL,255|DAC_VU);
       
        /*模拟输出*/
        //过热保护使能
        WM8978_Write_Reg(OUT,TSD_EN);                                                                                                       
        //混音器输入选择:DAC
        WM8978_Write_Reg(MIX_L,DAC_2_MIX);                                                                                       
        WM8978_Write_Reg(MIX_R,DAC_2_MIX);
        //OUT1 +0db
        WM8978_Write_Reg(OUT1_L_VOL,0x39|OUTx_ZC);                                                       
        WM8978_Write_Reg(OUT1_R_VOL,0x39|OUTx_ZC|OUTx_VU);
       
        [/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-5-2
在线时间
6 小时
 楼主| 发表于 2019-5-4 00:16:19 | 显示全部楼层
尝试将进ADC前的信号Bypass到MIX,有声音,所以我觉得问题可能在于ADC和DAC的环节
[mw_shl_code=c,true]//        //混音器输入选择:DAC
//        WM8978_Write_Reg(MIX_L,DAC_2_MIX);                                                                                       
//        WM8978_Write_Reg(MIX_R,DAC_2_MIX);                                                                               
        //混音器输入选择:BYPASS
        WM8978_Write_Reg(MIX_L,BYP_2_MIX);                                                                                       
        WM8978_Write_Reg(MIX_R,BYP_2_MIX);[/mw_shl_code]
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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