下文都以加速计为例来看:
Latch 解决的是"信号保持"
Latch(锁存)的核心作用是:当传感器检测到事件后,把中断输出引脚(INT)的电平"锁住",不让它因为事件条件消失而自动复位。
-
非锁存模式:事件条件一旦不满足,中断信号就自动撤销。比如"超过阈值才触发",那么加速度回落到阈值以下,信号就没了。
-
锁存模式 :事件触发后,中断引脚持续保持有效电平 ,直到主机主动"清除"它。清除方式通常是读取某个特定寄存器(比如中断源寄存器)。
所以,Latch 决定的是**"中断引脚上的电平什么时候撤销"**。
中断状态寄存器解决的是"是什么触发了"
中断状态寄存器(常叫 INT_SRC 或 WAKE_UP_SRC、TAP_SRC 等)是传感器内部的一个只读/读取清零 的寄存器,它的每一位对应一个具体的中断事件。
-
比如
WAKE_UP_SRC里的WU_IA位,为 1 表示"发生了唤醒事件"。 -
如果同时使能了多个中断到同一个 INT 引脚,读这个寄存器还能知道到底是哪一个事件触发的,因为引脚电平是多个事件的"或"逻辑。
中断引脚保持高电平的时间由谁决定
中断引脚上的高\低电平,通常来自传感器内部的一个 中断锁存/状态输出电路 。它保持多久,由传感器的配置决定,不是 MCU 决定的。MCU 只是被动地看这个引脚。
三种典型情况
情况 1:非锁存模式(透明/直通)
中断引脚的输出直接跟随内部中断条件。
-
事件条件成立 → 引脚高
-
事件条件消失 → 引脚自动变低
保持时间由谁决定:
由事件条件本身持续多久决定。
比如:
-
配置成"加速度超过阈值触发中断"
-
只要加速度还在阈值以上,引脚就一直高
-
加速度回落到阈值以下,引脚立刻变低
这种情况下,MCU 不处理也没关系,引脚会自己跟着物理条件走。但缺点是:如果事件很短(比如一个脉冲),MCU 可能来不及看到。
情况 2:锁存模式(Latch)
事件一旦触发,内部锁存器置位 ,中断引脚被拉高并锁住。
-
事件条件消失后,引脚仍然保持高
-
只有满足清除条件时,才会变低
保持时间由谁决定:
由清除条件什么时候被满足决定。
清除条件通常是:
-
读取某个寄存器 (最常见,比如读
INT_SRC/WAKE_UP_SRC) -
写某个寄存器(写 1 清除)
-
读取数据寄存器
如果你 MCU 一直不去读,那么:
引脚会一直保持高电平,直到永远(或直到芯片复位/掉电)。
所以在这种情况下,"保持高电平的时间"实际上是由你 MCU 什么时候去读寄存器决定的。你不处理,它就不释放。
情况 3:锁存 + 自动复位 / 脉冲模式
有些传感器支持:
-
脉冲模式(Pulse / One-shot) :事件触发后,引脚输出一个固定宽度的脉冲,比如 10µs、1ms,然后自动变低,不管你有没有读。
-
锁存 + 自动超时:锁存一段时间后自动释放,比如 100ms。
保持时间由谁决定:
由传感器内部配置的定时参数决定。
这个时间在芯片手册里会写成类似:
-
INT_PULSE_DURATION -
LATCH_DURATION -
INT_AUTO_RESET
这是硬件定时器产生的,跟 MCU 无关。