This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

aic3204

我想用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,0x05 );  // 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

希望得到帮助,谢谢!

  • Hi

    这两种方法在配置上不太一样,其次就是Mono Differential DAC to Mono Differential Headphone Output配置完后就不能做一些混音,而Mono DAC and Analog Bypass Input to Mono Differential Headphone Output配置完后还可以做混音。

    具体见下图:

    还有就是看了你的配置发现你的时钟配置有点问题,下图是你们的配置的设置吗?

  • 我有一问题:

    外部单片机控制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拉高

    读出来的是乱码。

     

    请帮助判断上述过程是否有错误?

    谢谢!

  • 另外,3254的SPI是CPOL=0、CPHA=1吗?也即,在CLK的下降沿捕获数据?

    或设置为CPOL=0、CPHA=0,在CLK的上升沿捕获数据?

    哪种对?或都可以?

  • 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.

  • 按上一贴步骤,仔细检查,SPI 读出结果仍然为乱码。

    能否将外部MCU控制3254 SPI 的代码发给我看一下。

    谢谢!

  • Hi Yi Huang,

    你用我们EVM板,使用SPI和GUI通信成功没?不好意思,我这边没有外部MCU控制3254的代码。另外能否将你的SPI通信波形捕获下来,对比我们datasheet要求的时序看看有什么不同?

    Thanks.

  • 还有一问题:

    外部单片机控制3254的MCLK,1根连线连到EVM-k的MCLK管脚上(当然共地),3254的其它管脚连线仍在EVM-K上各连线上,SW2上的USB MCLK关。

    通过CS配置各寄存器值,这时如果SW2上的USB MCLK开,也即MCLK由TAS1020B提供,声音播放正常。这时把 SW2上的USB MCLK关,其它连线不变,这时没有任何声音。

    请帮助判断上述过程是否有错误?

    谢谢!

  • Hi Yi Huang,

    SW2上的USB MCLK关的时候,你MCU发出的MCLK是否正常?

  • 正常,MCLK=8M。与TAS1020B提供MCLK=12.288M,稍微有点不同,当然PLL等系数也做相应调整,保持WCLK=32k,BCLK=2M不变。谢谢!

  • 是不是这时WCLK、BCLK也需要由外部MCU提供?不能仍由TAS1020B提供。

    整个过程SPI信号一直由TAS1020B提供。

    谢谢!

  • Hi,

    I2S时钟MCLK、BCLK、WCLK必须同源,即由同一时钟源分频得到,否则不同时钟源之间的相位偏差会造成时钟不同步,Codec无法正常工作。

    Thanks.

  • 你好,你试过5535给的tests里的aic3204程序吗?我测试的时候EZDSP5535_I2S_writeLeft()的while((CSL_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL) == 0),中CSL_I2S_I2SINTFL_XMITSTFL_MASK这个宏没找到,但是EZDSP5535_I2S_writeRight()中这个while((CSL_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL) == 0); 函数被注释掉了。你测试耳机有输出的例子的时候有这种情况吗?

  • 你好,

          我好久不做这个了,我当时做的时候是用的5535的test的例子,测试耳机是可以听到声音的