ST意法半导体
直播中

陈韵瑄

7年用户 952经验值
私信 关注
[问答]

STM32F746-DISCO音频延迟线实现问题如何解决?

我有 STM32F746/769 DISCO 模块的音频直通工作项目,其中来自输入的 4 个样本块(2 个左通道和 2 个右通道)被传递到输出通道 DMA 缓冲区。
我的延迟线实现如下:
#define BUFF_SIZE 4
#define DBUF_SIZE 8192

int32_t buff_in[BUFF_SIZE];
int32_t buff_out[BUFF_SIZE];
int32_t dbuf[DBUF_SIZE];
int i=0,j=0,k;

...
void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai){

   memcpy(&dbuf, buff_in, BUFF_SIZE*sizeof(uint32_t));
    我 += BUFF_SIZE;
   如果(我> = DBUF_SIZE)我= 0;
    memcpy(buff_out, &dbuf, BUFF_SIZE*sizeof(uint32_t));
  }
效果应该是 DBUF_SIZE/2 个样本延迟,但我观察到的不是这个,而是另外的回声,其中输入信号的后续重复发生在 DBUF_SIZE/2*sample_period 间隔。
我怀疑,这可能是 WM8994 音频编解码器中的一些模拟或数字环回的来源。







回帖(1)

陈具松

2023-1-11 14:12:35

问题解决了。wm889.c 文件中的初始化有错误。

  •       /* Disable mute on IN1L_TO_MIXINL and +30dB on IN1L PGA output */
  •       counter += CODEC_IO_Write(DeviceAddr, 0x29, 0x0035);

  •       /* Disable mute on IN1R_TO_MIXINL, Gain = +30dB */
  •       counter += CODEC_IO_Write(DeviceAddr, 0x2A, 0x0035);

LS 半字节等于 5 打开从输出混频器到输入混频器的环回,增益为 0dB (MIXOUTL_MIXINL_VOL [2:0] = 5)。
正确的版本应该使这个信号路径静音(MIXOUTL_MIXINL_VOL [2:0] = 0):

  •       /* Disable mute on IN1L_TO_MIXINL and +30dB on IN1L PGA output */
  •       counter += CODEC_IO_Write(DeviceAddr, 0x29, 0x0030);

  •       /* Disable mute on IN1R_TO_MIXINL, Gain = +30dB */
  •       counter += CODEC_IO_Write(DeviceAddr, 0x2A, 0x0030);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分