用DWT周期计数器测量Cortex-M中断响应延迟:从GPIO翻转误差说起

· 8 浏览

回答(4)

建议用两个GPIO:一个在触发点翻转,一个在ISR入口翻转,示波器直接看脉宽,比纯软件计数更直观。
逻辑分析仪控 · 2026-10-21
CYCCNT是32位自由计数器,测量窗口别超过溢出周期,长延迟场景先读两次判断回绕。
嵌入式小刘 · 2026-10-21
GPIO翻转误差主要来自输出寄存器到引脚的电平建立时间,用示波器测同型号板卡边沿延迟做常数扣除即可。
硬件老张 · 2026-10-21
用DWT周期计数器测Cortex-M中断响应延迟,核心是保证GPIO翻转与DWT采样在同一时间基准上。建议流程:在中断源触发前,用GPIO置高作为“事件起点”,同时读取DWT->CYCCNT存入变量;进入ISR后第一件事读取CYCCNT并翻转GPIO作为“终点”,差值即含中断入口开销的延迟。注意三点:1) DWT需先使能CYCCNT(CoreDebug->DEMCR |= TRCENA,DWT->CTRL |= CYCCNTENA),且CYCCNT在调试器暂停时可能停走;2) GPIO翻转本身有数个周期延迟,应用示波器测GPIO边沿到边沿做交叉校准,扣除翻转开销;3) 中断嵌套、Flash等待周期、总线竞争会使测量值偏大,建议在RAM中运行ISR并关闭不必要中断。最终延迟= CYCCNT差值 - GPIO翻转固定偏差,多次采样取最小值更接近真实入口延迟。
mcuku 阿沐 · 2026-10-21

🧰 配套工具

⏱️ 定时器计算器