我想用aic3204的DSP模式,数据格式为mono,耳机的输出模式Mono Differential DAC to Mono Differential Headphone Output和Mono DAC and Analog Bypass Input to Mono Differential Headphone Output这两种模式有什么区别呢,下面是我的配置,在C5535的一个例子上改的,我将I2S配成了dsp模式,耳机有声音输出,但是用示波器看波形的时候,波形不对,我发的是一个正弦信号,走势大致正确。请问是什么原因呢,我现在不用AD,只用到了DA部分。
AIC3204_rset( 0, 0x00 ); // Select page 0
AIC3204_rset( 1, 0x01 ); // Reset codec
EZDSP5535_waitusec(1000); // Wait 1ms after reset
AIC3204_rset( 0, 0x01 ); // Select page 1
AIC3204_rset( 1, 0x08 ); // Disable crude AVDD generation from DVDD
AIC3204_rset( 2, 0x01 ); // Enable Analog Blocks, use LDO power
AIC3204_rset( 123,0×05 ); // Force reference to power up in 40ms
EZDSP5535_waitusec(50000); // Wait at least 40ms
AIC3204_rset( 0, 0x00 ); // Select page 0
/* PLL and Clocks config and Power Up */
AIC3204_rset( 27, 0x4d ); // BCLK and WCLK are set as o/p; AIC3204(Master)
AIC3204_rset( 28, 0x01 ); // Data ofset = 0
AIC3204_rset( 4, 0x03 ); // PLL setting: PLLCLK <- MCLK, CODEC_CLKIN <-PLL CLK
AIC3204_rset( 6, 0x07 ); // PLL setting: J=7
AIC3204_rset( 7, 0x06 ); // PLL setting: HI_BYTE(D=1680)
AIC3204_rset( 8, 0x90 ); // PLL setting: LO_BYTE(D=1680)
AIC3204_rset( 30, 0x88 ); // For 32 bit clocks per frame in Master mode ONLY
// BCLK=DAC_CLK/N =(12288000/8) = 1.536MHz = 32*fs
AIC3204_rset( 5, 0x91 ); // PLL setting: Power up PLL, P=1 and R=1
EZDSP5535_waitusec(10000); // Wait for PLL to come up
AIC3204_rset( 13, 0x00 ); // Hi_Byte(DOSR) for DOSR = 128 decimal or 0x0080 DAC oversamppling
AIC3204_rset( 14, 0x80 ); // Lo_Byte(DOSR) for DOSR = 128 decimal or 0x0080
AIC3204_rset( 20, 0x80 ); // AOSR for AOSR = 128 decimal or 0x0080 for decimation filters 1 to 6
AIC3204_rset( 11, 0x82 ); // Power up NDAC and set NDAC value to 2
AIC3204_rset( 12, 0x87 ); // Power up MDAC and set MDAC value to 7
AIC3204_rset( 18, 0x87 ); // Power up NADC and set NADC value to 7
AIC3204_rset( 19, 0x82 ); // Power up MADC and set MADC value to 2
/* DAC ROUTING and Power Up */
AIC3204_rset( 0, 0x01 ); // Select page 1
//AIC3204_rset( 9, 0x30 );
//AIC3204_rset( 10, 0x03 ); //#COMMON MODE CONTROL REGISTER Output of HP is powered by LDOIN
//AIC3204_rset( 11, 0x10 ); //Over Current detection is enabled for HPL & HPR
AIC3204_rset( 12, 0x08 ); // LDAC AFIR routed to HPL
AIC3204_rset( 13, 0x10 ); // RDAC AFIR routed to HPR
AIC3204_rset( 0, 0x00 ); // Select page 0
AIC3204_rset( 64, 0x82 ); // Left vol=right vol
AIC3204_rset( 65, 0x00 ); // Left DAC gain to 0dB VOL; Right tracks Left
AIC3204_rset( 63, 0x90 ); // Power up left,right data paths and set channel
AIC3204_rset( 0, 0x01 ); // Select page 1
AIC3204_rset( 16, 0x3c ); // Unmute HPL , 0dB gain
AIC3204_rset( 17, 0x3c ); // Unmute HPR , 0dB gain
AIC3204_rset( 9 , 0x30 ); // Power up HPL,HPR
EZDSP5535_waitusec(100 ); // Wait
希望得到帮助,谢谢!
Derek Xie:
Hi
这两种方法在配置上不太一样,其次就是Mono Differential DAC to Mono Differential Headphone Output配置完后就不能做一些混音,而Mono DAC and Analog Bypass Input to Mono Differential Headphone Output配置完后还可以做混音。
具体见下图:
还有就是看了你的配置发现你的时钟配置有点问题,下图是你们的配置的设置吗?
yi huang:
我有一问题:
外部单片机控制3254的SPI,4根连线:CS、CLK、MOSI、MISO。3254的其它管脚连线仍在EVM-K上各连线上,SW2上的USB SPI关,3254的MCLK仍由EVM板提供。
通过以下步骤写寄存器值:
CS拉低 SPI_Write(地址) SPI_Write(数据) CS拉高
现在问题是:发现数据写不进去,因为通过如下步骤读寄存器值:
CS拉低 SPI_Write(地址) SPI_Read(数据) CS拉高
读出来的是乱码。
请帮助判断上述过程是否有错误?
谢谢!
yi huang:
回复 yi huang:
另外,3254的SPI是CPOL=0、CPHA=1吗?也即,在CLK的下降沿捕获数据?
或设置为CPOL=0、CPHA=0,在CLK的上升沿捕获数据?
哪种对?或都可以?
Jacky Wang(QD):
回复 yi huang:
Hi Yi Huang,
“
外部单片机控制3254的SPI,4根连线:CS、CLK、MOSI、MISO。3254的其它管脚连线仍在EVM-K上各连线上,SW2上的USB SPI关,3254的MCLK仍由EVM板提供。
通过以下步骤写寄存器值:
CS拉低 SPI_Write(地址) SPI_Write(数据) CS拉高
现在问题是:发现数据写不进去,因为通过如下步骤读寄存器值:
CS拉低 SPI_Write(地址) SPI_Read(数据) CS拉高
读出来的是乱码。
”
1. 除了SPI 4根线,MCU与3254 EVM板之间是否共地?
2. 是否设置SW1选为SPI通信方式?
“
另外,3254的SPI是CPOL=0、CPHA=1吗?也即,在CLK的下降沿捕获数据?
或设置为CPOL=0、CPHA=0,在CLK的上升沿捕获数据?
哪种对?或都可以?
”
1. AIC3254默认主机(MCU)的SPI设置为CPOL=0、CPHA=1, SCLK下降沿捕获数据。CPOL=0,时钟空闲idle时候的电平是低电平,CPHA=1,下降沿采样数据。
Thanks.
yi huang:
回复 Jacky Wang(QD):
按上一贴步骤,仔细检查,SPI 读出结果仍然为乱码。
能否将外部MCU控制3254 SPI 的代码发给我看一下。
谢谢!
Jacky Wang(QD):
回复 yi huang:
Hi Yi Huang,
你用我们EVM板,使用SPI和GUI通信成功没?不好意思,我这边没有外部MCU控制3254的代码。另外能否将你的SPI通信波形捕获下来,对比我们datasheet要求的时序看看有什么不同?
Thanks.
yi huang:
回复 yi huang:
还有一问题:
外部单片机控制3254的MCLK,1根连线连到EVM-k的MCLK管脚上(当然共地),3254的其它管脚连线仍在EVM-K上各连线上,SW2上的USB MCLK关。
通过CS配置各寄存器值,这时如果SW2上的USB MCLK开,也即MCLK由TAS1020B提供,声音播放正常。这时把 SW2上的USB MCLK关,其它连线不变,这时没有任何声音。
请帮助判断上述过程是否有错误?
谢谢!
Jacky Wang(QD):
回复 yi huang:
Hi Yi Huang,
SW2上的USB MCLK关的时候,你MCU发出的MCLK是否正常?
yi huang:
回复 Jacky Wang(QD):
正常,MCLK=8M。与TAS1020B提供MCLK=12.288M,稍微有点不同,当然PLL等系数也做相应调整,保持WCLK=32k,BCLK=2M不变。谢谢!
yi huang:
回复 yi huang:
是不是这时WCLK、BCLK也需要由外部MCU提供?不能仍由TAS1020B提供。
整个过程SPI信号一直由TAS1020B提供。
谢谢!