news 2026/2/3 3:17:36

简单理解: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/1/16 1:57:46

大模型Token售卖策略:结合GLM-TTS使用场景设计套餐

大模型Token售卖策略:结合GLM-TTS使用场景设计套餐 在AI语音生成技术快速演进的今天,用户早已不满足于“能说话”的机械朗读。从有声书到虚拟主播,从智能客服到个性化助手,市场对自然、情感丰富且高度可控的语音合成提出了前所未有…

作者头像 李华
网站建设 2026/1/29 12:28:52

无障碍服务新方案:为视障用户生成定制化语音提示

无障碍服务新方案:为视障用户生成定制化语音提示 在一间安静的老人公寓里,清晨七点半,智能音箱轻柔响起:“爸,早安。今天天气不错,记得把降压药带上。”声音熟悉得像是儿子就在身边。可实际上,这…

作者头像 李华
网站建设 2026/2/3 3:04:49

RSA握手过程

HTTPS 是应⽤层协议,需要先完成 TCP 连接建⽴,然后⾛ TLS 握⼿过程后,才能建⽴信信安全的连接HTTPS HTTP SSL/TLS。 HTTPS 的本质是在 HTTP 协议之上增加了一个安全层,这个安全层最初由 SSL 协议实现,后来演进为更安…

作者头像 李华
网站建设 2026/1/26 11:27:06

ssm个人旅游计划管理系统vue

目录 系统概述核心功能技术实现安全与扩展性 开发技术 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述…

作者头像 李华
网站建设 2026/1/27 9:15:11

构建GLM-TTS多租户架构:支持不同客户独立运行

构建GLM-TTS多租户架构:支持不同客户独立运行 在智能语音服务快速普及的今天,企业不再满足于“千人一面”的合成声音。从虚拟主播到智能客服,越来越多的应用场景要求语音系统不仅能说会道,更要具备个性化音色、情感表达和精准发音…

作者头像 李华
网站建设 2026/1/31 9:21:38

使用Koyeb部署GLM-TTS实现自动扩缩容

使用 Koyeb 部署 GLM-TTS 实现自动扩缩容 在生成式 AI 快速渗透内容创作的今天,语音合成已不再是简单的“文字变声音”。越来越多的应用场景——从短视频配音到个性化有声书、从虚拟主播到无障碍辅助朗读——都对语音的真实感、情感表达和定制化能力提出了更高要求…

作者头像 李华