主题中讨论的其他器件:CC3200AUDBOOST
您好,
我们在最新的 SDK 中运行 i2secho 示例、它工作正常。 但是、当我们将采样率更改为8000时、它将产生噪声。
谢谢。
BR
Trevor
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我们在最新的 SDK 中运行 i2secho 示例、它工作正常。 但是、当我们将采样率更改为8000时、它将产生噪声。
谢谢。
BR
Trevor
您好!
我不认为驱动器在特定采样率下会产生噪声。 但是、您可以使用逻辑分析仪验证 WS 和 SCK 信号是否具有预期的频率(您还可以验证是否获得预期的帧格式)。
我认为编解码器设置不是很好。 您可以尝试修改这些设置以获得更好的音质。 您可以尝试以下设置吗? (您只需将此代码粘贴到 AudioCodec.c 中的 AudioCodec_config()函数的开关中)
案例8000:// fs = 8kHz、BCLK = PLL 的输入、BCLK = 256kHz AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x02);// PLL 上电、P=1、R=2 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x008); // J=8 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x01); // NDAC 分压器加电,NDAC = 1 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x04); // MDAC 分频器加电,MDAC = 4 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x01); // NADC 分压器加电,NADC = 1 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x04); // mAdc 分频器加电、mAdc = 4 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
此致、
尊敬的 Trevor:
没有任何因素会阻止驱动器和驱动器在4kHz 频率下工作。
在驾驶员一侧,您基本上需要将 i2sParams.samplingFrequency 设置为4000。
在编解码器方面,可能需要调整设置。 第一次尝试时、您可以保留与8KHz 设置相同的设置(我在上一条消息中给出的设置)。 然后、您可以尝试以下设置:
情况4000:// fs = 4kHz、BCLK = PLL 输入、BCLK = 128kHz AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x008); // J=8 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x01); // NDAC 分压器加电,NDAC = 1 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x08); // MDAC 分频器加电,MDAC = 8 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x01); // NADC 分压器加电,NADC = 1 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x08); // mAdc 分频器加电、mAdc = 8 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
我希望这将有所帮助。
此致、
尊敬的 Trevor:
实际上、我们在这里达到了编解码器的极限。 实际上、输入时钟频率(即 BCLK)越低、质量越低。
我在这里的最佳建议是增加 BCLK 的频率(保持 WCLK 的相同频率以保持4kHz 采样率)。 为此,最好的解决办法是添加“填充后”。 我添加了48位后填充(使 BCLK 大约为512kHz)。 以下是我的代码:
I2S_Params i2sParams; I2S_PARAMS_INIT (&i2sParams); i2sParams.samplingFrequency = sample_rate;/* 4000 Hz*/ i2sParams.fterWordPadding = 48; i2sParams.fixedBufferLength = BUFSIZE; i2sParams.writeCallback = writeCallbackFxn; i2sParams.readCallback = readCallbackFxn; i2sParams.errorCallback = errCallbackFxn; i2sHandle = I2S_open (Board_I2S0、&i2sParams);
情况4000:// fs = 4kHz、BCLK = PLL 的输入、BCLK = 512kHz (必须添加48位后填充) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x036); // J=54 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x12); // NDAC 分压器加电,NDAC = 18 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x0C); // MDAC 分频器加电,MDAC = 12 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x12); // NADC 分压器加电,NADC = 18 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x0C); // mAdc 分频器加电、mAdc = 12 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
注意:这些设置不能在 CC32XX 上使用(不允许在填充之后使用)
此致、
您好!
如果您可以将输入时钟更改为 MCLK (这是不可能的、或者至少在 CC3200AUDBOOST 上不是很容易-在 CC3200AUDBOOST MCLK 和 BCLK 上是短接的)、您肯定可以提高您的音质。 为了将 MCLK 作为一个输入、编解码器已经被设定。 如果不是以下行、则将编解码器设置为 I2S 模式、MCLK 作为输入时钟、16位采样、WCLK 和 BCLK 是编解码器的输入:
AudioCodec_regWrite (TI3254_AUDIO_IF_1_REG、0x00);
现在、您必须在驱动器侧激活 MCLK:为此、您必须为 MCLK 选择引脚(CC26X2R1_LAUNCHXL_I2S_MCLK 必须设置为有效引脚)。 然后、您可以使用 i2sParams.MCLKDivider 选择 MCLK 频率(MCLK 的频率为48MHz/MCLKDivider)。
如果您有兴趣、我已经为您的编解码器计算了以下参数(假设 MCLK=1MHz):
情况4000:// fs = 4kHz、MCLK = PLL 的输入、MCLK = 1MHz (MCLKDivider = 48) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x020); // J=32 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x19); // NDAC 分压器加电,NDAC = 25 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x0A); // MDAC 分频器加电,MDAC = 10 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x19); // NADC 分压器加电,NADC = 25 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x0A); // mAdc 分频器加电、mAdc = 10 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
我希望这将有所帮助、
此致、
您好、Cl é ment、
我对 CC3200AUDBOOST 做了一些返工、我们已将输入时钟更改为 MCLK。
更新测试结果:
如果我使用以下设置、则它具有较小的噪声(但质量良好)、结果与"48位后填充"相同
情况4000:// fs = 4kHz、MCLK = PLL 的输入、MCLK = 1MHz (MCLKDivider = 48) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x020); // J=32 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x19); // NDAC 分压器加电,NDAC = 25 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x0A); // MDAC 分频器加电,MDAC = 10 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x19); // NADC 分压器加电,NADC = 25 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x0A); // mAdc 分频器加电、mAdc = 10 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
我还尝试了之前的设置、没有噪音、 但质量非常差。
情况4000:// fs = 4kHz、BCLK = PLL 输入、BCLK = 128kHz AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x008); // J=8 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x01); // NDAC 分压器加电,NDAC = 1 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x08); // MDAC 分频器加电,MDAC = 8 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x01); // NADC 分压器加电,NADC = 1 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x08); // mAdc 分频器加电、mAdc = 8 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A)
BR
Trevor
您好!
以下是我在 MCLK 作为时钟输入时为8kHz 采样频率计算的设置(MCLK 频率为1MHz)。
案例8000:// fs = 8kHz、MCLK = PLL 的输入、MCLK = 1MHz (MCLKDivider = 48) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x10 | 0x04);// PLL 上电、P=1、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x020); // J=32 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x19); // NDAC 分压器加电,NDAC = 25 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x05); // MDAC 分频器加电,MDAC = 5 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x19); // NADC 分压器加电,NADC = 25 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x05); // mAdc 分频器加电、mAdc = 5 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
此致、
尊敬的 Trevor:
我假设您切换 BCLK 和 WCLK 频率(BCLK 频率应高于 WCLK 频率)。 这样、您的频率看起来很好(至少您将无法获得更好的精度)。 供参考:我尝试使用您的实际频率进行计算、但结果相同。
现在、您可以尝试增加 MCLK、看看这是否有帮助。 我为您准备了以下代码:
情况4000:// fs = 4kHz、MCLK = PLL 的输入、MCLK = 4.8MHz (MCLKDivider = 10) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x30 | 0x02);// PLL 上电、P=3、R=2 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x028); // J=40 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x19); // NDAC 分压器加电,NDAC = 25 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x0A); // MDAC 分频器加电,MDAC = 10 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x19); // NADC 分压器加电,NADC = 25 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x0A); // mAdc 分频器加电、mAdc = 10 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断; 情况8000:// fs = 8kHz、MCLK = PLL 输入、MCLK = 4.8MHz (MCLKDivider = 10) AudioCodec_pageSelect (TI3254_PAGE_0); AudioCodec_regWrite (TI3254_CLK_MUX_REG、0x13); // PLL 时钟为 CODEC CLKIN AudioCodec_regWrite (TI3254_CLK_PLL_P_R_REG、0x80 | 0x60 | 0x04);// PLL 上电、P=6、R=4 AudioCodec_regWrite (TI3254_CLK_PLL_J_REG、0x028); // J=40 AudioCodec_regWrite (TI3254_CLK_PLL_D_MSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_PLL_D_LSB_REG、0x00);// D = 0000 AudioCodec_regWrite (TI3254_CLK_NDAC_REG、0x80 | 0x19); // NDAC 分压器加电,NDAC = 25 AudioCodec_regWrite (TI3254_CLK_MDAC_REG、0x80 | 0x05); // MDAC 分频器加电,MDAC = 5 AudioCodec_regWrite (TI3254_DAC_OSR_MSB_REG、0x00);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_DAC_OSR_LSB_REG、0x80);// DOSR = 0x0080 = 128 AudioCodec_regWrite (TI3254_CLK_NADC_REG、0x80 | 0x19); // NADC 分压器加电,NADC = 25 AudioCodec_regWrite (TI3254_CLK_mAdc_REG、0x80 | 0x05); // mAdc 分频器加电、mAdc = 5 AudioCodec_regWrite (TI3254_ADC_OSR_REG、0x80); // AOSR = 128 ((与 PRB_R1至 PRB_R6配合使用、ADC 滤波器类型 A) 中断;
如果这不能解决您的问题、那么您一定应该咨询音频专家(通过打开新主题)。 请不要忘记关闭当前主题(使用最有用消息上的按钮"这解决了我的问题")、谢谢。
此致、