Hello guys,
I have a problem with TLV320DAC3100.
I'm trying to use Class-D Speaker Amplifier.
When I set the register Page1 / Register 32 to "Class-D power down",
I can hear some popping from the speaker.
I couldn't find any de-pop settings for Class-D speaker but Headphone.
The example script in the datasheet was not helpful for me.
Please let me know if anything I'm missing for this.
Below are my current settings.
Audio_I2C_Write(0x00, 0x00); //Program Page 0 Registers
Audio_I2C_Write(0x01, 0x01); //Page 0 : Software Reset
Audio_I2C_Write(0x0B, 0x81); //Page 0 : NDAC divider = 1, Powered up
Audio_I2C_Write(0x0C, 0x82); //Page 0 : NDAC divider = 2, Powered up
Audio_I2C_Write(0x0D, 0x00); //Page 0 : DOSR = 0
Audio_I2C_Write(0x1B, 0x00); //Page 0 : Set I2S slave mode
Audio_I2C_Write(0x3F, 0xFD); //Page 0 : DAC is powered up.
Audio_I2C_Write(0x40, 0x00); //Page 0 : Unmute DAC left and right channels
Audio_I2C_Write(0x41, 0x0C); //Page 0 : DAC Left gain = 6dBm
Audio_I2C_Write(0x42, 0x0C); //Page 0 : DAC Right gain = 6dBm
Audio_I2C_Write(0x74, 0x00); //Page 0 : DAC volume control register */
Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
Audio_I2C_Write(0x23, 0x44); //Page 1 : LDAC, RDAC routed to the mixer amplifier
void Audio_Set_Volume(uint8_t Audio_Volume)
{
uint8_t Volume_Control;
switch(Audio_Volume)
{
case 0 : Volume_Control = 0x7F; break; //Volume 0(MIN)
case 1 : Volume_Control = 0x20; break; //Volume 1
case 2 : Volume_Control = 0x18; break; //Volume 2
case 3 : Volume_Control = 0x10; break; //Volume 3
case 4 : Volume_Control = 0x08; break; //Volume 4
case 5 : Volume_Control = 0x00; break; //Volume 5(MAX)
default : return;
}
Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
Audio_I2C_Write(0x26, Volume_Control + 0x80); //Left Speaker analogue volume
}
void Audio_Mute(uint8_t Audio_Mute_Mode)
{
if(Audio_Mute_Mode == ENABLE)
{
Audio_Set_Volume(0);
Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
Audio_I2C_Write(0x2A, 0x00); //Page 1 : Mute class -D, Set gain = 6dB
Audio_I2C_Write(0x20, 0x06); //Page 1 : Power down class -D
}
else
{
Audio_Set_Volume(Set_Data.volume);
Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
Audio_I2C_Write(0x2A, 0x04); //Page 1 : Unmute class -D, Set gain = 6dB
Audio_I2C_Write(0x20, 0x86); //Page 1 : Power up unmute class -D
}
}
Waiting for your reply.
Thank you!