访问STM32 dma目标位置

use*_*653 4 stm32 dma

我想知道从dma写入数据的内存中读取是否安全?

我有一个带有adc设置的stm32F1,可以连续执行转换并使用dma将数据传输到ram缓冲区.我知道我可以使用adc中断安全地访问缓冲区,但是如何从非中断上下文访问缓冲区呢?如果我尝试从dma写的相同位置读取数据,数据是否会被破坏?

Fre*_*pin 8

您的数据不会被破坏 - 这些芯片具有总线仲裁器,允许访问总线(也是RAM存储器)到DMA或CPU(您的代码),因此每个事务(单个访问RAM,不一定访问整个变量) )是原子的.

请参阅RM0008参考手册中的此信息:

3.1系统架构

...

BusMatrix

BusMatrix管理核心系统总线和DMA主总线之间的访问仲裁.仲裁使用循环算法.在连接线设备中,BusMatrix由五个主设备(CPU DCode,系统总线,以太网DMA,DMA1和DMA2总线)和三个从设备(FLITF,SRAM和AHB2APB桥)组成.在其他设备中,BusMatrix由四个主设备(CPU DCode,系统总线,DMA1总线和DMA2总线)和四个从设备(FLITF,SRAM,FSMC和AHB2APB桥)组成.AHB外设通过BusMatrix连接到系统总线,以允许DMA访问.