中断发生与时钟信号采集

64 2025-08-24 09:54

“中断”并不是直接发生在时钟信号的“上升沿/下降沿”上;时钟只是给整个 MCU(包括中断控制器)提供时序基准,而中断的触发源是:
  1. 外部事件
    引脚电平变化、串口收到字节、ADC 转换完成……
    这些事件与主时钟异步(即它们可以发生在任何时钟周期),一旦满足条件,中断控制器就把挂起标志置位;随后在下一个时钟周期(或若干周期)的上升沿被 CPU 采样并响应。
  2. 内部定时器事件
    计数器在时钟驱动下累加,到达设定值后产生“溢出/比较匹配”事件 → 置位中断标志 → 在下一个时钟周期被采样 → 进入 ISR。
    这里“时钟”只是计数器的计数源,不是中断信号本身
所以更准确的说法是:
“中断事件”先出现;在随后的某个时钟上升沿被 CPU/中断控制器采样,如果发现该中断已使能且优先级足够高,才开始执行中断向量。时钟提供的是采样节拍,而非中断的直接触发沿。

 

 

定时器中断是轮询设计的一种对吗?

不是。
定时器中断与轮询(polling)在实现机制上正好相反:
  1. 轮询
    CPU 主动、反复地查询某个标志或寄存器(while (!(REG & FLAG));)。它把控制权握在自己手里,需要“一直转”。
  2. 定时器中断
    当计数器溢出/比较匹配时,硬件置位中断标志 → CPU 被动地被拉去执行 ISR。主程序不需要“问”,而是被“叫”。
因此定时器中断属于事件驱动/中断驱动,是轮询的对立面。
(只有在 ISR 里再去“轮询”别的外设,才局部包含轮询,但定时器本身的设计思想仍是中断驱动。)

 

全部评论

·