AD1955使用音量寄存器调小音量是有噪声
有没有使用过AD1955的,使用默认的音量寄存器设置时,音质很好;但把值调小,比如0x7FFF(右声道)和0x7FFE(左声道)时,类似调频广播的那种莎莎的噪声很大之前试过WM8740的没有这个问题。1955没用过 没有这个问题,看看写入的寄存器数据是否错了,最好看一下。 cheungman 发表于 2015-1-22 14:24
没有这个问题,看看写入的寄存器数据是否错了,最好看一下。
用逻辑分析仪看了下,发出去的是没错。AD1955缺乏读,也不知道是不是真的写进去了
把左声道设成0xFF02,右声道设成0x0003,右声道没声了,左声道有强烈的莎莎声,是在搞不懂 程序?电路有吗? 原理图来了
程序片段
/******************************************************
* Function: AD1955 Init
* Input: uint16_t bitsPerSample
* Output: void
* Detail: None
*****************************************************/
void SND_AD1955Init(uint16_t bitsPerSample)
{
uint8_t txbuf, rxbuf;
dspi_status_t status;
// Control Register 0
switch(bitsPerSample)
{
case 16:
txbuf= 0x0C;
break;
case 18:
txbuf= 0x08;
break;
case 20:
txbuf= 0x04;
break;
case 24:
txbuf= 0x00;
break;
default:
xprintf("AD1955\tbitsPerSample Error\n");
break;
}
txbuf= 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= 0x00;
// txbuf= 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= 0x70;
// txbuf= 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= 0x70;
// txbuf= 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");
} cheungman 发表于 2015-1-22 14:24
没有这个问题,看看写入的寄存器数据是否错了,最好看一下。
总算是有点找到问题了,很奇怪!
貌似写寄存器时只有最后一条生效,并把其他的3个寄存器重设了。
我的I2S输入的是16bits的,所以设置音量时,Reg0被重设成了默认的24bits的,这才有了噪声。
这很难理解,设置一个寄存器会复位其他3个寄存器! 总算找到原因了,如果I2S MCLK不给时钟的话,只有最有一个寄存器设置值会生效!
也就是说,要在I2S有时钟时设置才有效 多谢楼主分享,正准备搞 AD1955。
页:
[1]