打印
[其他]

灵动MMCU的DMA传输过程

[复制链接]
2820|46
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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则可以在此期间执行其他任务

使用特权

评论回复
5
yorkbarney| | 2024-1-5 10:12 | 只看该作者
当不需要继续使用DMA功能时,应当通过软件将DMA通道关闭,并释放相关的系统资源。

使用特权

评论回复
6
pl202| | 2024-1-5 16:34 | 只看该作者
当传输的数据量达到预设值时,DMA传输会自动停止。同时,DMA控制器会发送一个完成信号给CPU,通知传输已经完成。

使用特权

评论回复
7
albertaabbot| | 2024-1-5 17:11 | 只看该作者
灵动MMCU的DMA传输过程包括初始化DMA、启动DMA传输、DMA硬件电路控制数据传输、传输完成中断和关闭DMA等步骤。

使用特权

评论回复
8
abotomson| | 2024-1-5 17:41 | 只看该作者
通过使用DMA,可以降低CPU的工作负载,提高系统的运行效率。

使用特权

评论回复
9
plsbackup| | 2024-1-5 18:16 | 只看该作者
为DMA传输任务配置相应的参数,例如传输数据的源地址、目标地址、传输数量等。这可以通过编程MMCU的寄存器或者使用相应的库函数来实现。

使用特权

评论回复
10
geraldbetty| | 2024-1-5 19:49 | 只看该作者
DMA控制器会在后台进行数据搬移,同时可以监控传输状态,如有错误则可能产生中断通知CPU。
在增量模式下,DMA控制器会自动更新源地址和/或目标地址以实现连续的数据块传输。

使用特权

评论回复
11
mattlincoln| | 2024-1-6 18:46 | 只看该作者
当DMA传输完成后,DMA控制器会向CPU发送一个中断信号,通知CPU传输任务已经完成。CPU可以在中断服务程序中处理传输完成后的相关事宜,例如更新数据源、释放内存等。

使用特权

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

使用特权

评论回复
13
biechedan| | 2024-1-6 20:33 | 只看该作者
当DMA传输完成后,MM32 MCU会触发一个传输完成中断。在中断服务程序中,可以执行一些后续处理,如数据处理、存储器释放等。

使用特权

评论回复
14
uytyu| | 2024-1-6 21:11 | 只看该作者
DMA传输过程中,CPU并不直接参与数据的传输,而是由DMA控制器自动完成。这样可以大大提高数据传输的效率,减轻CPU的负担。

使用特权

评论回复
15
bartonalfred| | 2024-1-6 21:58 | 只看该作者
在数据传输完成后,需要关闭DMA以节省资源。关闭DMA后,DMA硬件电路将不再工作。

使用特权

评论回复
16
hearstnorman323| | 2024-1-6 22:06 | 只看该作者
首先,CPU对DMA控制器进行初始化,设置传输的相关参数,如数据缓冲区的首地址、设备地址、传输的数据长度等。
然后,CPU向I/O接口发出操作命令,I/O接口根据命令向DMA控制器提出传输请求。

使用特权

评论回复
17
elsaflower| | 2024-1-6 22:16 | 只看该作者
CPU初始化DMA控制器,外设发出DMA请求。
DMA控制器判断DMA请求的优先级及屏蔽,向总线仲裁器提出总线请求。
当CPU执行完当前总线周期时,释放总线控制权。
DMA控制器获得总线控制权后,开始进行数据传输。
数据传输完成后,DMA控制器释放总线控制权,并产生一个DMA传输结束中断信号。

使用特权

评论回复
18
claretttt| | 2024-1-7 22:05 | 只看该作者
一旦DMA控制器获得总线控制权,CPU将挂起或仅执行内部操作,让出总线使用权。
DMA控制器输出读写命令,直接控制内存与I/O接口进行数据传输。
在传输过程中,DMA控制器会处理字节到字的装配和字到字节的拆卸,确保数据格式的一致性。

使用特权

评论回复
19
sanfuzi| | 2024-1-8 12:56 | 只看该作者
在DMA传输过程中,如果发生错误,例如传输数据错误、传输方向错误等,DMA控制器会向CPU发送一个错误中断信号。CPU可以在中断服务程序中处理错误情况,例如停止传输、记录错误信息等。

使用特权

评论回复
20
averyleigh| | 2024-1-8 13:32 | 只看该作者
一旦完成DMA控制器的配置,可以启动DMA传输。这通常是通过向DMA控制器发送一个启动信号来完成的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

203

主题

1672

帖子

2

粉丝