Other Parts Discussed in Thread: TAD5112
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: TAD5112
尊敬的所有人:
我在伪差分模式下将 TAD5112 用作耳机放大器、由 I2S、44.1kHz 音频、32 位字控制。 音频播放良好。 不播放音频时、使用内置耳机插孔检测功能。 该器件用于 eMDR 应用、因此可以播放~250ms 的左右交替蜂鸣音。 为了克服放大器的启动时间并防止砰砰声、我在整个会话中保持 I2S 运行、从而提供干净的无噪声音频体验。 当我停止会话时、我每秒执行一次耳机检测、但这是可以听到的。 在开发过程中、我了解到插孔检测是一个一次性功能。 我使用以下代码进行检测:
bool TAD5112::HeadphoneDetected(void) {
uint8_t value;
// 1. Select Page 1
if (!SelectPage(1)) return false;
WriteRegister(REG_P1_JACK_DET_CFG1, 0x0A);
Utils::DelayMs(75);
if(!ReadRegister(REG_P1_JACK_DET_CFG3, value)) return false;
WriteRegister(REG_P1_JACK_DET_CFG1, 0x00);
if((value & 0x70) == 0x70) { //ignore mic detection
return true;
}
return false;
}
要完成我的初始化代码:
_i2c.Init();
// Check if device is ready
if (!_i2c.isDeviceReady(_address, 3, I2C_TIMEOUT_MS)) {
return false;
}
_currentPage = 0xFF; // Reset page cache
// Perform a software reset
if (!SelectPage(0)) return false;
if (!WriteRegister(REG_RESET, 0x01)) { // Write 0x01 to Reset register
return false;
}
Utils::DelayMs(10); // Wait for reset to complete (datasheet recommends 10ms)
if (!WriteRegister(REG_P0_DEV_MISC_CFG, 0x09)) return false; // Disable sleep mode
Utils::DelayMs(2);
if (!WriteRegister(REG_P0_PASI_CFG0, 0x70)) return false; //Select I2S communication, 32bit words
if (!WriteRegister(REG_P0_PASI_RX_CFG0, 0x00)) return false; //Set 1 clock offset in I2S communication
if (!WriteRegister(REG_P0_PASI_RX_CH1_CFG, 0x20)) return false; //ASI channel 1 = DAC channel 1, I2S left slot 0
if (!WriteRegister(REG_P0_PASI_RX_CH2_CFG, 0x30)) return false; //ASI channel 2 = DAC channel 2, I2S right slot 0
if (!WriteRegister(REG_P0_OUT1x_CFG0, 0x34)) return false; //OUT1 to input from DAC, pseudo differential mode, AVDD / 2
if (!WriteRegister(REG_P0_OUT1x_CFG1, 0x60)) return false; //OUT1P headphone mode, 0dB gain
if (!WriteRegister(REG_P0_OUT1x_CFG2, 0x60)) return false; //OUT1M headphone mode
if (!WriteRegister(REG_P0_OUT2x_CFG0, 0x30)) return false; // 0b00110010 OUT2 to input from DAC, pseudo differential mode
if (!WriteRegister(REG_P0_OUT2x_CFG1, 0x60)) return false; //OUT2P headphone mode, 0dB gain
if (!WriteRegister(REG_P0_OUT2x_CFG2, 0x60)) return false; //OUT2M headphone mode
if (!WriteRegister(REG_P0_CH_EN, 0x0C)) return false; // enable DAC channels 1 & 2
if (!WriteRegister(REG_P0_DSP_CFG0, 0b00101000)) return false; // disable volume ramping
if (!WriteRegister(REG_P0_DSP_CFG1, 0b00101000)) return false; // disable volume ramping
if (!WriteRegister(REG_P0_MISC_CFG0, 0x00)) return false; // disable power up delay
if (!WriteRegister(REG_P0_DYN_PUPD_CFG, 0x20)) return false; // enable DAC dynamic power up & down
if (!WriteRegister(REG_P0_PWR_CFG, 0x40)) return false; // power up DAC;
如何减少插孔检测导致的咔嗒声?
提前感谢、
Robin