访问STM32 dma目标位置

时间:2014-11-07 14:58:18

标签: stm32 dma

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

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

1 个答案:

答案 0 :(得分:7)

您的数据不会被破坏 - 这些芯片具有总线仲裁器,允许访问总线(也是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访问。