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.

TLV320AIC3101 开始录音的POP声

Other Parts Discussed in Thread: TLV320AIC3101

你好!

  我们用TLV320AIC3101 开始录音,电路按照规格书,出现0.4S左右的破音,正常吗?用耳机监听,有明显的POP声

 有没有好的解决办法?

  • 您好,

    感谢您使用E2E中文论坛,您的问题我正在处理,我会尽快回复您。
  • 您好,这完全取决于你的录音顺序,你能分享出你的顺序吗?
  • void InitCodec()
    {    
        volatile unsigned int delay = 0xFFF;    
        /* Select Page 0 */
        CodecRegWrite(AIC31_P0_REG0, 0,sizeof(CodecWrite));    
        /* Reset the codec */
        CodecRegWrite(AIC31_P0_REG1, AIC31_RESET,sizeof(CodecWrite));    
        while(delay--);
        
        
        CodecRegWrite(AIC31_P0_REG9, (0u << 6u | 2u << 4u),sizeof(CodecWrite));

        CodecRegWrite(AIC31_P0_REG10, 0,sizeof(CodecWrite));
        
        CodecRegWrite( AIC31_P0_REG8, 0x00,sizeof(CodecWrite));

        CodecRegWrite(AIC31_P0_REG7, 0x0A,sizeof(CodecWrite));
            
        //set ADC    
        CodecRegWrite(AIC31_P0_REG15, 0x00,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG16, 0x00,sizeof(CodecWrite));

        CodecRegWrite(AIC31_P0_REG17, 0x0F,sizeof(CodecWrite));


        CodecRegWrite(AIC31_P0_REG18, 0xF0,sizeof(CodecWrite));

        CodecRegWrite(AIC31_P0_REG25, 0x40,sizeof(CodecWrite));

        CodecRegWrite(AIC31_P0_REG19, 0x04,sizeof(CodecWrite));
        
        CodecRegWrite(AIC31_P0_REG22, 0x04,sizeof(CodecWrite));

        //set DAC
        CodecRegWrite(AIC31_P0_REG37, 0xE0,sizeof(CodecWrite));


        CodecRegWrite(AIC31_P0_REG41, 0x02,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG42, 0x6C,sizeof(CodecWrite));


        CodecRegWrite(AIC31_P0_REG47, 0x80,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG46, 0x80,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG51, 0x01,sizeof(CodecWrite));


        CodecRegWrite(AIC31_P0_REG64, 0x80,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG63, 0x80,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG65, 0x01,sizeof(CodecWrite));


        CodecRegWrite(AIC31_P0_REG43, 0x00,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG44, 0x00,sizeof(CodecWrite));

        CyDelay(500);

        CodecRegWrite(AIC31_P0_REG51, 0x09,sizeof(CodecWrite));
        CodecRegWrite(AIC31_P0_REG65, 0x09,sizeof(CodecWrite));
    }

  • 这看起来像初始化,您每次录制时都运行这个吗?

  • 因为有低功耗要求,TLV320AIC3101经常进入深度睡眠,所以每次都会初始化,再录音

  • 以下是我的建议:

    volatile unsigned int delay = 0xFFF;    

       /* Select Page 0 */

       CodecRegWrite(AIC31_P0_REG0, 0,sizeof(CodecWrite));    

       /* Reset the codec */

       CodecRegWrite(AIC31_P0_REG1, AIC31_RESET,sizeof(CodecWrite));    

       while(delay--);

       CodecRegWrite(AIC31_P0_REG9, (0u << 6u | 2u << 4u),sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG10, 0,sizeof(CodecWrite));

       CodecRegWrite( AIC31_P0_REG8, 0x00,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG7, 0x0A,sizeof(CodecWrite));

       //set ADC    

       CodecRegWrite(AIC31_P0_REG15, 0x00,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG16, 0x00,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG17, 0x0F,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG18, 0xF0,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG25, 0x40,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG19, 0x04,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG22, 0x04,sizeof(CodecWrite));

       //set DAC

       CodecRegWrite(AIC31_P0_REG37, 0xE0,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG41, 0x02,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG42, 0x6C,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG47, 0x80,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG46, 0x80,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG51, 0x01,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG64, 0x80,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG63, 0x80,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG65, 0x01,sizeof(CodecWrite));

    //The delay below should match the ramp up time set  in register 42.  this is to allow the output to power up.Alternately wait until Reg 94 D1 = '1'.

       CyDelay(500);

       CodecRegWrite(AIC31_P0_REG51, 0x09,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG65, 0x09,sizeof(CodecWrite));

    //  the delay below is a function of the soft stepping. if set to 1step per sample this is 508/fs .  if set to 1 step every 2 samples then 1016/fs.

      CyDelay(500)

       CodecRegWrite(AIC31_P0_REG43, 0x00,sizeof(CodecWrite));

       CodecRegWrite(AIC31_P0_REG44, 0x00,sizeof(CodecWrite));

    // the delay below is a function of the soft stepping. if set to 1step per sample this is 508/fs .  if set to 1 step every 2 samples then 1016/fs.

       CyDelay(500);

    }

    如果你能利用HPOUT上的弱偏压,这将消除任何剩余的POP音。所以在设备首次初始化时启用弱偏压。当然,在启用时会有轻微的电流消耗。

    If you can make use of the weak bias on the HPOUT,  that would eliminate any residual pop on power up. so if you enable the weak bias when the device first initializes only,  that would do the trick. of course there is a slight current draw when this is enabled.  so make sure it is acceptable for you.

  • 谢谢,问题已经解决