硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1132|回复: 6
收起左侧

[STM32H7] V7开发板在threadX下控制WM8978,SAI线上数据有缺失

[复制链接]

5

主题

11

回帖

26

积分

新手上路

积分
26
发表于 2022-1-11 17:53:31 | 显示全部楼层 |阅读模式
1:控制代码如下:

            AUDIO_MakeSine16bit((int16_t *)wav_file_buffer,2000,22050,22050*2);

            AUDIO_Stop();
            wm8978_Init();               
            tx_thread_sleep(20);
                  wm8978_SetSpkVolume(0);       
            wm8978_CfgAudioPath(DAC_ON,  EAR_LEFT_ON|EAR_RIGHT_ON|SPK_ON);
            wm8978_SetEarVolume(20);
            wm8978_SetSpkVolume(40);       
            wm8978_CfgAudioIF(0/*I2S_Standard_Phillips*/,16);

            AUDIO_Init(1,0,SAI_DATASIZE_16,22050);

            AUDIO_Play((int16_t *)wav_file_buffer,22050*2);         
            FOR_EACH_0(I,1000)
            {
                AUDIO_Poll();
                tx_thread_sleep(1);
            }

            AUDIO_Stop();
            wm8978_Init();


2) AUDIO_MakeSine16bit使用测试数据
void AUDIO_MakeSine16bit(int16_t *_outbuf, uint32_t _sin_freq,  uint32_t _sample_freq, uint32_t _count)
{
        for (int i = 0; i < _count / 4; i++)
        {
                _outbuf[2 * i] = 0x5555;
                _outbuf[2 * i + 1] = 0x0505;
        }
}

3) 总线上数据如下,
    CH1: MCLK
    CH2: FS
    CH3: SCK
    CH4: SD

整体数据

整体数据

SD不定时会有一段时间输出0,持续时间不一定,大致在10~35ms之间

参考 04.jpg

4)局部正确的数据如下,数据符合生成的预期
03.jpg

请大佬们看下,可能是什么原因导致的,谢谢~~
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2022-1-11 18:28:49 | 显示全部楼层
注意Cache配置问题。

等我不忙了,做个ThreadX下的MP3,视频播放器之类的分享下。
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2022-1-12 13:54:38 | 显示全部楼层
我现在用AUDIO_MakeSine16bit函数生成正弦波后,通过WM8978放出来,有哒哒哒的杂音。我先在外部SDRAM里生成了正弦波数据,然后调用了SCB_CleanInvalidateDCache;再是修改了bsp_i2c_wm8978.c中的数据buffer位置,我放到了DTCM。声音文件如下 正弦波.m4a (10.74 KB, 下载次数: 5) 。已经卡了两天了,能帮忙看下吗?



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2022-1-12 15:15:10 | 显示全部楼层
Jinsq 发表于 2022-1-12 13:54
我现在用AUDIO_MakeSine16bit函数生成正弦波后,通过WM8978放出来,有哒哒哒的杂音。我先在外部SDRAM里生成 ...

可以这样,出厂程序不是有个录音放音的Demo,你上电后进入录音放音的功能里面,运行下,看看效果是否正常,是否满足你的需求,然后再倒腾你现在的这个,这样效果是不是好些。然后再排查看看是哪里的问题。
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2022-1-13 10:15:23 | 显示全部楼层
我试了改成采样率16KHz生成正弦波,声音听起来没有哒哒哒的杂音。但是换成wav文件,转换到16Kbit就又出现哒哒哒的声音了。有点抓狂了
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2022-1-16 19:19:19 | 显示全部楼层
eric2013 发表于 2022-1-12 15:15
可以这样,出厂程序不是有个录音放音的Demo,你上电后进入录音放音的功能里面,运行下,看看效果是否正常 ...

看了下示波器的波形,我采样率设置的是16K,实际量出来的FS的频率是22k的,不知道是不是这个的原因
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2022-1-18 11:28:33 | 显示全部楼层
算是做了个workaround,把问题解决了。
V7的驱动是把读取出来的数据搬到发送的buffer里,然后通过buffer把数据通过SAI发送出去。我现在是让DMA直接搬SDRAM里的数据(定义了2M的空间),声音就不破了,没有哒哒哒的情况出现了。可能是数据发送半完成和完成中断有到线程里执行有延迟?也不太确定。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 09:18 , Processed in 0.172718 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表