传感器的中断 Latch、中断状态寄存器、中断读取与保持时间

下文都以加速计为例来看:

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 无关。

相关推荐
fly_sunnn12 小时前
STM32-GPIO
stm32·单片机·嵌入式硬件
宵时待雨15 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
zhangzhangkeji15 小时前
stm32 14-1 WDG 看门狗:理论部分
stm32
不会代码的小猴16 小时前
启动文件
stm32·嵌入式硬件
深圳老胡16 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
甜甜的大香瓜16 小时前
【MT32F006】MT32F006之Timer定时
单片机
甜甜的大香瓜16 小时前
【MT32F006】MT32F006之读写内部EEPROM
单片机
2401_8628808217 小时前
iMX6ULL 驱动工程搭建 + LED 灯驱动
c语言·驱动开发·嵌入式硬件
hahaha601617 小时前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发