STM32 DMA(并发流,FIFO,突发模式,双缓冲)

时间:2014-06-05 04:37:18

标签: c stm32 dma stm32f4discovery

stm32F4系列的DMA有一些高级功能,我可以在这里要求澄清吗?

  • 并发流:两个流可以同时传输数据吗?由于允许一个字节传输。如果总线宽度为32位,则可以进行4次并发传输。顺便说一句,STM32的AHB总线的宽度是多少?

  • FIFO模式:如果无法进行并发传输,我猜这里可以使用FIFO。 FIFO将有助于将数据从低速外设等待到DMA而不占用AHB总线。当准备好一定数量的数据时,数据块将一起发送到内存。我的理解是否正确?

  

每个流的四字深度32个先进先出存储缓冲器(FIFO)

这是什么意思? FIFO中可以存储多少数据? 4或4 * 32?

  • 突发模式:实际突发模式有什么作用?它在数据表中说可以传输65535个数据。 65535与突发模式之间有什么关系?

  • 双缓冲模式:

  

双缓冲区类型事务:使用两个双缓冲区传输   内存的内存指针(当DMA正在读/写时)   从/到缓冲区,应用程序可以向/从另一个写入/读取   缓冲)。 -----来自STM32F4的参考手册

我的问题是:在DMA传输期间,AHB总线不适用于Cortex M4,应用程序如何从其他缓冲区读取?

1 个答案:

答案 0 :(得分:5)

在做了一些研究之后,我发现了这个,以防有人需要它。

  • 并发流:在一个DMA中不可能。可以同时运行DMA1,DMA2。 例如: F427可以同时执行:

    • CPU访问Flash(阅读代码)
    • DMA1访问SRAM(传输一些缓冲区)
    • DMA2访问SDRAM(另一个缓冲区)
  • FIFO用于临时存储来自低速设备的数据。当累积了一定数量的数据时,可以发送突发,以节省AHB的资源。由于DMAC使用AHB时,处理器无法使用它。 FIFO具有4 * 32位大小。它可配置为16 * 8位(16 * 0字节)。

  • 突发模式:从FIFO到连续发送一大块数据,比如说存储器。只有在发送突发时才会占用AHB。突发模式用于节省AHB的资源。它与65535数据大小限制无关。
  • 双缓冲:如前所述,AHB仅在传输数据时被占用。因此,当DMA没有占用AHB时,处理器仍然可以从内存中获取数据。