news 2026/4/23 10:44:54

简单理解:XT_QSPIx 和 DMA_CFG_INFO是什么关系?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解:XT_QSPIx 和 DMA_CFG_INFO是什么关系?
// SPI FLASH DMA操作函数(核心:启动DMA传输,等待完成/超时,返回结果) static bool SPI_FALSH_DMA_OPT(XT_SPI_TypeDef *XT_QSPIx,SPI_DMA_CFG_TypeDef *DMA_CFG_INFO)

XT_QSPIxDMA_CFG_INFO“硬件对象” 与 “配置参数” 的依赖关系—— 前者是「要操作的 SPI/QPI 硬件本身」,后者是「该硬件执行 DMA 传输所需的全部参数配置」,两者配合才能完成 SPI Flash 的 DMA 收发,缺一不可。

可以用 “开车” 的场景理解:

  • XT_QSPIx= 你要开的「汽车」(具体的硬件实体,比如 SPI0 外设);
  • DMA_CFG_INFO= 「行车配置单」(包含目的地、路线、车速、座位数等,即 DMA 传输的方向、数据地址、长度等);
  • 函数SPI_FALSH_DMA_OPT= 「按配置单开指定汽车完成行程」(让指定的 SPI 外设,按配置的 DMA 参数执行传输)。

一、两者的核心定位与职责(明确分工)

变量名核心定位具体职责
XT_QSPIx硬件外设句柄(实体)1. 指定操作的 SPI/QPI 硬件通道(如XT_QSPI0,与 SPI Flash 物理连接的外设);2. 提供 SPI 硬件的核心资源(如数据寄存器DR地址、DMA 控制寄存器DMACR),DMA 传输需通过这些寄存器与 SPI 外设交互;3. 确保 DMA 操作 “瞄准” 正确的硬件(避免操作到其他 SPI 外设)。
DMA_CFG_INFO传输配置参数容器(规则)1. 定义传输核心规则:方向(发 / 收 / 双向)、数据缓冲区地址、传输长度;2. 指定 DMA 资源:用哪个 DMA 发送通道、哪个 DMA 接收通道(需与SPI_DMA_Init中初始化的通道一致);3. 控制传输模式:是否循环传输(Flash 操作通常为单次传输);4. 为 DMA 控制器提供 “执行依据”,告诉 DMA“从哪取数据、往哪送、传多少、用哪个通道”。

二、两者的依赖关系(如何配合工作)

DMA_CFG_INFO是为XT_QSPIx服务的 ——DMA 的本质是「外设与内存的直接数据传输」,而XT_QSPIx是这个传输过程中的「外设端主角」,DMA_CFG_INFO则是「传输规则说明书」,具体配合流程如下:

  1. XT_QSPIx提供 “外设端目标”:DMA 传输需要知道「外设的数据地址」(即 SPI 的数据寄存器XT_QSPIx->DR),这个地址由XT_QSPIx确定(不同 SPI 外设的DR地址不同,如XT_QSPI0DR地址是0x40013008XT_QSPI10x40013408)。

  2. DMA_CFG_INFO提供 “传输细节”

    • 若传输方向是「发送(内存→SPI)」:DMA_CFG_INFO->TxDataBuf提供内存地址,DataLen提供传输长度,DmaTxChn提供 DMA 发送通道;
    • 若传输方向是「接收(SPI→内存)」:DMA_CFG_INFO->RxDataBuf提供内存地址,DataLen提供传输长度,DmaRxChn提供 DMA 接收通道。
  3. 函数内部关联两者:函数SPI_FALSH_DMA_OPT会把「XT_QSPIx的外设地址」和「DMA_CFG_INFO的配置参数」结合,配置给 DMA 控制器,最终实现:

    • 发送:TxDataBuf(内存) → DMA 通道 →XT_QSPIx->DR(SPI 外设) → SPI Flash;
    • 接收:SPI Flash →XT_QSPIx->DR(SPI 外设) → DMA 通道 →RxDataBuf(内存)。

三、缺一个会怎么样?(反例说明必要性)

1. 没有XT_QSPIx(没指定硬件)
  • DMA 不知道要和哪个 SPI 外设通信 —— 可能操作到未连接 Flash 的 SPI1,导致数据发错硬件,Flash 完全没响应;
  • 无法获取 SPI 的数据寄存器DR地址,DMA 不知道 “外设端该读写哪个地址”,传输直接失败。
2. 没有DMA_CFG_INFO(没指定配置)
  • DMA 不知道传输方向(是发还是收)、数据存在内存哪里、要传多少字节;
  • 不知道用哪个 DMA 通道(之前初始化的是DMA_CH2发送、DMA_CH3接收,若没指定,可能用错通道导致冲突);
  • 函数无法执行任何有效配置,直接返回失败(false)。

四、代码层面的关联示例(看函数内部如何用两者)

SPI_FALSH_DMA_OPT函数中,两者的关联是「硬绑定」的,核心代码片段如下:

static bool SPI_FALSH_DMA_OPT(XT_SPI_TypeDef *XT_QSPIx, SPI_DMA_CFG_TypeDef *DMA_CFG_INFO) { // ... 前面参数校验、状态复位 ... // 配置DMA发送通道:关联XT_QSPIx(SPI外设)和DMA_CFG_INFO(配置) if (DMA_CFG_INFO->Dir == SPI_DMA_TX || DMA_CFG_INFO->Dir == SPI_DMA_TX_RX) { DMA_SetPeriphAddress(DMA_CFG_INFO->DmaTxChn, (u32)&XT_QSPIx->DR); // 外设地址来自XT_QSPIx DMA_SetMemoryAddress(DMA_CFG_INFO->DmaTxChn, (u32)DMA_CFG_INFO->TxDataBuf); // 内存地址来自DMA_CFG_INFO DMA_SetCurrDataCounter(DMA_CFG_INFO->DmaTxChn, DMA_CFG_INFO->DataLen); // 长度来自DMA_CFG_INFO DMA_Cmd(DMA_CFG_INFO->DmaTxChn, ENABLE); // DMA通道来自DMA_CFG_INFO } // 配置DMA接收通道:同样关联两者 if (DMA_CFG_INFO->Dir == SPI_DMA_RX || DMA_CFG_INFO->Dir == SPI_DMA_TX_RX) { DMA_SetPeriphAddress(DMA_CFG_INFO->DmaRxChn, (u32)&XT_QSPIx->DR); // 外设地址来自XT_QSPIx DMA_SetMemoryAddress(DMA_CFG_INFO->DmaRxChn, (u32)DMA_CFG_INFO->RxDataBuf); // 内存地址来自DMA_CFG_INFO DMA_SetCurrDataCounter(DMA_CFG_INFO->DmaRxChn, DMA_CFG_INFO->DataLen); // 长度来自DMA_CFG_INFO DMA_Cmd(DMA_CFG_INFO->DmaRxChn, ENABLE); // DMA通道来自DMA_CFG_INFO } // ... 后面等待完成、关闭通道 ... }
  • 关键关联点:DMA_SetPeriphAddress函数的「外设地址」必须从XT_QSPIx->DR获取(绑定具体 SPI 硬件);
  • 其他配置(内存地址、长度、DMA 通道)都从DMA_CFG_INFO获取(绑定传输规则)。

五、总结:核心关系一句话概括

XT_QSPIx是「DMA 传输的外设目标」(确定和哪个 SPI 硬件通信),DMA_CFG_INFO是「DMA 传输的执行规则」(确定怎么和这个 SPI 硬件通信),两者是「目标与规则」的依赖关系,共同支撑起 SPI Flash 的 DMA 收发操作 ——规则为目标服务,目标通过规则完成具体传输

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/2 9:31:15

抖音短视频策划:15秒展示GLM-TTS语音克隆神奇效果

抖音短视频策划:15秒展示GLM-TTS语音克隆神奇效果 你有没有试过,只用一段5秒钟的录音,就能让AI“变成你”说话?不是机械朗读,而是语气、节奏、音色都像极了你的声音——哪怕你说的是完全没讲过的句子。这听起来像是科幻…

作者头像 李华
网站建设 2026/4/18 1:46:33

ssm家教郑州成功 vue

目录SSM家教与Vue技术在郑州的成功应用开发技术核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM家教与Vue技术…

作者头像 李华
网站建设 2026/4/18 7:48:55

0x3f第21天复习 (9:50-11.30)(16:10-16:33)

子串基础前缀和3min ac思考和为k的子数组10min x小遗忘 10min遗忘10min x核心问题 10min x依旧不会两数之和 10min 细节错误 1min ac字母异位词分组10min ac1min ac最长连续序列5min ac1min ac移动零3min x1min ac无重复字符的最长子串1min ac思考找到字符串中所有字母异位…

作者头像 李华
网站建设 2026/4/16 7:48:17

GLM-TTS实时推理性能测试:每秒25 token的实际表现

GLM-TTS实时推理性能测试:每秒25 token的实际表现 在智能语音交互日益普及的今天,用户对“像人一样说话”的AI系统提出了更高要求——不仅要自然、有情感,更要快得无感。想象一下:当你向语音助手提问后,等待三五秒才听…

作者头像 李华