嵌入式外部中断:窄脉冲为何会消失?
GPIO脉冲真实存在,不等于CPU必然收到中断。嵌入式异步输入需要分别满足亚稳态传播风险和最小脉宽约束;两者的改善措施不同,应先识别漏检发生在哪一段硬件路径。
若外部边沿恰好靠近输入采样触发器的时钟边缘,器件内部触发器可能短暂进入亚稳态。多级同步器让第一级输出有额外时间稳定,再由后级采样,从而显著降低亚稳态传播到逻辑中的概率。增加同步级数通常会增加至少一个时钟周期的检测延迟,并消耗更多触发器,但不能把失效率说成绝对为零;具体MTBF还依赖器件参数、时钟频率和输入翻转率。软件防抖针对机械触点的重复跳变,并不能替代跨时钟域同步。
同步级数之外还要考虑极性检测和事件锁存由哪个时钟域完成。某些控制器在同步链路后再做边沿检测,短脉冲即使进入第一级,也可能在到达边沿逻辑前被错过;另一些器件对GPIO输入有专用滤波或异步事件锁存,其行为需以芯片参考手册为准。高翻转率噪声源会增加亚稳态暴露概率,却不等同于脉冲必然消失。验收要同时测量输入到中断的延迟分布及极端时钟相位下的漏检概率。
对不能改变内部同步级数的MCU,工程师可调整的是外部信号整形、可选输入路径和事件速率,不应把FPGA里的同步链设计方法直接当成GPIO软件配置。若要在FPGA与处理器之间传递事件,可把事件编码成翻转位,再由接收域比较前后状态;但在两次观察之间连续翻转两次仍会抵消,因此该办法也要求源端速率受限。嵌入式跨域接口最终必须有事件间隔或握手协议,不能仅靠增加触发器作无条件保证。
检测概率的另一项硬边界是脉冲宽度。对于纯同步采样链路,若高电平短于采样周期,信号可能在相邻两次采样间完整出现而未被任何一次采样观察到;同步器级数解决的是亚稳态风险,不会自动延长输入脉冲。脉冲宽度刚好接近一个周期时,也不能在未知相位下承诺必达,因为建立时间、保持时间和边沿位置都会影响采样结果。增加采样频率能缩小风险窗口,但不适合用作没有上界的保证。
如果源端可控,可使用脉冲展宽或请求/应答握手机制,使事件保持到接收方确认。若源端无法配合且脉冲很窄,则应评估外设是否提供异步边沿锁存、定时器输入捕获或硬件事件路由。输入捕获把事件时刻记入计数器,减少中断服务延迟造成的时间测量误差,但捕获寄存器可能在下一事件到来前被覆盖;仍需依据事件间隔和状态位制定读取策略。不同MCU对滤波器采样时钟、最小脉宽与数字滤波窗口定义并不相同。
长线输入还可能出现振铃和慢边沿。数字施密特输入可提供一定迟滞,外部电路也能限制毛刺,但RC滤波会改变边沿时间并可能缩短或拉宽不同极性的有效脉冲。若事件具有计量意义,不能只在示波器上确认波形存在,还应使用最差电压、时钟和温度条件测量阈值交越及捕获结果。确认信号低于规格的最小脉宽时,软件重试并不能恢复一次已经没有被硬件锁存的边沿。
可靠事件源必须同时满足同步风险和脉宽边界。先确定信号条件,再选择同步、锁存或捕获路径;相位扫描与计数核对通过后,才能确认窄脉冲不会在输入链路中消失。





