硬汉嵌入式论坛

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

[DMA] 请教STM32H7的DMA原理:FLAC可变帧长解码

[复制链接]

25

主题

68

回帖

143

积分

初级会员

积分
143
QQ
发表于 2019-12-23 11:11:56 | 显示全部楼层 |阅读模式
大家好。

请教STM32H7的DMA原理,比如FLAC可变帧长解码,我们设置DMA双缓存buf1和buf2并申请内存,然后我们设置DMA的每次传输数据量num,并关联双缓存buf1和buf2。有个问题我没想明白:

我们可以申请buf1和buf2的大小,大于num,但FLAC是可变帧长解码,每次解码完成后,自动把PCM数据填充到buf1或buf2,如果PCM数据小于num,那DMA会出问题啊,会传输上次的部分PCM数据;如果PCM数据大于num,会丢失本次的后面部分PCM数据。

但实际上FLAC解码却能正常工作,无杂音等问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2019-12-23 11:32:18 | 显示全部楼层
不懂flac,帮顶
回复

使用道具 举报

610

主题

3060

回帖

4910

积分

至尊会员

积分
4910
发表于 2019-12-23 14:34:55 | 显示全部楼层
貌似可以设置每次的传输长度吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2019-12-23 14:59:42 | 显示全部楼层
hpdell 发表于 2019-12-23 14:34
貌似可以设置每次的传输长度吧

可以。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
QQ
 楼主| 发表于 2019-12-23 21:44:58 | 显示全部楼层
hpdell 发表于 2019-12-23 14:34
貌似可以设置每次的传输长度吧

网上我找到的FLAC例程,是设置DMA循环模式,也就是只设置一次DMA传输长度。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2019-12-24 09:27:45 | 显示全部楼层
pnhywyb 发表于 2019-12-23 21:44
网上我找到的FLAC例程,是设置DMA循环模式,也就是只设置一次DMA传输长度。

这里就有个问题了,虽然是变帧长度的,但是并不影响你解码出一个DMA缓冲的数据啊,帧短就多解几帧,帧长就下一DMA缓冲继续往里面填。

你看下你的程序是不是这么处理的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 18:54 , Processed in 0.161800 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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