龙战野 发表于 2019-7-21 12:49:29

关于DMA搬运和CPU运行是否冲突

现在设计程序,习惯主程序里面一直运行AD,dma运行搬运到数组;每隔一段时间读取ad值;另外还有串口收发也是dma
如果是dma在一直传输数据,cpu执行其他代码有影响吗?比如dma在写ram的同时,cpu也读该ram;并且是cpu先读了一半(比如16位数据的前8位),此时dam写该ram;怎么保证读到的数据不会出错


toofree 发表于 2019-7-22 14:39:08

本帖最后由 toofree 于 2019-7-22 14:40 编辑

对于只有一组系统总线的,CPU运行和DMA搬运的确有冲突。CPU操作系统总线时,DMA是不能操作的,但是系统总线也是有仲裁机制的,使得CPU和DMA分时复用系统总线。
以STM32F103系列为例,DMA占用的总线周期最大不能超过总带宽的一半;换句话说,留给CPU的占用系统总线的时候至少超过一半。

子曰好人 发表于 2019-7-22 13:50:54

DMA搬运完了会有标志位或者中断,等DMA搬运完成了再去读值就行了

wenyangzeng 发表于 2019-7-22 13:52:03

等待DMA传输结束标志位到来了再读

whtt 发表于 2019-7-22 14:41:29

CPU和DMA使用公共资源的时候是有仲裁机制的,这都做到MCU内部了,具体机理是不清楚的也不需要管的,这都涉及到另外的领域了

liu553824989 发表于 2019-7-22 16:32:21

搬运的过程与CPU没有关系,运行完毕产生中断是硬件出发,CPU才去动作
页: [1]
查看完整版本: 关于DMA搬运和CPU运行是否冲突