OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4834|回复: 6

和大家讨论一个关于DMA的问题

[复制链接]

20

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-27
在线时间
6 小时
发表于 2014-9-17 12:08:49 | 显示全部楼层 |阅读模式
5金钱

事实是这样的:

题目要求:做一个音频回放系统,及按键开始录音,然后按键放刚开始录得音。


现在的问题是:我们都知道音频采样的时间为44.1k,及我们每20us就要对咪头发出的模拟量进行AD采样,然后通过SDIO存放到外部存储的SD卡中。


第一个思路是:每转换1024次(存于内存)进行一次SD卡存储,但是测试的结果居然要30ms,就是在这30ms的时间内,CPU无法对AD采样的结果放置于内存中

第二个思路是:我们使用ADC的DMA功能,然后CPU只是将DMA的数据写入SD卡。但是根据数据手册上说(不知到我理解的对不对),DMA只是把CPU空出来,CPU总线控制权交给DMA,所以来说,在DMA存储AD数据的时候,CPU是无法操作数据总线的,所以又斯巴达了。


所以问题是:

问题一:SDIO的接口不是最高为24M吗?接口的速度可能还和SD卡的质量也有关系,但是也不至于这么低吧(1024个字节要300ms),是否有优化方法

问题二:DMA将AD数据存入内存是,CPU可以操作SD卡吗?

问题三:我们必须在44.1K的情况下对AD的值进行存储(内存不够),stm32是否可以胜任,是否有更好的解决办法?

最佳答案

查看完整内容[请看2#楼]

回复【4楼】Badu_Space: --------------------------------- 哈哈,我居然成功了,谢谢楼上了,我没有用DMA哎,用的是FSMC操作外部的128M的Nandflash,首先用ADC采样咪头发出的声源电压,采集2K进行一次存储,然后用DAC输出到喇叭居然可以录音啊,哈哈,谢谢楼上的热心帮助啊,但是我还是觉得DMA传输时,cpu应该是不允许操作数据总线的,或者说操作数据总线的带宽会降低
原子哥在哪儿我就在哪儿
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-27
在线时间
6 小时
 楼主| 发表于 2014-9-17 12:08:50 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
哈哈,我居然成功了,谢谢楼上了,我没有用DMA哎,用的是FSMC操作外部的128M的Nandflash,首先用ADC采样咪头发出的声源电压,采集2K进行一次存储,然后用DAC输出到喇叭居然可以录音啊,哈哈,谢谢楼上的热心帮助啊,但是我还是觉得DMA传输时,cpu应该是不允许操作数据总线的,或者说操作数据总线的带宽会降低
原子哥在哪儿我就在哪儿
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-17 12:50:06 | 显示全部楼层
1、我试过SDIO分频系数调整到5能达到个比较理想的速度,具体这里有http://www.openedv.com/posts/list/27484.htm
2、DMA可以解放CPU的
3、可以参照一下原子哥战舰综合试验,有录音功能


这样的思路是可以的,其实楼主试验一下即可知道结果
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

20

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-27
在线时间
6 小时
 楼主| 发表于 2014-9-17 15:24:27 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
解放CPU但是CPU将总线控制权交给了DMA啊,所以CPU无法操作总线了,就无法将数据搬运到SD卡中了,我的44.1K的AD转换是不能打断的,这样可以吗?
原子哥在哪儿我就在哪儿
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-17 18:05:43 | 显示全部楼层
回复【3楼】笨鸟先飞吧:
---------------------------------
你用STM32的ADC做采集?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-4 20:57:09 | 显示全部楼层
回复【5楼】笨鸟先飞吧:
---------------------------------
没听懂你的成功和你以前的不成功的区别
回复

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-4-22
在线时间
11 小时
发表于 2015-4-24 13:47:13 | 显示全部楼层
楼主请问下,你的DMA运行时,CPU不可以操作系统总线,是吗?据我理解,不应该是,1 CPU带宽会降低 2 DMA和CPU同时访问同一个时,CPU会回避吧,不应该是不可以访问1
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 11:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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