请问个ADC DMA传输的问题
adc采用DMA通道循环模式传输到内存变量空间。如果其他函数不停的读取存储到内存空间的ADC值,而DMA不停的搬运转换后的ADC到内存空间,在不断读出和不断写入过程不会发生冲突吗?本帖最后由 toofree 于 2018-4-9 11:03 编辑
关于DMA,在RM0008手册上是这么描述的。见下图:
来个中文版的。
可以说明问题了吗?
就是说DMA的写和CPU的读不会冲突。由于有了总线仲裁器执行循环调度,CPU至少会有一半的时间可以占用系统总线。
CPU有占用系统总线的时间,那么就可以访问SRAM,因为SRAM也是挂在系统总线上的。
根据你设定的DMA数据传输长度,缓冲区满了DMA就停止,可以产生一个中断。不可能发生冲突的。 wenyangzeng 发表于 2018-4-8 21:43
根据你设定的DMA数据传输长度,缓冲区满了DMA就停止,可以产生一个中断。不可能发生冲突的。 ...
没设置DMA中断呢 不断读出和不断写入过程不会发生冲突。 你看DMA循环模式就知道了 厦门浪子 发表于 2018-4-8 22:15
没设置DMA中断呢
没设置DMA中断时ADC转换后的数据在ADC数据寄存器中,需要不断的去读取 不会冲突。DMA设置时有个缓冲区,满了就会中断。 把DMA改成循环,开启半长中断,在半长中断里处理 toofree 发表于 2018-4-9 00:11
关于DMA,在RM0008手册上是这么描述的。见下图:
谢谢你的回答。 Dandjinh 发表于 2018-4-9 09:07
把DMA改成循环,开启半长中断,在半长中断里处理
你好,我的问题是不开设中断的情况
页:
[1]
2