news 2026/4/18 6:32:28

DMA中断

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DMA中断

DMA(Direct Memory Access,直接存储器访问)中断是 DMA 控制器在数据传输过程中,向 CPU 发送的事件通知机制,目的是让 CPU 无需轮询 DMA 传输状态,仅在特定事件发生时才介入处理,极大降低 CPU 占用率。

DMA 中断并非单一类型,而是包含一组针对不同传输事件的中断,核心分类如下:

中断类型英文缩写触发条件核心作用
半传输中断HT (Half Transfer)DMA 传输完成缓冲区一半数据时提前处理部分数据(如双缓冲切换)
传输完成中断TC (Transfer Complete)DMA 完成全部数据传输时处理完整数据块、关闭 / 重启传输
传输出错中断TE (Transfer Error)传输过程中出现地址越界、总线冲突等错误及时处理异常,避免数据损坏
全局中断GI (Global Interrupt)HT/TC/TE 任意一种中断触发时统一触发中断服务程序(ISR)

DMA 中断的核心工作流程

DMA 中断的工作流程本质是 “硬件事件触发 → 中断请求 → CPU 响应 → 软件处理 → 状态重置” 的闭环,可拆分为初始化阶段运行触发阶段中断处理阶段收尾重置阶段四个核心阶段:

一、初始化阶段(软件配置,为中断触发做准备)

这是中断能正常工作的前提,所有配置需在启动 DMA 前完成:

  1. 使能 DMA 时钟:通过 RCC 寄存器开启 DMA 控制器的时钟(如__HAL_RCC_DMA1_CLK_ENABLE()),否则 DMA 硬件无法工作。
  2. 配置 DMA 通道参数:设置传输方向(外设↔内存)、地址递增模式、数据宽度、传输模式(普通 / 循环)、优先级等。
  3. 使能指定中断类型:通过 DMA_CCR 寄存器开启需要的中断(HTIE/TCIE/TEIE),比如__HAL_DMA_ENABLE_IT(&hdma, DMA_IT_HT | DMA_IT_TC)
  4. 配置 NVIC 中断控制器
    • 为 DMA 通道分配中断优先级(避免与其他中断冲突);
    • 使能该 DMA 通道对应的 NVIC 中断通道(如HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn))。
  5. 绑定外设与 DMA 通道:将 DMA 通道关联到目标外设(如 UART 的 RX/TX),启动 DMA 传输(如HAL_UART_Receive_DMA())。
二、运行触发阶段(硬件自动执行,中断请求产生)

此阶段完全由硬件完成,无需 CPU 干预:

  1. DMA 控制器按照配置的参数开始数据传输(外设→内存 / 内存→外设);
  2. 当触发预设事件(如传输到一半、全部完成、出现错误):
    • DMA 硬件自动置位对应的中断标志位(ISR 寄存器中的 HTIF/TCIF/TEIF);
    • 若该中断类型已使能(如 HTIE=1),DMA 控制器会向 NVIC 发送中断请求信号
  3. NVIC 根据中断优先级判断:若当前无更高优先级中断在执行,就向 CPU 发送中断请求。
三、中断处理阶段(CPU 响应,软件执行核心逻辑)

这是中断的核心处理环节,CPU 从 “休眠 / 其他任务” 切换到中断服务:

  1. CPU 暂停当前执行的指令,保存上下文(PC、寄存器值等);
  2. 跳转到该 DMA 通道对应的中断服务程序(ISR)入口(如DMA1_Channel5_IRQHandler());
  3. 在 ISR 中判断中断源(关键步骤):
    • 读取 DMA_ISR 寄存器,检查是 HTIF、TCIF 还是 TEIF 标志置位;
    • 针对不同中断源执行对应的业务逻辑:
      • HT 中断:处理半缓冲区数据、填充下一段缓冲区;
      • TC 中断:处理完整数据块、标记传输完成;
      • TE 中断:清除错误标志、重启传输或上报异常。
  4. 清除中断标志位(重中之重):
    • 必须通过 DMA_IFCR 寄存器手动清除对应标志(如DMA1->IFCR |= DMA_IFCR_CTCIF5清除 TC 标志);
    • HAL 库会在HAL_DMA_IRQHandler()中自动完成标志清除,无需手动操作,但标准库需显式处理。
四、收尾重置阶段(恢复状态,准备下一次中断)
  1. CPU 恢复之前保存的上下文(PC、寄存器);
  2. 回到中断发生前执行的指令位置,继续原有任务;
  3. 若配置为循环模式:DMA 自动重置传输长度(NDTR 寄存器),重新开始传输,等待下一次中断触发;
  4. 若为普通模式:需手动重启 DMA 传输,否则中断不再触发。

DMA 中断的常见问题与避坑指南

  1. 中断重复触发

    • 原因:未清除中断标志位(标准库易犯)、循环模式下中断使能未正确配置。
    • 解决:确保中断处理后清除HTIF/TCIF/TEIF标志,HAL 库需保证回调函数正常执行。
  2. 数据丢失 / 覆盖

    • 原因:CPU 处理数据的速度慢于 DMA 传输速度,双缓冲切换不及时。
    • 解决:简化中断回调中的业务逻辑(仅做数据拷贝 / 指针切换),耗时操作移至主线程;增大缓冲区或提高 CPU 主频。
  3. 中断不触发

    • 原因:DMA 时钟未使能、NVIC 中断未开启、中断优先级配置错误、DMA 通道绑定外设错误。
    • 解决:逐项检查时钟、NVIC 配置、通道映射(参考芯片手册),可通过调试器查看 DMA 寄存器状态。

DMA 中断的典型应用场景

  1. 高速数据采集:ADC+DMA 采集传感器数据,HT/TC 中断实时处理,避免数据堆积。
  2. 串口 / 网口通信:大数据包传输时,DMA 负责数据搬运,中断仅通知传输完成,CPU 专注协议解析。
  3. 音频 / 视频播放:双缓冲 + HT/TC 中断实现音频数据无缝填充,避免播放卡顿。

总结

  1. DMA 中断核心价值:替代 CPU 轮询,仅在传输半完成、完成或出错时触发,大幅降低 CPU 占用率。
  2. 核心中断类型:HT(半传输)、TC(传输完成)、TE(传输错误)是最常用的三类,其中 HT+TC 配合循环模式可实现双缓冲高效处理。
  3. 使用关键:正确配置 NVIC 优先级、确保中断标志位清除、简化回调函数逻辑,避免中断延迟或数据丢失。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 19:58:21

超实用AI教材写作指南,低查重保障,高效打造优质教材!

教材编写痛点与AI工具的解决方案 教材编写过程中,格式问题常常让很多创作者感到困扰。比如,标题应该用多大字体、层级应该分成几级?引用文献时,是按照GB/T7714标准,还是跟着某个出版社的特别格式走?还有习…

作者头像 李华
网站建设 2026/3/16 8:42:00

AI写论文百科!4款AI论文写作工具,一站式搞定你的学术论文!

在2025年,学术写作迎来了智能化的浪潮,越来越多的人开始尝试使用AI论文写作工具。这些工具在撰写硕士或博士论文等长篇学术作品时,往往面临一些问题。一方面,许多AI写论文的工具缺乏必要的理论深度,无法支持复杂的学术…

作者头像 李华
网站建设 2026/4/8 9:31:12

实测对比后!千笔·降AIGC助手,本科生降重首选平台

在AI技术快速发展的今天,越来越多的学生开始借助AI工具辅助论文写作,提升效率、优化结构。然而,随之而来的AI率超标问题却让许多学生陷入困境——无论是知网、维普还是Turnitin,都在不断升级算法,严控AI生成内容的痕迹…

作者头像 李华
网站建设 2026/4/15 18:24:12

2026必备!千笔·专业降AIGC智能体,备受喜爱的降AIGC网站

在AI技术迅速发展的今天,越来越多的专科生开始借助AI工具辅助论文写作,以提升效率和内容质量。然而,随着查重系统对AI生成内容的识别能力不断增强,AI率超标问题日益凸显,成为论文提交前的一大隐患。面对市场上琳琅满目…

作者头像 李华
网站建设 2026/4/17 17:51:08

Spring 的基石:OCP、DIP 与 IoC 实现详解

Spring 的基石:OCP、DIP 与 IoC 实现详解 Spring 框架能成为 Java 生态的王者,核心在于它深刻实践了面向对象设计原则,特别是 OCP(开闭原则) 和 DIP(依赖倒置原则),并通过 IoC&…

作者头像 李华