关于DMA占用总线情况的探究

        最近在研究DMA,我对DMA的认识是:一个搬运工,让CPU减少搬运数据的操作,腾出时间多做运算,提高运行速度。

但对手册中的一段对DMA总线占用情况的描述不太清楚。

         我对上面功能描述的理解是这样的:比如用DMA来将ADC采集模拟量到SRAM

         那么ADC会经过总线到SRAM,在数据经过总线的时候,CPU就无法与总线交互,因此M3核采取分时复用,让CPU也有一半的时间能够使用总线。

        那么问题来了,DMA传输中,总线一半可用,那么是不是会影响CPU 的运行速度?影响程度有多大?如果影响速度的话,那么什么场景下才适合用DMA? 如果不影响速度的话,是为什么?

       

下面的文章比较好的描述了一下DMA的工作过程:

微信公众平台 (qq.com)icon-default.png?t=N7T8https://mp.weixin.qq.com/s/c1bfv55cByw_00_c6ypasA

 在一篇STM32L15x DMA介绍的PDF中,可以看到,他们考虑到了这个问题。采用的方法是限制DMA单次传输占用总线的周期,来达到CPU有机会使用总线的空挡。

 因此,DMA传输中会占用总线,不管什么策略,都是有可能会阻塞CPU读取总线的操作的,但是对执行效率和速度的影响要看具体芯片的实现,有的影响很小。因此,在项目中采用DMA时,要谨慎。

2024.01.10更新:

(26 封私信 / 83 条消息) dma占用系统总线时,cpu不能访存,也就无法取值,这是否与dma与cpu并行工作矛盾? - 知乎 (zhihu.com)

这条知乎回答我觉得很全面了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值