我们通过规格书,配置了44.1k的采样率,然后边录边播,会时不时出现破音。请问怎么解决?我贴出配置的寄存器和电路如下:
snd_soc_write(codec, 0x00, 0x00);//切换寄存器页到页0
snd_soc_write(codec, 0x01, 0x01);//软复位
//2
snd_soc_write(codec, 0x04, 0x03);//set pll=mclk, codev_clk=pll
snd_soc_write(codec, 0x05, 0x91);//set p=r=1
snd_soc_write(codec, 0x06, 0x07);//set j=7
//d=5264
snd_soc_write(codec, 0x07, 0x14);
snd_soc_write(codec, 0x08, 0x90);
//snd_soc_write(codec, 0x05, 0x91);//
snd_soc_write(codec, 0x12, 0x88);// NADC = 8
snd_soc_write(codec, 0x13, 0x82);// MADC = 2
snd_soc_write(codec, 0x14, 0x80);// AOSR = 128
snd_soc_write(codec, 0x1b, 0x0c);//
snd_soc_write(codec, 0x1d, 0x07);
snd_soc_write(codec, 0x1e, 0x82);
snd_soc_write(codec, 0x3d, 0x03);
// 3
#if 1
//Left AGC
snd_soc_write(codec,0x56, 0x80); // 86 AGC Control 1 // 0x70 close agc
snd_soc_write(codec,0x57, 0xc0); // 87 AGC Control 2
snd_soc_write(codec,0x58, 0x32); // 88 AGC Maximum Gain 32db=0x40 (7f: not set)
snd_soc_write(codec,0x59, 0x7f); // 89 AGC attack time ---
snd_soc_write(codec,0x5a, 0x7f); // 90 AGC Decay time ---
snd_soc_write(codec,0x5b, 0x1f); // 91 AGC noise ---
snd_soc_write(codec,0x5c, 0x0f); // 92 AGC signal ---
// Right AGC );
snd_soc_write(codec,0x5e, 0x80); // 94 Right AGC Control 1
snd_soc_write(codec,0x5f, 0xc0); // 95 Right AGC Control 2
snd_soc_write(codec,0x60, 0x32); // 96 AGC Maximum Gain
snd_soc_write(codec,0x61, 0x7f); // 97 AGC attack time ---
snd_soc_write(codec,0x62, 0x7f); // 98 AGC Decay time ---
snd_soc_write(codec,0x63, 0x1f); // 99 AGC noise ---
snd_soc_write(codec,0x64, 0x0f); // 100 AGC signal ---
#endif
//snd_soc_write(codec, ADC310X_DITHER_CTRL, 0x77);
//snd_soc_write(codec, ADC310X_MIC_BIAS_CTRL, 0x20);
snd_soc_write(codec, ADC310X_INPUT_SEL_PGA_L_1, 0x7d);//0X34
//snd_soc_write(codec, ADC310X_INPUT_SEL_PGA_L_2, 0x3d);
snd_soc_write(codec, ADC310X_INPUT_SEL_PGA_R_1, 0x7d);
//snd_soc_write(codec, ADC310X_INPUT_SEL_PGA_R_2, 0x3d);
snd_soc_write(codec, ADC310X_PGA_ANALOG_L, 0x28);
snd_soc_write(codec, ADC310X_PGA_ANALOG_R, 0x28);
snd_soc_write(codec, ADC310X_LOW_CURRENT, 0x00);
//snd_soc_write(codec, 0x00, 0x01);
//snd_soc_write(codec, 0x33, 0x00);
//snd_soc_write(codec, 0x3B, 0x10);// LEFT PGA not mute, 0db
//snd_soc_write(codec, 0x3C, 0x10);// RIGHT PGA not mute,0db
//snd_soc_write(codec, 0x34, 0xf1);
//snd_soc_write(codec, 0x37, 0xf1);
// 4
//snd_soc_write(codec, 0x00, 0x00);
snd_soc_write(codec, 0x51, 0xc1);
snd_soc_write(codec, 0x52, 0x00); // UNMUTE
// 5 SET VOL
snd_soc_write(codec, 0x53, 0x28);//+4.5db
snd_soc_write(codec, 0x54, 0x28);//+4.5db