访问STM32 dma目标位置

访问STM32 dma目标位置,stm32,dma,Stm32,Dma,我想知道从dma正在写入数据的内存中读取数据是否安全 我有一个带adc设置的stm32F1,可以连续执行转换,并使用dma将数据传输到ram缓冲区。 我知道我可以使用adc中断安全地访问缓冲区,但是如何从非中断上下文访问缓冲区呢?如果我尝试从dma正在写入的同一位置读取数据,数据会被破坏吗?您的数据不会被破坏-这些芯片具有总线仲裁器,它将对总线的访问权(以及对RAM内存的访问权)授予dma或CPU(您的代码),因此每个事务(对RAM的单次访问权,不一定是对整个变量的访问权)都是原子的 请参阅RM

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

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

您的数据不会被破坏-这些芯片具有总线仲裁器,它将对总线的访问权(以及对RAM内存的访问权)授予dma或CPU(您的代码),因此每个事务(对RAM的单次访问权,不一定是对整个变量的访问权)都是原子的

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

3.1系统架构

总线矩阵

总线矩阵管理服务器之间的访问仲裁 核心系统总线和DMA主总线。仲裁采用循环方式 罗宾算法。在连接线设备中,总线矩阵是 由五个主机(CPU DCode、系统总线、以太网DMA、DMA1)组成 和DMA2总线)和三个从机(FLITF、SRAM和AHB2APB桥)。在里面 其他设备,总线矩阵由四个主设备(CPU DCode、, 系统总线、DMA1总线和DMA2总线)和四个从机(FLITF、SRAM、FSMC 和AHB2APB桥梁)。AHB外围设备连接在系统总线上 通过总线矩阵允许DMA访问


虽然这是安全的,但如果您的访问指针或dma相互传递,您将重新读取过时的数据,或者在看到之前替换未读的数据。通常人们所做的是读取缓冲区的一半,而dma正在填充另一半。