大家好、团队、
我们将 AIC3204与 STM32F103 MCU 搭配使用。 AIC3204用作 I2S 从器件半双工接收模式、通过独立的12.288MHz 振荡器生成 MCLK。 我们通过 I2S 从 STM32发送1KHz 正弦波值到 AIC3204、将 AIC3204 DAC 设置为8kHz 采样率、并从 HPL 单端输出时、会有一个离散噪声、例如高速"咔嗒"噪声跟随反向语音。 当采样率设置为48kHz 时、此高速"咔嗒"噪声将消失、但由于数据传输带宽、我们必须使用8Ksps。 请参阅用于编解码器初始化的源代码段、并向我们提供一些建议、非常感谢。
int16_t sinetable[]=
{
0x0000、0x0000、
0x5a81、0x0000、
0x7ffd、0x0000、
0x5a81、0x0000、
0x0000、0x0000、
0xa57f、0x0000、
0x8002、0x0000、
0xa57f、0x0000
};
void codec_initial (void)
{
AIC3204_Write (0、0);//选择 PAGE 0
AIC3204_Write (1、0x01);//重置编解码器
AIC3204_Write (0、1);//选择第1页
AIC3204_Write (1、0x08);//禁用从 DVDD 生成粗略 AVDD
AIC3204_Write (2、0x01);//启用模拟块,使用 LDO 电源
/* PLL 和时钟配置和上电*/
AIC3204_Write (0、0);
AIC3204_Write (4、0x03);// PLL 设置:PLLCLK <- MCLK、CODE_CLKIN <- PLLCLK
AIC3204_Write (6、0x07);// PLL 设置:J=7
AIC3204_Write (7、0x00);// PLL 设置:hi_Byte (D=0)
AIC3204_Write (8、0x00);// PLL 设置:LO_BYTE (D=0)
AIC3204_Write (5、0x91);// PLL 设置:为 PLL 加电、P=1和 R=1
AIC3204_Write (13、0x03);// Hi Byte (DOSR)表示 DOSR = 768十进制或0x0080 DAC 过采样
AIC3204_Write (14、0x00);// Lo_Byte (DOSR)表示 DOSR = 768十进制或0x0080
AIC3204_Write (11、0x82);//为 NDAC 加电并将 NDAC 值设置为2
AIC3204_Write (12、0x87);//为 MDAC 加电并将 MDAC 值设置为7
//AIC3204_Write (60、0x08);// DAC 模式至 PRB_R8
/* DAC 布线和上电*/
AIC3204_Write (0、1);//选择第1页
AIC3204_Write (123、0x01);// REF 充电时间达40ms
AIC3204_Write (20、0x65/* 0x25*/);//无爆音模式
AIC3204_Write (10、0x33/*00*/);//输入共模
AIC3204_Write (12、0x08);//路由至 HPL 的 LDAC AFIR
//AIC3204_Write (3、0x08);//将 DAC PTM 模式更改为 PTM_P1
AIC3204_Write (16、0x00);//取消 HPL 静音,0dB 增益
AIC3204_Write (9、0x20);//加电 HPL、HPR、0x20表示左侧、0x30表示两者
HAL_DELAY (2500);
AIC3204_Write (0、0);//选择 PAGE 0
AIC3204_Write (64、0x04);//左侧 vol 依赖值、取消 LDAC 静音、使 RDAC 静音
AIC3204_Write (65、0xF0);//左 DAC 增益至0dB VOL;右跟踪左侧
AIC3204_Write (63、0x90);//向左、向右加电数据路径并设置通道、向左0x90、向两个通道均为0xD4
AIC3204_Write (0、0);//选择 PAGE 0
HAL_DELAY (100);//等待
}
静态 uint8_t s_tabVolume[]={0x40、0x07、0x0B、0x0E、0x11、 0x13};
void codec_SetVolumeHPL (uint8_t volume)
{
AIC3204_Write (0、1);//选择第1页
AIC3204_Write (16、s_tabVolume]);//取消 HPL 静音
AIC3204_Write (0、0);
}
void main (void)
{
codec_initial ();
CODE_SetVolumeHPL (1);
for (int i = 0;i < 0x10000;i++)
{
HAL_I2S_Transmit (&hi2s2、(uint16_t*) sinetable、sizeof (sinetable)/ sizeof (uint16_t)、100);
}
}