关于DMA搬运和CPU运行是否冲突
现在设计程序,习惯主程序里面一直运行AD,dma运行搬运到数组;每隔一段时间读取ad值;另外还有串口收发也是dma如果是dma在一直传输数据,cpu执行其他代码有影响吗?比如dma在写ram的同时,cpu也读该ram;并且是cpu先读了一半(比如16位数据的前8位),此时dam写该ram;怎么保证读到的数据不会出错
本帖最后由 toofree 于 2019-7-22 14:40 编辑
对于只有一组系统总线的,CPU运行和DMA搬运的确有冲突。CPU操作系统总线时,DMA是不能操作的,但是系统总线也是有仲裁机制的,使得CPU和DMA分时复用系统总线。
以STM32F103系列为例,DMA占用的总线周期最大不能超过总带宽的一半;换句话说,留给CPU的占用系统总线的时候至少超过一半。 DMA搬运完了会有标志位或者中断,等DMA搬运完成了再去读值就行了 等待DMA传输结束标志位到来了再读 CPU和DMA使用公共资源的时候是有仲裁机制的,这都做到MCU内部了,具体机理是不清楚的也不需要管的,这都涉及到另外的领域了 搬运的过程与CPU没有关系,运行完毕产生中断是硬件出发,CPU才去动作
页:
[1]