DMA中断

📅 发布时间:2026/7/11 19:49:19 👁️ 浏览次数:
DMA中断
DMADirect 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 任意一种中断触发时统一触发中断服务程序ISRDMA 中断的核心工作流程DMA 中断的工作流程本质是 “硬件事件触发 → 中断请求 → CPU 响应 → 软件处理 → 状态重置” 的闭环可拆分为初始化阶段、运行触发阶段、中断处理阶段、收尾重置阶段四个核心阶段一、初始化阶段软件配置为中断触发做准备这是中断能正常工作的前提所有配置需在启动 DMA 前完成使能 DMA 时钟通过 RCC 寄存器开启 DMA 控制器的时钟如__HAL_RCC_DMA1_CLK_ENABLE()否则 DMA 硬件无法工作。配置 DMA 通道参数设置传输方向外设↔内存、地址递增模式、数据宽度、传输模式普通 / 循环、优先级等。使能指定中断类型通过 DMA_CCR 寄存器开启需要的中断HTIE/TCIE/TEIE比如__HAL_DMA_ENABLE_IT(hdma, DMA_IT_HT | DMA_IT_TC)。配置 NVIC 中断控制器为 DMA 通道分配中断优先级避免与其他中断冲突使能该 DMA 通道对应的 NVIC 中断通道如HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn)。绑定外设与 DMA 通道将 DMA 通道关联到目标外设如 UART 的 RX/TX启动 DMA 传输如HAL_UART_Receive_DMA()。二、运行触发阶段硬件自动执行中断请求产生此阶段完全由硬件完成无需 CPU 干预DMA 控制器按照配置的参数开始数据传输外设→内存 / 内存→外设当触发预设事件如传输到一半、全部完成、出现错误DMA 硬件自动置位对应的中断标志位ISR 寄存器中的 HTIF/TCIF/TEIF若该中断类型已使能如 HTIE1DMA 控制器会向 NVIC 发送中断请求信号NVIC 根据中断优先级判断若当前无更高优先级中断在执行就向 CPU 发送中断请求。三、中断处理阶段CPU 响应软件执行核心逻辑这是中断的核心处理环节CPU 从 “休眠 / 其他任务” 切换到中断服务CPU 暂停当前执行的指令保存上下文PC、寄存器值等跳转到该 DMA 通道对应的中断服务程序ISR入口如DMA1_Channel5_IRQHandler()在 ISR 中判断中断源关键步骤读取 DMA_ISR 寄存器检查是 HTIF、TCIF 还是 TEIF 标志置位针对不同中断源执行对应的业务逻辑HT 中断处理半缓冲区数据、填充下一段缓冲区TC 中断处理完整数据块、标记传输完成TE 中断清除错误标志、重启传输或上报异常。清除中断标志位重中之重必须通过 DMA_IFCR 寄存器手动清除对应标志如DMA1-IFCR | DMA_IFCR_CTCIF5清除 TC 标志HAL 库会在HAL_DMA_IRQHandler()中自动完成标志清除无需手动操作但标准库需显式处理。四、收尾重置阶段恢复状态准备下一次中断CPU 恢复之前保存的上下文PC、寄存器回到中断发生前执行的指令位置继续原有任务若配置为循环模式DMA 自动重置传输长度NDTR 寄存器重新开始传输等待下一次中断触发若为普通模式需手动重启 DMA 传输否则中断不再触发。DMA 中断的常见问题与避坑指南中断重复触发原因未清除中断标志位标准库易犯、循环模式下中断使能未正确配置。解决确保中断处理后清除HTIF/TCIF/TEIF标志HAL 库需保证回调函数正常执行。数据丢失 / 覆盖原因CPU 处理数据的速度慢于 DMA 传输速度双缓冲切换不及时。解决简化中断回调中的业务逻辑仅做数据拷贝 / 指针切换耗时操作移至主线程增大缓冲区或提高 CPU 主频。中断不触发原因DMA 时钟未使能、NVIC 中断未开启、中断优先级配置错误、DMA 通道绑定外设错误。解决逐项检查时钟、NVIC 配置、通道映射参考芯片手册可通过调试器查看 DMA 寄存器状态。DMA 中断的典型应用场景高速数据采集ADCDMA 采集传感器数据HT/TC 中断实时处理避免数据堆积。串口 / 网口通信大数据包传输时DMA 负责数据搬运中断仅通知传输完成CPU 专注协议解析。音频 / 视频播放双缓冲 HT/TC 中断实现音频数据无缝填充避免播放卡顿。总结DMA 中断核心价值替代 CPU 轮询仅在传输半完成、完成或出错时触发大幅降低 CPU 占用率。核心中断类型HT半传输、TC传输完成、TE传输错误是最常用的三类其中 HTTC 配合循环模式可实现双缓冲高效处理。使用关键正确配置 NVIC 优先级、确保中断标志位清除、简化回调函数逻辑避免中断延迟或数据丢失。