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