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