查看: 1532|回复: 0

[原创] RT1170单核系列使用CM4域DMA方法

[复制链接]

该用户从未签到

715

主题

6374

帖子

0

超级版主

Rank: 8Rank: 8

积分
25213
最后登录
2025-8-18
发表于 2024-11-14 15:37:34 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2024-11-14 17:53 编辑

RT1170单核系列使用CM4DMA方法

本文主要讲的是MIMXRT1170单核系列芯片,CM7 核通过交叉开关(XBAR)来使用 CM4 域的 DMA 时,能够实现高效的数据传输和处理,为扩展DMA通道数量、多样化的应用场景提供了有力支持。本文将探讨这一过程的原理、实现方法以及相关的应用例程。
NXP公司推出的 i.MX RT1170 是一款突破性的跨界处理器,结合了高性能运算和多媒体功能的同时,增强了可用性及实时功能。 其中MIMXRT1172XX和MIMXRT1171XX,IMXRT117FXX,MIMXRT117CXX支持单核CM7芯片系列。根据 MIMXRT1170RM参考手册 第五章描述,该系列芯片包含两个DMA控制器和对应的两个DMAMUX。其中EDMA 在CM7 域并与 CM7 合作,EDMA_LPSR 在 CM4 域并与 CM4合作。DMA_CH_MUX 服务于 EDMA以及DMA_CH_MUX_LPSR 服务于EDMA_LPSR。其中每个DMAMUX支持最多32路DMA通道。
Picture1.png
图1
当开发者使用RT1170单核CM7系列芯片,项目需求使用DMA通道数大于32路时,会有疑问是否可以使用CM4域的EDMA_LPSR和DMA_CH_MUX_LPSR,以便扩展使用DMA的通道数量?
答案是可以的,RT1170单核CM7系列芯片可以使用CM4域的EDMA_LPSR和DMA_CH_MUX_LPSR。但是需要使用XBAR模块以及修改相关代码。XBAR在两者之间充当了重要的连接桥梁,能够灵活地将CM7 核与 CM4 域的 DMA 资源进行映射和连接。本文就是基于这种情况展开介绍,并编写了一个Demo例程用于理解演示。
Picture2.png
图2
在开始例程讲解前,简单解释一下为什么CM7核不能直接使用CM4域的EDMA_LPSR和DMA_CH_MUX_LPSR。
主要原因是因为DMA1的中断限制了CM7核使用,RT1170的CM7核侧看不到eDMA_LPSRinterrupt,但是CM7核仍然可以获取eDMA_LPSR 和DMA_CH_MUX_LPSR的寄存器。解决方法是通过中断向量表映射实现,eDMA_LPSR_Done 可以路由到XBAR输入,输出路由到XBAR_OUTX, XBAR1_OUT0 到XBAR1_OUT3 拥有中断功能。本文例程使用的的是XBAR1,当然也可以使用XBAR2和XBAR3。
Picture3.png Picture4.png
图3
根据MIMXRT1170RM参考手册可以查询到eDMA_LPSR_Done0~eDMA_LPSR_Done7 XBAR分配对应XBAR1输入XBAR1_IN120~XBAR1_IN127,XBAR1_OUT0  ~ XBAR1_OUT3对应XBAR1输出, 拥有中断功能。
Picture5.png
Picture6.png
图4
在开始例程讲解前,简介一下核心模块XBAR模块。
XBAR :XBAR 是一种交叉开关矩阵,它在 NXP RT 芯片中扮演着信号路由的关键角色。XBAR 能够将多个输入信号灵活地连接到多个输出端口,实现了系统内信号的动态配置和高效路由。在 MIMXRT1170 芯片中,XBAR内部包含了复杂的路由矩阵,能够根据配置信息建立起 CM7 核和 CM4 域 DMA 之间的通信路径,这种路径的灵活性使得系统设计人员可以根据具体的应用需求来优化数据传输的流程。

本文编写的例程逻辑是使用配置CM4域的EDMA_LPSR和DMA_CH_MUX_LPSR相关寄存器,本示例选择DMA1的0通道(可选DMA1通道范围是DMA1_0通道DMA1_7),实现MemoryToMemory方式搬运数据。DMA1的0通道DMA数据传输完成标志位作为XBAR1的输入,即eDMA_LPSR_Done0,XBAR1_OUT0作为XBAR1的输出,所以当XBAR1_OUT0中断产生时,就表示DMA1的0通道MemoryToMemory方式传输数据完成。

代码实现:导入SDK库Demo “evkbmimxrt1170_edma_memory_to_memory_cm7”,并基于这个工程修改添加代码,特别需要注意的是CM7核的工程会判断DMA的寄存器地址范围,不是DMA0的地址范围会报错,需要手动添加修改DMA1相关代码。 本文附件会上传一个patch文件,感兴趣的同学可以下载验证。
主要修改文件:
1:edma_memory_to_memory.c
2:fsl_dmamux.c
3:fsl_edma.c
Picture7.png
Picture8.png

初始化XBAR1和DMAMUX1
Picture9.png
Picture10.png
在main函数while(1)中检测判断XBAR1_OUT0中断函数中置位的全局标志位xbaraIsrFlag0置位时,打印搬运源地址,以及目标地址的缓存数据, 调用下一次EDMA发送函数。
Picture11.png
如下图所示,CM7核的工程可以使用分配给CM4域的EDMA模块。
Picture12.png
图5
本文提供了MIMXRT1170单核系列芯片DMA通道扩展实现方案,在 RT1170 芯片中,CM7 核利用 XBAR 实现对 CM4 域 DMA 的使用是一种强大而灵活的设计方法。通过深入理解 XBAR 的工作原理和 CM4 域 DMA 的配置与使用,结合实际应用场景中的优化措施和注意事项,可以构建出高效、稳定的嵌入式系统。这种架构在数据采集、实时通信等多种领域都有着广泛的应用前景,为开发高性能的嵌入式应用提供了技术支持。

MIMXRT1170_CM7_XBAR1_DMA1-log_patch.zip

11.5 KB, 下载次数: 1, 下载积分: 威望 1

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-20 03:43 , Processed in 0.077526 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表