搜索
bottom↓
回复: 10

AD1955使用音量寄存器调小音量是有噪声

[复制链接]

出0入0汤圆

发表于 2015-1-22 13:07:35 | 显示全部楼层 |阅读模式
有没有使用过AD1955的,使用默认的音量寄存器设置时,音质很好;但把值调小,比如0x7FFF(右声道)和0x7FFE(左声道)时,类似调频广播的那种莎莎的噪声很大


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入54汤圆

发表于 2015-1-22 13:31:58 | 显示全部楼层
之前试过WM8740的没有这个问题。1955没用过

出0入0汤圆

发表于 2015-1-22 14:24:28 | 显示全部楼层
没有这个问题,看看写入的寄存器数据是否错了,最好看一下。

出0入0汤圆

 楼主| 发表于 2015-1-22 15:51:37 | 显示全部楼层
cheungman 发表于 2015-1-22 14:24
没有这个问题,看看写入的寄存器数据是否错了,最好看一下。

用逻辑分析仪看了下,发出去的是没错。AD1955缺乏读,也不知道是不是真的写进去了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-22 17:15:57 | 显示全部楼层
把左声道设成0xFF02,右声道设成0x0003,右声道没声了,左声道有强烈的莎莎声,是在搞不懂

出0入0汤圆

发表于 2015-1-22 17:38:44 来自手机 | 显示全部楼层
程序?电路有吗?

出0入0汤圆

 楼主| 发表于 2015-1-22 19:20:45 | 显示全部楼层
原理图来了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-1-22 19:27:37 | 显示全部楼层
程序片段

/******************************************************
* Function: AD1955 Init
* Input: uint16_t bitsPerSample
* Output: void
* Detail: None
*****************************************************/
void SND_AD1955Init(uint16_t bitsPerSample)
{
        uint8_t txbuf[2], rxbuf[2];
        dspi_status_t status;

        // Control Register 0
        switch(bitsPerSample)
        {
        case 16:
                txbuf[0]= 0x0C;
                break;
        case 18:
                txbuf[0]= 0x08;
                break;
        case 20:
                txbuf[0]= 0x04;
                break;
        case 24:
                txbuf[0]= 0x00;
                break;
        default:
                xprintf("AD1955\tbitsPerSample Error\n");
                break;
        }
        txbuf[1]= 0x00;
        do {
                status= DSPI_DRV_MasterGetTransferStatus(FSL_SPICOM1, NULL);
                } while(status == kStatus_DSPI_Busy);
        if(kStatus_DSPI_Success != DSPI_DRV_MasterTransfer(FSL_SPICOM1, &AD_BusConfig0, txbuf, rxbuf, 2))
                xprintf("AD1955\tDSPI Failed 2\n");

        // Control Register 1
//        txbuf[1]= 0x00;
//        txbuf[0]= 0x01;
//        do {
//                status= DSPI_DRV_MasterGetTransferStatus(FSL_SPICOM1, NULL);
//                } while(status == kStatus_DSPI_Busy);
//        if(kStatus_DSPI_Success != DSPI_DRV_MasterTransfer(FSL_SPICOM1, &AD_BusConfig0, txbuf, rxbuf, 2))
//                xprintf("AD1955\tDSPI Failed 2\n");

        // Volume Register L
//        txbuf[1]= 0x70;
//        txbuf[0]= 0x02;
//        do {
//                status= DSPI_DRV_MasterGetTransferStatus(FSL_SPICOM1, NULL);
//                } while(status == kStatus_DSPI_Busy);
//        if(kStatus_DSPI_Success != DSPI_DRV_MasterTransfer(FSL_SPICOM1, &AD_BusConfig0, txbuf, rxbuf, 2))
//                xprintf("AD1955\tDSPI Failed 2\n");

        // Volume Register R
//        txbuf[1]= 0x70;
//        txbuf[0]= 0x03;
//        do {
//                status= DSPI_DRV_MasterGetTransferStatus(FSL_SPICOM1, NULL);
//                } while(status == kStatus_DSPI_Busy);
//        if(kStatus_DSPI_Success != DSPI_DRV_MasterTransfer(FSL_SPICOM1, &AD_BusConfig0, txbuf, rxbuf, 2))
//                xprintf("AD1955\tDSPI Failed 2\n");
}

出0入0汤圆

 楼主| 发表于 2015-1-24 20:16:57 | 显示全部楼层
cheungman 发表于 2015-1-22 14:24
没有这个问题,看看写入的寄存器数据是否错了,最好看一下。

总算是有点找到问题了,很奇怪!
貌似写寄存器时只有最后一条生效,并把其他的3个寄存器重设了。
我的I2S输入的是16bits的,所以设置音量时,Reg0被重设成了默认的24bits的,这才有了噪声。
这很难理解,设置一个寄存器会复位其他3个寄存器!

出0入0汤圆

 楼主| 发表于 2015-1-24 20:57:43 | 显示全部楼层
总算找到原因了,如果I2S MCLK不给时钟的话,只有最有一个寄存器设置值会生效!
也就是说,要在I2S有时钟时设置才有效

出0入0汤圆

发表于 2015-1-25 22:53:41 | 显示全部楼层
多谢楼主分享,正准备搞 AD1955。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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