3

stm32F4 系列的 DMA 有一些高级功能,我可以在这里问一下吗?

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

  • FIFO模式:如果不能并发传输,我猜这里可以使用FIFO。FIFO 有助于在不占用 AHB 总线的情况下等待从低速外设到 DMA 的数据准备就绪。当一定数量的数据准备好后,这块数据会一起被发送到内存中。我的理解正确吗?

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

这意味着什么?FIFO中可以存储多少数据?4 还是 4*32?

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

  • 双缓冲模式:

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

我的问题是:在 DMA 传输期间,Cortex M4 无法使用 AHB 总线,应用程序如何从另一个缓冲区读取?

4

1 回答 1

8

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

  • 并发流:在一个 DMA 内不可能。可以同时运行 DMA1、DMA2。例如:F427 可以同时做:

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

  • 突发模式:大量数据从 FIFO 连续发送到内存。只有在发送突发时才会占用 AHB。Burst 模式用于节省 AHB 的资源。它与 65535 数据大小限制无关。
  • 双缓冲区:如前所述,AHB 仅在数据传输时被占用。因此,当 DMA 不占用 AHB 时,处理器仍然可以从内存中获取数据。
于 2014-06-06T02:44:56.343 回答