小夏天的大西瓜 发表于 2023-9-26 12:00

灵动MMCU的DMA传输过程

SPI可以利用DMA来搬运数据,包含读取接收数据和写入发送数据。DMA请求及应答机制,能监控
收发缓冲的空满状态,并提高对SPI收发数据寄存器RXREG、TXREG的读写速率,从而加快SPI通信速
度。
配置SPI_I2S_GCTL.DMAMODE位为‘1’,来实现SPI模块与DMA之间的信号交互。当发送缓冲有
空闲空间,即请求DMA写入TXREG;当接收缓冲有可读的有效数据,即请求DMA读取RXREG。
 发送时:当配置DW8_32位为‘0’,发送缓冲有大于等于1个空闲数据(1字节)的空间,即发送
缓冲未满时就发起DMA请求;当配置DW8_32位为‘1’,发送缓冲有1个有效数据的空闲空间时
会发起DMA请求。每次请求只进行一次DMA传输,且传输数据字节数由DW8_32位决定。
 接收时:当配置DW8_32位为‘0’,接收缓冲有大于等于1个有效数据(1字节)时就发起DMA
请求;当配置DW8_32位为‘1’,接收缓冲有1个有效数据后才发起DMA请求。每次请求只进行
一次DMA传输。且传输数据字节数由DW8_32位决定。
 注意:DW8_32=1时,1个有效数据的字节数由帧长位数决定。

单片小菜 发表于 2023-11-24 17:29

楼主做过I2C硬件的DMA功能吗?

中国龙芯CDX 发表于 2023-12-28 10:32

SPI可以利用DMA来搬运数据,其实还是自身硬件DMA支持吧

macpherson 发表于 2024-1-5 09:20

初始化完成后,可以通过软件触发或者外设触发的方式启动DMA传输。在传输过程中,DMA控制器会自动从源地址读取数据,并将其写入目的地址,而CPU则可以在此期间执行其他任务

yorkbarney 发表于 2024-1-5 10:12

当不需要继续使用DMA功能时,应当通过软件将DMA通道关闭,并释放相关的系统资源。

pl202 发表于 2024-1-5 16:34

当传输的数据量达到预设值时,DMA传输会自动停止。同时,DMA控制器会发送一个完成信号给CPU,通知传输已经完成。

albertaabbot 发表于 2024-1-5 17:11

灵动MMCU的DMA传输过程包括初始化DMA、启动DMA传输、DMA硬件电路控制数据传输、传输完成中断和关闭DMA等步骤。

abotomson 发表于 2024-1-5 17:41

通过使用DMA,可以降低CPU的工作负载,提高系统的运行效率。

plsbackup 发表于 2024-1-5 18:16

为DMA传输任务配置相应的参数,例如传输数据的源地址、目标地址、传输数量等。这可以通过编程MMCU的寄存器或者使用相应的库函数来实现。

geraldbetty 发表于 2024-1-5 19:49

DMA控制器会在后台进行数据搬移,同时可以监控传输状态,如有错误则可能产生中断通知CPU。
在增量模式下,DMA控制器会自动更新源地址和/或目标地址以实现连续的数据块传输。

mattlincoln 发表于 2024-1-6 18:46

当DMA传输完成后,DMA控制器会向CPU发送一个中断信号,通知CPU传输任务已经完成。CPU可以在中断服务程序中处理传输完成后的相关事宜,例如更新数据源、释放内存等。

robincotton 发表于 2024-1-6 19:18

首先,需要在软件中启用并配置DMA控制器。这包括选择DMA通道、设置源地址和目标地址、指定传输的数据量以及数据传输方向(从设备到内存、从内存到设备或内存到内存)。
配置DMA请求源,例如定时器触发的输入捕获事件、SPI/I²C/UART等外设的传输完成中断等。
设置DMA的工作模式(单次传输、循环传输等)以及优先级。

biechedan 发表于 2024-1-6 20:33

当DMA传输完成后,MM32 MCU会触发一个传输完成中断。在中断服务程序中,可以执行一些后续处理,如数据处理、存储器释放等。

uytyu 发表于 2024-1-6 21:11

DMA传输过程中,CPU并不直接参与数据的传输,而是由DMA控制器自动完成。这样可以大大提高数据传输的效率,减轻CPU的负担。

bartonalfred 发表于 2024-1-6 21:58

在数据传输完成后,需要关闭DMA以节省资源。关闭DMA后,DMA硬件电路将不再工作。

hearstnorman323 发表于 2024-1-6 22:06

首先,CPU对DMA控制器进行初始化,设置传输的相关参数,如数据缓冲区的首地址、设备地址、传输的数据长度等。
然后,CPU向I/O接口发出操作命令,I/O接口根据命令向DMA控制器提出传输请求。

elsaflower 发表于 2024-1-6 22:16

CPU初始化DMA控制器,外设发出DMA请求。
DMA控制器判断DMA请求的优先级及屏蔽,向总线仲裁器提出总线请求。
当CPU执行完当前总线周期时,释放总线控制权。
DMA控制器获得总线控制权后,开始进行数据传输。
数据传输完成后,DMA控制器释放总线控制权,并产生一个DMA传输结束中断信号。

claretttt 发表于 2024-1-7 22:05

一旦DMA控制器获得总线控制权,CPU将挂起或仅执行内部操作,让出总线使用权。
DMA控制器输出读写命令,直接控制内存与I/O接口进行数据传输。
在传输过程中,DMA控制器会处理字节到字的装配和字到字节的拆卸,确保数据格式的一致性。

sanfuzi 发表于 2024-1-8 12:56

在DMA传输过程中,如果发生错误,例如传输数据错误、传输方向错误等,DMA控制器会向CPU发送一个错误中断信号。CPU可以在中断服务程序中处理错误情况,例如停止传输、记录错误信息等。

averyleigh 发表于 2024-1-8 13:32

一旦完成DMA控制器的配置,可以启动DMA传输。这通常是通过向DMA控制器发送一个启动信号来完成的。
页: [1] 2 3
查看完整版本: 灵动MMCU的DMA传输过程