厦门浪子 发表于 2018-4-8 19:58:50

请问个ADC DMA传输的问题

adc采用DMA通道循环模式传输到内存变量空间。如果其他函数不停的读取存储到内存空间的ADC值,而DMA不停的搬运转换后的ADC到内存空间,在不断读出和不断写入过程不会发生冲突吗?

toofree 发表于 2018-4-9 00:11:21

本帖最后由 toofree 于 2018-4-9 11:03 编辑

关于DMA,在RM0008手册上是这么描述的。见下图:


来个中文版的。


可以说明问题了吗?

就是说DMA的写和CPU的读不会冲突。由于有了总线仲裁器执行循环调度,CPU至少会有一半的时间可以占用系统总线。

CPU有占用系统总线的时间,那么就可以访问SRAM,因为SRAM也是挂在系统总线上的。

wenyangzeng 发表于 2018-4-8 21:43:09

根据你设定的DMA数据传输长度,缓冲区满了DMA就停止,可以产生一个中断。不可能发生冲突的。

厦门浪子 发表于 2018-4-8 22:15:15

wenyangzeng 发表于 2018-4-8 21:43
根据你设定的DMA数据传输长度,缓冲区满了DMA就停止,可以产生一个中断。不可能发生冲突的。 ...

没设置DMA中断呢

feixiang20 发表于 2018-4-8 22:53:52

不断读出和不断写入过程不会发生冲突。 你看DMA循环模式就知道了

wenyangzeng 发表于 2018-4-9 07:12:52

厦门浪子 发表于 2018-4-8 22:15
没设置DMA中断呢

没设置DMA中断时ADC转换后的数据在ADC数据寄存器中,需要不断的去读取

hello_bug 发表于 2018-4-9 08:06:23

不会冲突。DMA设置时有个缓冲区,满了就会中断。

Dandjinh 发表于 2018-4-9 09:07:39

把DMA改成循环,开启半长中断,在半长中断里处理

厦门浪子 发表于 2018-4-9 10:24:34

toofree 发表于 2018-4-9 00:11
关于DMA,在RM0008手册上是这么描述的。见下图:




谢谢你的回答。

厦门浪子 发表于 2018-4-9 10:24:55

Dandjinh 发表于 2018-4-9 09:07
把DMA改成循环,开启半长中断,在半长中断里处理

你好,我的问题是不开设中断的情况
页: [1] 2
查看完整版本: 请问个ADC DMA传输的问题