Edit online

外设源端和终端传输模式

3 Mar 2025
Read time: 2 minute(s)

通过寄存器 DMA_CH_CTL_3 可以配置外设源端 (Source Mode Config) 和终端 (Destination Mode Config) 模式参数。

源端 (Source Mode Config) 和终端 (Destination Mode Config) 模式参数仅适用于外设,不适用于存储设备。
  • 0x0: 使用握手模式,默认值

    推荐使用默认值。

  • 0x1: 使用等待模式

  • 0x2: 握手 + 等待模式

使用握手模式

1. 握手模式下外设源端和终端模式配置
Burst Domain Single Domain
使用方式 DMA 剩余传输数据量大于等于 Block Length DMA 剩余传输数据量小于 Block Length
DMA 行为 会检测 REQ。
  • 当检测到 device_burst_req,DMA 发起 transaction。
  • 检测到总线最后一个 device 返回 ready,拉高 ack。
  • 检测到 req 为低,拉低 ack。

会检测 REQ。
  • 当检测到 device_single_req,DMA 发起 transaction。

  • 检测到总线 device 返回 ready,拉高 ack。

  • 检测到 req 为低,拉低 ack。

外设 FIFO
  • 当外设 FIFO 到达水位并且 dma_ack 为低时,拉高 req。

  • 当外设 FIFO 只要有数据(读)或空间(写)并且 ack 为底时,拉高 req。


dma_burst4_req1

1. DMA Burst 4 Handshakes

dma_single_req1

2. DMA Single Handshakes

使用等待模式

2. 等待模式下外设源端和终端模式配置
Burst Domain Single Domain
使用方式 DMA 剩余传输数据量大于等于 Block Length DMA 剩余传输数据量小于 Block Length
DMA 行为 会检测 req。
  • 当检测到 device_burst_req,DMA 发起 transaction。
  • 检测到总线最后一个 device 返回 ready,拉高 ack。
  • 延时 Wait*4 Cycle,拉低 ack。

会检测 req。
  • 当检测到 device_single_req,DMA 发起 transaction。

  • 检测到总线 device 返回 ready,拉高 ack。

  • 延时 Wait*4 Cycle,拉低 ack。

外设 FIFO
  • 当外设 FIFO 到达水位并且 dma_ack 为低时,拉高 req。

  • 当外设 FIFO 只要有数据(读)或空间(写)并且 ack 为低时,拉高 req。


wait1

3. DMA Burst 4 Wait

使用握手+等待模式

3. 等待模式下外设源端和终端模式配置
Burst Domain Single Domain
使用方式 DMA 剩余传输数据量大于等于 Block Length DMA 剩余传输数据量小于 Block Length
DMA 行为 会检测 req。
  • 当检测到 device_burst_req,DMA 发起 transaction。
  • 检测到总线最后一个 device 返回 ready,拉高 ack。
  • 检测到 req 为低后,再延时 Wait*4 Cycle,拉低 ack。
会检测 req。
  • 当检测到 device_single_req,DMA 发起 transaction。

  • 检测到总线 device 返回 ready,拉高 ack。

  • 检测到 req 为低之后,再延时 Wait*4 Cycle,拉低 ack。

外设 FIFO
  • 当外设 FIFO 到达水位并且 dma_ack 为低时,拉高 req。

  • 当外设 FIFO 只要有数据(读)或空间(写)并且 ack 为低时,拉高 req。


hardshake_wait1

4. DMA Burst 4 Handshakes +Wait