功能描述
设备
DMA 相关设备推荐配置中,单次 DMA 任务传输数据量为位宽 * BURST。
存储模块 | DMA_ID | 位宽(bit) | Burst | 地址 |
---|---|---|---|---|
DMA_ID_SRAM | 0 | 32 | 16 | Linear |
DMA_ID_DRAM | 1 | 64 | 16 | Linear |
存储模块与 DMA 采用总线握手方式,无需单独的 REQ/ ACK 机制,DMA 模式选择等待,即只能被动发送或接收数据,若源终端皆为存储模块则实时响应传输。
外设设备 | DMA_ID | 位宽(bit) | Burst | 地址 |
---|---|---|---|---|
DMA_ID_PSADC_Q1 | 4 | 32 | 1 | IO |
DMA_ID_PSADC_Q2 | 5 | 32 | 1 | IO |
DMA_ID_SPI2 | 8 | 8/32 | 1 | IO |
DMA_ID_SPI3 | 9 | 8/32 | 1 | IO |
DMA_ID_SPI0 | 10 | 8/32 | 1 | IO |
DMA_ID_SPI1 | 11 | 8/32 | 1 | IO |
DMA_ID_I2S0 | 12 | 32 | 1 | IO |
DMA_ID_I2S1 | 13 | 32 | 1 | IO |
DMA_ID_AUDIO_DMIC | 14 | 32 | 1 | IO |
DMA_ID_AUDIO_ADC | 15 | 32 | 1 | IO |
DMA_ID_UART0 | 16 | 8 | 1 | IO |
DMA_ID_UART1 | 17 | 8 | 1 | IO |
DMA_ID_UART2 | 18 | 8 | 1 | IO |
DMA_ID_UART3 | 19 | 8 | 1 | IO |
DMA_ID_UART4 | 20 | 8 | 1 | IO |
DMA_ID_UART5 | 21 | 8 | 1 | IO |
DMA_ID_UART6 | 22 | 8 | 1 | IO |
DMA_ID_UART7 | 23 | 8 | 1 | IO |
外设(非存储)设备与 DMA 采用单独的 REQ/ACK 机制握手方式,DMA 模式选择握手,即需主动发起接收或发送请求。外设(非存储)设备传输字节数需要与位宽对齐。
任务链表

多个任务组成任务链表,每个任务单元为 32 位,从低地址往高地址存放,具体定义如下:
- TASK_CFG1:当前任务配置,包括源端终端的 BURST 和 WIDTH 等(外设模块的 WIDTH 需要与自身 FIFO 寄存器位宽对齐)
- SRC_ADDR:当前任务源端起始地址,注意需要 8 byte 对齐
- SNK_ADDR:当前任务终端起始地址,注意需要 8 Byte 对齐
- TASK_LENGTH:当前任务传输字节数,最大可设置为 32M-1 字节(总传输长度需要与 WIDTH 对齐)
- TASK_PAR:当前任务参数,设置两个任务之间传输的延迟
- NEXT_TASK:下一任务地址,该单元配置为 “0xFFFFF800” 表示 DMA 传输结束
DMA 在工作时会读出任务相关参数更新到对应寄存器中(软件可见)。
FIFO
外设 FIFO 大小推荐 FIFO_DEPTH ≥(BRT × DW ÷ 8)+(L ÷ S) BYTE
- BRT:突发 BRUST 长度。
- DW:为外设使用的 DMA 数据宽度。
- L:系统时延。
- S:外设吞吐速度。
实际应用则把 REQ 触发条件设置为(BRT × DW ÷ 8)BYTE,满足 BURST 传输的条件;(L ÷ S) 用于解决系统时延影响,保证外设可以正常吞吐。