从 DREQ 到中断:RP2040 DMA 的 “快递系统” 全解析
DMA内核的本职是 “运算、处理任务”如果让它手动搬数据比如从传感器读数据存到内存会浪费算力搬数据时没法干别的而 DMA 是 “专职搬运工具”能高效完成批量传输让内核可以去处理其他任务甚至进入低功耗休眠既提升效率又节省电量。DMA 直接存储器存取控制器与总线结构有单独的读和写主连接并可以代替处理器执行批量数据传输。这使得处理器可以自由地处理其他任务或进入低功耗睡眠状态。DMA 单独读写最多可以操控 32 位数据具有 12 个独立的通道每个通道都监督一系列总线传输。DMA 通常用于以下三种情况的数据传输​内存到外设​当需要更多数据时外设向 DMA 发出信号。DMA 从 RAM 或 flash 中的数组中读取数据并写入外围设备的数据 FIFO​外设到内存​当一个外围设备在接收到外部的传感器/通信接口的数据时它就会向 DMA 发出信号。DMA 从外围设备的数据 FIFO 中读取这些数据并将其写入 RAM 中的一个数组​内存到内存​DMA 在 RAM 中的两个缓冲区之间传输数据。图 2.17 RP2040 DMA 控制器架构框图架构图是 DMA 的 “内部工作流程”每个模块的作用如下​AHB-lite Read/Write Master 总线​是 DMA 连接到系统总线AHB-lite的 “接口Read Master负责从系统内存 / 外设读数据Write Master负责向系统内存 / 外设写数据。​Read/Write Address FIFO​FIFO 是 “先进先出的缓冲区”这里存的是要读取 / 写入的地址比如从内存的 0x20000000 开始传输地址会存在这里。它可以地址请求避免地址生成和数据传输 “节奏不匹配” 导致卡顿。​Transfer Data FIFO​它存的是正在传输的数据同样是缓冲作用让 “地址请求” 和 “数据搬运” 的节奏对齐保证传输流畅。​Address Generator​DMA 的 “地址自动计算器”比如要从内存的 0x20000000 开始连续传 100 个字节它会自动生成 0x20000000、0x20000001… 这些连续地址不用内核手动算地址。​Control/Status Registers​是 DMA 的控制中心 状态显示器控制软件通过这里配置 DMA比如传输方向是 “外设 → 内存” 还是 “内存 → 外设”、数据大小是 8/16/32 位、要传多少数据状态软件可以在这里查看传输进度比如传了多少、有没有传完、有没有出错。​AHB-lite Slave Interface​是 “内核配置 DMA 的入口”内核通过这个接口向 Control/Status Registers 写入配置参数告诉 DMA“要搬什么数据、怎么搬”。接下来我们以 “外设 → 内存” 传输比如传感器数据存到内存为例内核通过​AHB-lite Slave Interface​给 Control/Status Registers 写配置比如源地址是传感器的 FIFO 地址、目标地址是内存数组地址、传输长度是 100 字节Address Generator自动生成要读取的外设地址、要写入的内存地址分别存到 Read Address FIFO、Write Address FIFOAHB-lite Read Master从外设读数据放到 Transfer Data FIFO 缓冲AHB-lite Write Master从 Transfer Data FIFO 取数据写到内存的目标地址整个过程中内核不用参与完全由 DMA 自动完成。DMA的每个通道都有对应状态寄存器软件可以通过它来编程和监控该通道数据读写的进度。我们把每个 DMA 通道想象成一个独立的快递小哥而状态寄存器就是这个小哥的 “任务清单 工作日志本”​编程写寄存器​你软件在小哥出发前把任务写在日志本上 —— 比如 “从内存的 A 位置搬 100 个数据到 UART 外设”“搬数据时要听 UART 的 DREQ 信号指挥”这就是给 DMA 通道配置任务​监控进度读寄存器小哥干活时会实时在日志本上记录进度 ——“已搬了 50 个数据”“任务完成”“搬数据时出错了”你软件随时看日志本就能知道这个 DMA 通道的工作状态不用一直盯着它干活。DMA 传输数据的大小可以是 32、16 或 8 位。每个通道配置一次源传输大小和目标传输大小相同这是规定了 DMA “搬数据的打包方式”——DMA 每次搬数据时可选择搬​1 个字节8 位、2 个字节16 位或 4 个字节32 位相当于快递小哥一次搬 1 个包裹、2 个包裹或 4 个包裹​源和目标大小必须相同​意思是 “从哪里搬” 和 “搬到哪里去” 的打包方式要一致 —— 不能从内存里一次搬 4 个字节32 位却往外设里一次只写 1 个字节8 位否则会出现数据错乱就像小哥一次抱 4 个包裹却只能往快递柜里塞 1 个剩下的会掉地上​每个通道配置一次​一个 DMA 通道一旦定了用 32 位传输那这次任务全程都用 32 位不用中途改要换方式的话得重新配置这个通道。DMA 不同通道之间可以相互组合例如一个通道可以配置另一个通道从内存中的一系列控制块加载配置数据然后当需要重新配置时第二个通道可以通过 CHAIN_TO 选项调用到第一通道这是 DMA 通道的 “接力干活” 或 “互相配合” 功能让多个 DMA 通道能协同完成复杂任务不用软件内核中途插手假设你有两个 DMA 通道通道 1是 “配置员”通道 2是 “搬运工”你先在内存里存好​多套搬运任务的配置​比如 “任务 1搬 100 个 32 位数据到 UART0”“任务 2搬 200 个 8 位数据到 SPI0”“任务 3把内存 A 的数据复制到内存 B”这些配置叫 “控制块”。你给通道 2 配置初始任务“先找通道 1让它从内存里读第一套控制块任务 1然后按这个控制块干活”。当通道 2 完成任务 1 后不需要软件内核来重新配置它可以通过​CHAIN_TO 选项​相当于 “呼叫接力”让通道 1 再从内存里读第二套控制块任务 2然后通道 2 继续干任务 2以此类推直到所有控制块的任务都完成。同时 DMA 也可以和其他外设配合使用外设和 DMA 直接通过 DREQs 通道传输所谓 DREQ就是外设给 DMA 发的“暗号”告诉 DMA“我准备好收 / 发数据了你可以开始传了”比如 UART 要发数据时当 UART 的发送 FIFO 空了它会发 DREQ 信号给 DMADMA 收到后就把内存里的数据传到 UART 的 FIFO比如 UART 要收数据时当 UART 的接收 FIFO 满了它发 DREQ 给 DMADMA 就把 FIFO 里的数据取到内存。不同外设和 DREQ 通道对应关系可以查看 DREQ 表它是“外设功能 →DREQ 通道” 的对应清单每个 DREQ 编号对应一个外设的收 / 发功能图 2.18 RP2040 外设 DREQ 通道与 DMA 映射表以上表为例我们可以看到DREQ20 对应 “UART0_TX”UART0 的发送请求DREQ17 对应 “SPI0_RX”SPI0 的接收请求。DMA 也可以和中断配合使用当 DMA 中某个通道数据读写完成后可以触发中断使得程序进行对应操作比如数据传完了内核去分析这些数据咱们把 DMA 通道比作​负责不同搬运任务的快递小哥​内核就是公司里的 “老板”之前说过小哥干活的时候老板可以摸鱼处理其他任务或者睡觉低功耗休眠不用盯着小哥当小哥把一批数据搬完了比如把传感器的 100 个数据全存到内存里了他不能直接跑去找老板 —— 而是会按一个 “紧急呼叫铃”这个​呼叫铃就是中断​老板听到铃响就知道 “某个小哥的活干完了”然后放下手里的事去做后续工作比如分析刚搬来的传感器数据、把数据再传给 U 盘、清空内存准备下一次搬运。简单说​DMA 完成任务后触发中断是给内核发 “完工通知”让内核能及时处理后续任务不用一直轮询 “DMA 干完没干完没”既省了内核的精力又保证了任务的及时性。RP2040 DMA 提供了两个系统 IRQs具有独立的掩蔽和状态寄存器例如INTE0、INTE1。任何通道中断请求的组合都可以被路由到任何一个系统 IRQ先解释这段话里的关键名词再用例子串起来​系统 IRQs​可以理解成公司里的​两个 “总客服热线”IRQ0 和 IRQ1对应 INTE0、INTE1所有 DMA 小哥的 “完工通知”中断请求都要通过这两个热线打给老板内核。​掩蔽寄存器​“掩蔽” 就是 “屏蔽、静音” 的意思这个寄存器相当于热线的 “静音开关”—— 比如你可以设置 “让小哥 1 的通知打不进热线 0”或者 “让热线 1 暂时静音所有通知都走热线 0”避免不重要的通知打扰老板。​状态寄存器​相当于热线的 “来电记录本”里面会记着 “是小哥 3 的通知打进来了”“小哥 7 的任务完工了”老板看到记录本就知道该处理哪个小哥的后续任务。​路由​就是 “分配、定向” 的意思 —— 你可以随便安排哪个小哥的通知走哪个热线。RP2040 的 DMA 有 12 个通道12 个小哥但只留了 2 个客服热线两个系统 IRQs。你可以这样配置把​**小哥 1传感器数据搬运、小哥 2UART 数据传输的通知都路由到热线 0INTE0**​把​**小哥 3内存复制、小哥 4SPI 数据传输的通知都路由到热线 1INTE1**​甚至可以把所有小哥的通知都路由到同一个热线或者让某几个小哥的通知同时走两个热线如果你觉得小哥 3 的任务不重要还能通过掩蔽寄存器把小哥 3 的通知屏蔽掉他就算完工了也打不进热线老板不会收到他的通知。这种设计的好处是​灵活管理多个 DMA 通道的中断避免中断信号混乱同时让内核可以按热线的优先级处理不同类型的 DMA 任务​比如把紧急的任务路由到优先级高的热线。

相关新闻

大模型微调技术:LoRA、MoLoRA与MoR1E解析

大模型微调技术:LoRA、MoLoRA与MoR1E解析

1. 大模型微调技术演进全景解析 在深度学习领域,大型语言模型(LLM)的微调一直是个令人又爱又恨的话题。作为一名长期奋战在模型优化一线的工程师,我深刻理解全参数微调带来的资源噩梦——动辄需要数十张A100显卡,存储空…

2026/7/27 21:35:36阅读更多 →
【阿里云官方未公开】通义千问VLLM加速部署手册:基于ECS+GPU+NAS的私有化推理架构(限内部技术组解密版)

【阿里云官方未公开】通义千问VLLM加速部署手册:基于ECS+GPU+NAS的私有化推理架构(限内部技术组解密版)

更多请点击: https://kaifayun.com 第一章:通义千问与阿里云生态集成概述 通义千问(Qwen)作为阿里云自主研发的超大规模语言模型,深度融入阿里云全栈技术体系,通过标准化API、统一身份认证(RAM…

2026/7/27 21:35:36阅读更多 →
聊一聊 .NET 中的 CancellationTokenSource

聊一聊 .NET 中的 CancellationTokenSource

聊一聊 .NET 中的 CancellationTokenSource 在异步编程的世界里,我们经常需要处理一些长时间运行的任务,比如下载大文件、处理批量数据或等待网络响应。这些任务如果中途被用户取消,或者超时未完成,如何优雅地终止它们&#xff1…

2026/7/27 21:35:36阅读更多 →
批量文献提炼方法与应用实践指南

批量文献提炼方法与应用实践指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页,找文献翻遍十几个网站还是缺关键资料,写正文卡壳半天憋不出一句话,降重改到凌晨三点结果逻辑全乱,答辩前一天PPT还没做完。别慌,亲测这四个工具能让你少熬半…

2026/7/28 0:04:30阅读更多 →
期房项目怎么提前展示给客户看?

期房项目怎么提前展示给客户看?

期房销售的核心难题是“看不见”。客户付了几百万,却只能对着图纸想象未来的家。行业数据显示,“卖家秀”和“买家秀”的差距太大,交房即维权几乎成了常态。数字展示工具的价值正在于此——它能把“图纸上的期房”变成“屏幕上的现房”。五大…

2026/7/28 0:04:30阅读更多 →
Web前端入门第 问:JavaScript 中的 Web Worker 为什么能提升代码性能?

Web前端入门第 问:JavaScript 中的 Web Worker 为什么能提升代码性能?

Web前端入门第 3 问:JavaScript 中的 Web Worker 为什么能提升代码性能? 作为一名前端开发者,你是否遇到过这样的场景:网页加载了一个复杂的计算任务,结果整个页面卡顿得像“死机”一样,点击按钮没反应&…

2026/7/28 0:04:30阅读更多 →
RAG牛了,天大RE-Rag更懂用户

RAG牛了,天大RE-Rag更懂用户

今天为大家分享的是杭州电子科技大学、天津大学、香港城市大学联合出品的社交媒体热度预测论文–RE-Rag,它把social attribute从"辅助特征"升维成"传播机制代理变量",让RAG检索终于能分清"内容像"和"传播路径像"…

2026/7/28 0:04:30阅读更多 →
面试官:随着大模型上下文不断增加,RAG 会消失吗?

面试官:随着大模型上下文不断增加,RAG 会消失吗?

“二十多份产品手册,总共 40 万 token;模型有 100 万上下文。一次全塞进去不就行了,为什么还要做 RAG?” 候选人回答:“因为 RAG 能减少幻觉。” 这个回答不算错,但只答到了结果,没有解释资料…

2026/7/28 0:04:30阅读更多 →
函数里改了变量,外面为什么纹丝不动?——指针初探,Day11学习记录

函数里改了变量,外面为什么纹丝不动?——指针初探,Day11学习记录

1. 从“传值传址”的困惑说起 Day09 学函数的时候&#xff0c;我遇到了一个让人抓狂的问题。写了一个 change 函数想把外部变量改成 100&#xff0c;结果外面的变量纹丝不动。代码长这样&#xff1a; #include <stdio.h>void change(int x) {x 100; // 我把 x 改成了…

2026/7/28 0:02:30阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

&#x1f539; 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具&#xff0c;凭借本地离线运行、可视化图形操作和任务自动化三大核心特性&#xff0c;赢得了众多用户的青睐。与普通在线对话AI工具不同&#xff0c;它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接&#xff0c;是用激光束对阀座壳体&#xff08;通常为不锈钢或铝合金&#xff09;进行密封焊接&#xff0c;使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX&#xff1a;三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →