主题中讨论的其他器件:PCM1792
您好!
下面是我的 PCM1792实现:
PCM1792通过 Xmos CPU 执行、其实现方式如下:
此设计工作正常、但当"AUDIO_MCLK"频率从22.5792Mhz 更改为 24.576时会出现问题、反之亦然:当更改 AUDIO_MCLK 频率时、DAC 会产生一些"裂缝"或"噼啪"噪声。
此外、当 AUDIO_CLK 频率不变但 LRCK/BCK 发生变化时、也会出现噼啪/噪声、例如当音频流从44.1kHz 变为88.2kHz 或48kHz 至96kHz 时、出现 exemple、因此问题可能与 LRCK/BCK 发生变化有关。
仅当 Xmos 检测到音频流(来自 USB)发生变化时、频率才会发生变化;对于纹波、频率从44.1kHz 移动到48kHz。 然后是由 PLL (来自微芯片的 PLL611)生成的音频时钟。
当从 USB 流检测到频率变化时、我尝试遵循 I2C 命令序列以避免 DAC 产生裂缝/噼啪噪声:
1频率更改请求
2 -将 DAC 置于禁用 DAC 工作模式、在0x13寄存器(位 OPE)中写入0x10
3在这里放置一些从几百毫秒到几毫秒的延迟
PLL611组件上的4次改变频率
5在这里放置一些从几百毫秒到毫秒的延迟
6回路、用于检测新的音频频率(低于50kHz、低于100kHz 或低于200kHz)、然后使用正确的 fs 从寄存器0x14馈入 OSX 字节(低于100kHz 时为00、低于200kHz 时为01、低于50kHz 时为10)、代码如下:
IF (samFreq < 50000)// 44.1、48kHz。
{
DAC_REGWRITE (0x14、0x02);//128fs 44/48K
}
否则、如果(samFreq < 100000)// 88.2、96kHz。
{
DAC_REGWRITE (0x14、0x00);//64fs 88/96k
}
否则、如果(samFreq < 200000)// 176.4、192kHz。
{
DAC_REGWRITE (0x14、0x01);//32fs 188/192k
}
7在这里放置一些延迟
8输入 DAC 使能在0x13寄存器中写入0x0的 DAC 操作
在该配置下、仍然存在噼啪/裂缝噪声、然后我尝试采用静音模式(寄存器0x12中的位 MUTE 而不是寄存器0x13的位 OPE)、仍然存在噼啪/裂缝、 然后尝试使用0手动将0x10和0x11寄存器输入为0、以实现"强制静音"、然后尽管使用 ATLD 位、没有变化仍然会弹出/破裂... 我在时钟更改和 MUT/EN 操作之间播放延迟、但不成功...
是否有人可以帮助我定义正确的 i2c 控制命令序列,以避免在更改音频频率时 DAC 输出出现爆裂/破裂?
注意:频率变化时仅存在噼啪/裂缝、更改一次频率后 DAC 工作正常、无任何噼啪/裂缝噪声。