<!-- 本文件由脚本自动转换生成，请勿手动编辑 -->

> **《LKS32MC09x User Manual》DMA** . 完整目录见 [README.md](README.md)
>
> **声明**：本文档由芯片用户手册自动转换生成，仅供检索与查阅参考。Markdown 格式可被自由编译、修改，本文档不构成正式技术文件，相关内容以凌鸥创芯官方网站正式发布的手册为准。
>
> 南京凌鸥创芯电子有限公司 . (C) 2023, 版权归凌鸥创芯所有 . 机密文件，未经许可不得扩散

# DMA

## 概述

DMA和CPU同为芯片总线的主设备。

如图18-1所示。其中部分设备不需要被DMA访问，仅仅挂载于与CPU相连的总线上。ADC/DAC/SPI/I2C/MCPWM/UART/TIMER/GPIO/Hall/SRAM等设备可以被CPU和DMA共享访问。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-1
multi-layer AHB总线架构

DMA有4个通道，共享一个搬运引擎。当DMA空闲且多个通道同时发生请求时，按优先级进行仲裁，但在搬运过程中不会发生抢占，即一定是某个通道完成搬运，DMA空闲后，才会发起仲裁，判断下一个获得请求的通道是哪一个。

DMA的传输有两种方式:DMA_CCRx.RMODE=1，多个轮次，每轮传输内传输一次；DMA_CCRx.RMODE=0，一轮，连续传输多次。

如果配置一轮传输多次数据，即DMA_CCRx.RMODE=0，则一次DMA请求，DMA连续发送DMA_CTMSx次数据，然后硬件将DMA_CCRx.EN位清零，置位中断标志。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-2
RMODE=0 DMA传输情况

如果配置某个通道为多轮搬运，则在多轮搬运之间，DMA可能会响应其他通道的搬运请求。

多轮传输每轮只搬运一次数据，搬运DMA_CTMSx轮后，硬件将DMA_CCRx.EN位清零，置位中断标志。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-3
RMODE=1 DMA传输情况

每发生一次DMA请求，DMA开始一轮传输，完成一轮传输后，根据当前DMA通道的请求情况响应下一次请求，下一次请求可以仍为当前通道请求，也可以是其他通道请求，或者在无请求的情况下进入空闲状态，同时当前DMA通道待传输轮数减1。当DMA待传输轮数为0时，当前通道的传输全部完成，DMA产生中断，同时DMA通道使能DMA_CCRx.EN被硬件自动清零。在传输过程中，待传输轮数可以通过DMA_CTMSx寄存器读取。一轮传输内待传输次数不支持读取，因为DMA会连续进行多次传输，因此次数值会快速变化。

出于功耗控制考虑，DMA模块可以通过设置DMA_CTRL.EN位为0来禁用（要求关闭DMA使能前先关闭通道对应的使能DMA_CCRx.EN），此时DMA时钟被门控关闭。

DMA支持8, 16或32 bit (byte, half-word, or word)
三种位宽的传输操作，通过配置DMA_CCRx.SBTW和DMA_CCRx.DBTW来选择源地址和目的地址访问的位宽，源地址访问的位宽与目的地址访问的位宽可以不同。

DMA
每完成一次传输，地址根据DMA_CCRx.SINC和DMA_CCRx.DINC决定是否自动递增。所有的外设寄存器地址都是word对齐的，所以外设的地址递增应配置为0/4。例如对于UART/SPI/I2C，因为每次都是访问UART_DATA或SPI/I2C
FIFO接口的固定地址，所以轮次间无需地址递增；如要访问ADC数据寄存器，则地址通常需要自动加4，可以设置轮内递增。而对于内存，如果设置了轮内递增，每次地址递增的值，根据内存数据位宽(DMA_CCRx.SBTW/DBTW)设定，对于内存访问位宽为byte的情况，地址自动加1，对于half-word，地址自动加2，对于word，地址自动加4。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-4
DMA地址递增控制

图18-4仅为地址递增示例，配置为一轮传输4次，或传输4轮，源地址和目的地址数据尺寸均为word。实际应用中，如果配置数据尺寸为byte或halfword，则地址偏移按照1/2进行递增。

一般，SINC=0，DINC=0，源地址、目的地址均不递增，可能为外设到外设的搬运。

SINC=1，DINC=0，源地址递增，目的地址不递增，可能为内存数组到外设寄存器接口的搬运。

SINC=0，DINC=1，源地址不递增，目的地址递增，可能为外设寄存器接口到内存数组的搬运。

SINC=1，DINC=1，源地址、目的地址均递增，为外设多组数据(如ADC_DATx)到内存数组的搬运。

如果配置DMA_CCRx.CIRC=1，且DMA_CCRx.RMODE=1，即循环多轮模式。一次DMA请求信号进行触发，只进行一次数据搬运（如UART数据搬运至RAM，完成一轮搬运等待下一次请求。在此模式下，DMA_CTMSx可以配置为一个较大的值，每进行一次搬运DMA_CTMSx减1。由于循环模式DMA进行多轮搬运不再产生中断标志，CPU可以通过读取DMA_CTMSx来判断当前已经传输的数据量，如果已经足够则开始处理。当传输了DMA_CTMSx轮以后，地址会回到初始地址。DMA_CTMSx会重新装载为预设值，开始新一轮的递减。循环多轮模式下，DMA的通道使能DMA_CCRx.EN位由软件置位，一直为高，即使DMA_CTMSx递减至0。如果要退出传输，可以软件清零DMA_CCRx.EN。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-5
CIRC=1且RMODE=1 DMA传输情况

如果配置DMA_CCRx.CIRC=1，且DMA_CCRx.RMODE=0，即循环单轮模式则DMA收到一次请求后会连续地进行DMA_CTMSx次数据搬运，并产生中断标志。在此模式下，DMA_CCRx.EN无须软件置位，当DMA通道收到请求时会自动置位，传输完成一轮后自动清零。如果要退出此种模式，可以清零DMA_CCRx.CIRC位，并清零DMA_CCRx.EN位。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-6
CIRC=1且RMODE=0 DMA传输情况

循环模式下，DMA_CTMSx寄存器随着搬运递减为0后重新装载为初始配置值。如果是搬运数据到内存，则覆盖之前搬运至内存的数据；如果是搬运至外设，则重复一轮数据发射。以将ADC数据搬运至内存为例，设定数据块大小为16bit×12channel×8次，则在循环模式下DMA完成一轮96个half
word搬运后重新开始下一轮搬运，并覆盖之前使用的内存地址，不设置DMA完成中断标志位。单次模式下，DMA完成一定大小的数据块搬运后即终止本次DMA操作，设置当前通道DMA完成中断标志位，同时硬件自动关闭对应的DMA通道，即硬件电路自动在该通道传输完成后将DMA_CCRx.EN设为0。DMA需要搬运的轮次由DMA_CTMS寄存器进行控制。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-7 DMA 循环 / 单次传输模式硬件处理逻辑

## 请求

DMA的请求分为软件请求和硬件请求两类，软件请求通过设置对应DMA通道的DMA_RENx.SW_TRIG=1来产生，写1即产生，软件触发位设置后需要软件清零。硬件请求通常为外设的中断事件，当特定的外设中断事件作为DMA传输请求时，通常要禁用对应事件的中断响应，即不再需要CPU对中断进行响应，响应仅作为DMA传输请求。而且硬件DMA请求信号经过DMA通道受理后会被DMA硬件清零，无需软件清除提起请求的外设中断标志。

表18-1
DMA请求

|||
|---|---|
|触发来源|描述|
|软件|软件触发时进行的搬运操作由配置寄存器DMA_CCRx指定，当设置了DMA_RENx.SW_TRIG，一旦通道被使能即开始进行DMA操作。|
|ADC|ADC在单段触发模式下，一次完成若干个通道后采样后产生中断请求，由DMA把ADC转换后的值搬运到SRAM。ADC单段采样完成中断事件作为DMA请求信号，请求信号在得到DMA响应后由DMA将其清零，无需软件清零；注意此时需要软件同时禁用ADC采样完成中断，使中断不再被CPU响应。|
|DSP|DSP IRQ指令产生的中断事件标志可以作为DMA请求|
|TIMER|TIMER可以使用过零/比较事件作为DMA请求，具体DMA操作根据配置寄存器设定，通常作为定时事件（如每隔10ms触发一次DMA操作）|
|SPI|SPI模块可以使用接收缓冲区满事件作为DMA请求信号，由于SPI是同时收发，所以接收缓冲区满既是接收完毕也是发送完毕的事件标志。读取SPI FIFO自动清除事件标志。|
|MCPWM|MCPWM模块可以使用过零/计数周期结束/4个ADC触发信号作为DMA请求，具体DMA操作根据配置寄存器设定|
|I2C|I2C模块可以使用I2C0_SCR.BYTE_CMPLT即字节发送完成作为触发DMA请求，DMA自动清除I2C的请求标志。其他I2C中断事件仍由CPU响应|
|UART|串口模块可以使用UART_IF 触发DMA请求，如果DMA配置的传输方向是内存到串口，则使用UART 发送缓冲区空标志作为DMA请求信号；如果传输方向是串口到内存，则应使用UART接收完成事件产生DMA请求信号。事件标志由DMA自动清零。UART在由DMA操作时应同样禁用相应中断防止被CPU响应。|
|HALL|HALL中断标志可以作为DMA请求|
|SIF|SIF中断标志可以作为DMA请求|
|比较器|CMP中断标志可以作为DMA请求|
|GPIO|GPIO中断标志可以作为DMA请求|

## 优先级

DMA的优先级采用固定优先级，优先级如图18-7所示。为避免出现来不及响应某些外设请求的情况，在设计应用软件时应考虑任务实时性，每个通道不配置搬运过于大量的数据导致其他通道得不到及时响应。

如图18-7所示，优先级由上至下降低。4个DMA通道中，优先级关系为:通道0\>通道1\>通道2\>通道3
(\>号表示优先级高于)。在DMA各通道内部，通常有多个硬件请求事件和一个软件请求事件，硬件请求优先级高于软件请求。多个硬件请求事件优先级相同。通常，一个DMA通道配置一个硬件请求事件使能，多个硬件请求不应在一个通道内同时发生。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图18-8
DMA通道优先级

## 仲裁

当DMA处于空闲状态，或刚刚完成某一通道的DMA传输后，若此时恰好有一个或多个DMA请求发生，DMA会根据优先级设定进行仲裁，优先级高的外设请求率先得到DMA服务。比如ADC连续模式下，每完成一轮ADC数据搬运，ADC的采样完成事件标志被DMA清零，DMA回到空闲状态或转而服务其他外设请求；对于UART/SPI/I2C，每搬运一个byte重新仲裁。

为了避免CPU或DMA长期占用外设/SRAM，在外设/SRAM的端口仲裁模块中加入了时间片机制，即一个主设备占用一段时间后释放访问权，仲裁模块观测另一个主设备是否在请求访问，如果是则转而允许另一个主设备访问，否则继续当前主设备未完成的访问。

## 中断

DMA的一个通道完成DMA操作后产生DMA中断。当DMA某一个通道完成操作后，会自动关闭该通道的使能为DMA_CCRx.EN。

## 寄存器

### 地址分配

DMA控制器模块寄存器的基地址是0x4001_1200，寄存器列表如下:

表18-2
DMA寄存器列表

||||
|---|---|---|
|名称|偏移地址|说明|
|DMA0_CCR0|0x00|DMA通道0通道配置寄存器|
|DMA0_REN0|0x04|DMA通道0请求使能寄存器|
|DMA0_CTMS0|0x08|DMA通道0传输次数寄存器|
|DMA0_SADR0|0x0C|DMA通道0源地址寄存器|
|DMA0_DADR0|0x10|DMA通道0目的地址寄存器|
||||
|DMA0_CCR1|0x20|DMA通道1通道配置寄存器|
|DMA0_REN1|0x24|DMA通道1请求使能寄存器|
|DMA0_CTMS1|0x28|DMA通道1传输次数寄存器|
|DMA0_SADR1|0x2C|DMA通道1源地址寄存器|
|DMA0_DADR1|0x30|DMA通道1目的地址寄存器|
||||
|DMA0_CCR2|0x40|DMA通道2通道配置寄存器|
|DMA0_REN2|0x44|DMA通道2请求使能寄存器|
|DMA0_CTMS2|0x48|DMA通道2传输次数寄存器|
|DMA0_SADR2|0x4C|DMA通道2源地址寄存器|
|DMA0_DADR2|0x50|DMA通道2目的地址寄存器|
||||
|DMA0_CCR3|0x60|DMA通道3通道配置寄存器|
|DMA0_REN3|0x64|DMA通道3请求使能寄存器|
|DMA0_CTMS3|0x68|DMA通道3传输次数寄存器|
|DMA0_SADR3|0x6C|DMA通道3源地址寄存器|
|DMA0_DADR3|0x70|DMA通道3目的地址寄存器|
||||
|DMA0_CTRL|0x80|DMA控制寄存器|
|DMA0_IE|0x84|DMA中断使能寄存器|
|DMA0_IF|0x88|DMA中断标志寄存器|

### DMA通道配置寄存器

#### DMA0_CCRx ( x =0,1,2,3)

地址分别是:0x4001_1200，0x4001_1220，0x4001_1240，0x4001_1260

复位值:0x0

表18-3
DMA通道配置寄存器DMA_CCRx

|||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11||10|9||8||7||6||5||4||3||2||1||0|
||||||SBTW|||DBTW||||SINC||||DINC||CIRC||||RMODE||EN||
||||||RW|||RW||||RW||||RW||RW||||RW||RW||
||||||0|||0||||0||||0||0||||0||0||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:12\]||未使用|
|\[11:10\]|SBTW|源地址访问位宽0: Byte1: Halfword2: Word3: 保留|
|\[9:8\]|DBTW|目的地址访问位宽0: Byte1: Halfword2: Word3: 保留|
|\[7\]||未使用|
|\[6\]|SINC|源地址递增方式0:不递增1:每传输一次，地址按照SBTW对应大小递增1/2/4|
|\[5\]||未使用|
|\[4\]|DINC|目的地址递增方式0:不递增1:每传输一次，地址按照DBTW对应大小递增1/2/4|
|\[3\]|CIRC|循环模式，高有效|
|\[2\]||未使用|
|\[1\]|RMODE|0:单轮传输，一轮连续传输多次，每收到DMA请求传输一轮，一个DMA请求即传输完毕1:多轮，每轮进行一次数据传输，每收到DMA请求传输一轮，多个DMA请求才传输完毕不支持多轮×多次传输|
|\[0\]|EN|通道使能，高有效，软件置1开启通道进行DMA搬运操作，搬运完成后DMA硬件将此位清零|

#### DMA0_RENx ( x = 0,1,2,3)

地址分别是:0x4001_1204，0x4001_1224，0x4001_1244，0x4001_1264

复位值:0x0

表18-4
DMA请求使能寄存器DMA\_ RENx

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|
|SW_TRIG||GPIO_TRIG|||CMP_TRIG|SIF_TRIG|HALL0_TRIG|||UART2_TX_TRIG|UART2_RX_TRIG|UART1_TX_TRIG|UART1_RX_TRIG|UART0_TX_TRIG|UART0_RX_TRIG|
|RW||RW|||RW|RW|RW|||RW|RW|RW|RW|RW|RW|
|0||0|||0|0|0|||0|0|0|0|0|0|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|I2C0_TX_TRIG|I2C0_RX_TRIG|MCPWM1_TRIG|MCPWM0_TRIG|SPI_TX_TRIG|SPI_RX_TRIG||||TIMER2_TRIG|TIMER1_TRIG|TIMER0_TRIG|DSP_TRIG||ADC1_TRIG|ADC0_TRIG|
|RW|RW|RW|RW|RW|RW||||RW|RW|RW|RW||RW|RW|
|0|0|0|0|0|0||||0|0|0|0||0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31\]|SW_TRIG|软复位请求使能|
|\[30\]||保留|
|\[29\]|GPIO_TRIG|GPIO请求使能|
|\[28:27\]||保留|
|\[26\]|CMP_TRIG|比较器请求使能|
|\[25\]|SIF_TRIG|SIF模块请求使能|
|\[24\]|HALL0_TRIG|HALL0模块请求使能|
|\[23:22\]||保留|
|\[21\]|UART2_TX_TRIG|UART2发送请求使能|
|\[20\]|UART2_RX_TRIG|UART2接收请求使能|
|\[19\]|UART1_TX_TRIG|UART1发送请求使能|
|\[18\]|UART1_RX_TRIG|UART1接收请求使能|
|\[17\]|UART0_TX_TRIG|UART0发送请求使能|
|\[16\]|UART0_RX_TRIG|UART0接收请求使能|
|\[15\]|I2C0_TX_TRIG|I2C0发送请求使能|
|\[14\]|I2C0_RX_TRIG|I2C0接收请求使能|
|\[13\]|MCPWM1_TRIG|MCPWM1请求使能|
|\[12\]|MCPWM0_TRIG|MCPWM0请求使能|
|\[11\]|SPI_TX_TRIG|SPI发送请求使能|
|\[10\]|SPI_RX_TRIG|SPI接收请求使能|
|\[9:7\]||保留|
|\[6\]|TIMER2_TRIG|TIMER2请求使能|
|\[5\]|TIMER1_TRIG|TIMER1请求使能|
|\[4\]|TIMER0_TRIG|TIMER0请求使能|
|\[3\]|DSP_TRIG|DSP请求使能|
|\[2\]||保留|
|\[1\]|ADC1_TRIG|ADC1请求使能|
|\[0\]|ADC0_TRIG|ADC0请求使能|

一般，DMA的通道中配置的内存、外设地址应与使能的外设中断请求相对应，这一点需要由应用软件保证。其中软件请求始终处于使能状态，即软件向DMA_RENx.SW_TRIG写1即开始一次DMA传输。来自外设的硬件请求进入DMA后通过OR逻辑形成一个请求信号，每一个DMA通道一般在同一时间只使能一个硬件DMA请求。软件触发标志DMA_RENx.SW_TRIG在请求被DMA受理后由硬件自动清除。

由于CMP信号可能是一个慢速的电平信号，在使用CMP触发DMA时，推荐将中断触发类型选择为边沿触发。

DMA_RENx寄存器可以在DMA通道使能的情况下改写。

#### DMA0_CTMSx ( x = 0,1,2,3)

地址分别是:0x4001_1208，0x4001_1228，0x4001_1248，0x4001_1268

复位值:0x0

表18-5
DMA传输次数寄存器DMA_CTMS0

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||TMS||||||||
|||||||||RW||||||||
|||||||||0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[11:0\]|TMS|DMA通道0数据搬运次数。此寄存器在该通道使能后变为只读。|

注意:

x=0，3时，TMS\[11:0\]可配；

x=1，2时，仅TMS\[7:0\]可配。

DMA通道0/3支持最大搬运次数为4095次，所以DMA_CTMS0/ DMA_CTMS3的位宽为12。

DMA通道1/2支持最大搬运次数为255次，所以DMA_CTMS1/ DMA_CTMS2的位宽为8。

DMA_CTMSx 寄存器只有在通道禁用，即DMA_CCRx.EN=0之后才可以写入数据。

当DMA_CCRx.RMODE=0时，表示传输1轮，每轮传输DMA_CTMS次数据；

当DMA_CCRx.RMODE=1时，表示传输DMA_CTMS轮，每轮传输一次数据；

不支持多轮每轮传输多次数据。

当DMA_CTRL=1时，对DMA_CTMSx写入数据可以清零DMA内部传输轮数的计数值。

以外设数据宽度为16，内存数据宽度为32，即DMA_CTMSx=16，DMA_CCRx.RMODE=0为例，DMA每轮需要读取外设数据16bit=2byte，写入内存数据32bit=4byte。一共需要搬运16轮，即读取外设32byte，存入内存64byte；

即使仅仅搬运一轮，也需要设置CTMS=1，而不能让其为0。

如果配置DMA_CCRx.CIRC=1，且DMA_CCRx.RMODE=1，即循环多轮模式。一次DMA请求信号进行触发，只进行一次数据搬运，如UART数据搬运至RAM，完成一轮搬运等待下一次请求。在此模式下，DMA_CTMSx可以配置为一个较大的值，每进行一次搬运DMA_CTMSx减1。此时，DMA_CTMSx读出为当前剩余未搬运轮数，当DMA传输完成后轮数会复位为配置值。举例来说，比如配置DMA_CTMSx=4，读取时可能看到DMA_CTMSx由4开始递减，3,2,1…之后又变为0。当DMA当前通道需要重新进行4轮传输时，需要重新向DMA_CTMSx写入轮数值。

如果配置DMA_CCRx.CIRC=1，DMA_CCRx.RMODE=0时，即单轮循环模式。DMA收到一次请求后会连续地进行DMA_CTMSx次数据搬运，并产生中断标志。DMA_CTMSx读出为当前这一轮剩余未搬运次数。但由于一轮内的数据是被DMA连续搬运的，所以软件读出的DMA_CTMSx会迅速变化。

注意，每次重新开启DMA通道前，都要重新配置DMA_CTMSx寄存器，已经在上一次传输中DMA_CTMSx寄存器已经递减为0。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

地址分别是:0x4001_120C，0x4001_122C，0x4001_124C，0x4001_126C

复位值:0x0

表18-12
DMA源地址寄存器DMA\_ SADRx

||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|31|30||29||28||27||26|||25||24||23||22||21||20||19||18||17||16|
|ADDR|||||||||||||||||||||||||||||||
|RW|||||||||||||||||||||||||||||||
|0|||||||||||||||||||||||||||||||
|15||14||13||12||11||10|9||8||7||6||5||4||3||2||1||0||
|ADDR|||||||||||||||||||||||||||||||
|RW|||||||||||||||||||||||||||||||
|0|||||||||||||||||||||||||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:0\]|ADDR|DMA通道x源地址|

当DMA_CCRx.SBTW=2’b01时，即配置为以16bit为单位搬运源数据。DMA_SADRx.ADDR\[0\]值无效，外设地址会以2为单位递增。

当DMA_CCRx.SBTW=2’b10时，即配置为以32bit为单位搬运外设数据。DMA_SADRx.ADDR\[1:0\]值无效，外设地址会以4为单位递增。

**注意:**DMA_SADRx
寄存器只有在通道禁用，即DMA_CCRx.EN=0之后才可以写入数据！！！

#### DMA0_DADRx ( x = 0,1,2,3)

地址分别是:0x4001_1210，0x4001_1230，0x4001_1250，0x4001_1270

复位值:0x0

表18-13
DMA目的地址寄存器DMA_DADRx

||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|31|30||29||28||27||26|||25||24||23||22||21||20||19||18||17||16|
|ADDR|||||||||||||||||||||||||||||||
|RW|||||||||||||||||||||||||||||||
|0|||||||||||||||||||||||||||||||
|15||14||13||12||11||10|9||8||7||6||5||4||3||2||1||0||
|ADDR|||||||||||||||||||||||||||||||
|RW|||||||||||||||||||||||||||||||
|0|||||||||||||||||||||||||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:0\]|ADDR|DMA通道x目的地址|

当DMA_CCRx.DBTW=2’b01时，即配置为以16bit为单位搬运内存数据。DADRx.
ADDR\[0\]值无效，内存地址会以2为单位递增。

当DMA_CCRx.DBTW=2’b10时，即配置为以32bit为单位搬运内存数据。DADRx.
ADDR\[1:0\]值无效，内存地址会以4为单位递增。

**注意:**DMA_DADRx
寄存器只有在通道禁用，即DMA_CCRx.EN=0之后才可以写入数据！！！

### DMA0_CTRL DMA 控制寄存器

地址:0x4001_1280

复位值:0x0

表18-6
DMA控制寄存器DMA_CTRL

||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1||0|
||||||||||||||||EN||
||||||||||||||||RW||
||||||||||||||||0||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:1\]||未使用|
|\[0\]|EN|DMA整体使能|

### DMA0_IE DMA 中断使能寄存器

地址:0x4001_1284

复位值:0x0

表18-7
DMA中断使能寄存器DMA_IE

|||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3||2||1||0||
||||||||||||||CH3_FIE||CH2_FIE||CH1_FIE||CH0_FIE|
||||||||||||||RW||RW||RW||RW|
||||||||||||||0||0||0||0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:4\]||未使用|
|\[3\]|CH3_FIE|通道3完成中断使能|
|\[2\]|CH2_FIE|通道2完成中断使能|
|\[1\]|CH1_FIE|通道1完成中断使能|
|\[0\]|CH0_FIE|通道0完成中断使能|

### DMA0_IF DMA 中断标志寄存器

地址:0x4001_1288

复位值:0x0

表18-8
DMA中断标志寄存器DMA_IF

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||||||CH3_FIF|CH2_FIF|CH1_FIF|CH0_FIF|
|||||||||||||RW1C|RW1C|RW1C|RW1C|
|||||||||||||0|0|0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:4\]||未使用|
|\[3\]|CH3_FIF|通道3完成中断标志，高有效，写1清零|
|\[2\]|CH2_FIF|通道2完成中断标志，高有效，写1清零|
|\[1\]|CH1_FIF|通道1完成中断标志，高有效，写1清零|
|\[0\]|CH0_FIF|通道0完成中断标志，高有效，写1清零|

当发生特定事件时，即使中断使能位IE=0，对应的IF仍会置位，但不会向处理器提起中断服务请求。

