登录/注册

I2C中断

更多

好的,我们来详细解释一下 I2C 中的中断。

在 I2C 通信中,“中断”通常指代两种相关但不同的概念,理解其差异对嵌入式开发很重要:

  1. I2C 外设模块自身产生的中断 (I2C Peripheral Interrupt):

    • 这是什么? 这是在微控制器(MCU)内部的 I2C 硬件控制器(例如 STM32 的 I2C, AVR 的 TWI 模块)在工作过程中产生的中断信号。
    • 如何产生的? 当 I2C 总线上发生特定的事件或状态变化时(这些事件通常由状态寄存器中的标志位表示),I2C 模块可以触发一个中断请求给 MCU 的 CPU。
    • 触发事件类型:
      • 起始位 (START) 已发送/接收
      • 从机地址 (SLA+W/R) 已发送/接收并得到应答 (ACK)
      • 接收到匹配的自身从机地址 (用于从机模式)
      • 广播呼叫地址 (General Call Address) 已接收 (用于从机模式)
      • 数据字节已发送完成,等待应答/非应答 (ACK/NACK)
      • 数据字节已接收完成,可以读取
      • 总线错误 (BUS ERROR),例如无效的起始/停止位时序
      • 仲裁丢失 (ARBITRATION LOST),主模式竞争总线失败
      • 应答失败 (ACK FAILURE),期望的 ACK 未收到(如目标设备无响应)
      • 停止位 (STOP) 检测到(很重要
      • 数据寄存器为空,可以写入下一个待发送字节。
    • 用途: 这种中断用于异步通知 CPU:I2C 模块需要关注。
      • 主模式: 通知 CPU 当前传输状态(例如:数据已发送成功、可以发送下一个字节、接收到数据、传输完成、发生错误)。主设备往往需要这些中断事件来驱动状态机以完成整个通信流程。
      • 从模式: 通知 CPU 有主机发起传输请求(地址匹配)、已收到主机发来的数据或主机要求发送数据。
    • 编程模型 (通常使用中断服务例程 ISR):
      1. 在 I2C 和系统中断控制器中启用所需的中断源(例如 EVT (Event) 和 ERR (Error) 中断)。
      2. 在中断服务程序 (ISR) 中:
        • 读取 I2C 状态寄存器 (SRx) 以确定触发中断的具体事件(哪个标志位被置位)。
        • 根据具体事件执行操作(例如,清除状态标志、写入下一个数据到数据寄存器、从数据寄存器读取接收到的数据、处理错误)。
        • 清除中断挂起标志。
  2. 从设备通过专用中断线通知主设备的中断 (External/Device-Specific Interrupt Line):

    • 这是什么? 这是指某些具有中断功能的 I2C 从设备(例如传感器 MPU6050、EEPROM、RTC、GPIO 扩展芯片等)拥有的一条额外的物理引脚,通常标为 /INTINTBIRQ 等。
    • 如何工作的?
      • 当该从设备内部发生特定事件时(例如,传感器有新的测量数据准备就绪、RTC 的闹钟触发、GPIO 输入状态改变),它会将 /INT 引脚拉低(通常是低电平有效)。
      • 这条 /INT 引脚需要连接到主控制器 MCU 的某个通用输入/输出 (GPIO) 引脚,并将该 GPIO 引脚配置为外部中断 (EXTI) 输入。
    • 用途: 这是一种高效的机制,允许从设备主动通知主设备,避免了主设备需要不断地轮询 (Polling) I2C 从设备去“询问”是否有新数据或事件发生的低效方式。主设备收到这个 GPIO 上的中断后,知道某个从设备有事情需要处理,可以开始通过 I2C 总线去读取数据或处理事件。
    • 编程模型:
      1. 硬件连接:从设备的 /INT 引脚连接到 MCU 的 GPIO 引脚 (配置为 EXTI)。
      2. 配置 MCU 的 EXTI 和 NVIC,使能该 GPIO 引脚上的中断(例如上升沿、下降沿或双边沿触发)。
      3. 在从设备中配置或启用其产生中断的条件(例如使能数据准备中断、运动检测中断、报警中断等,通过 I2C 写从设备的特定配置寄存器)。
      4. 在 MCU 为该 GPIO 引脚编写的外部中断服务程序 (ISR) 中:
        • 处理 EXTI 标志位。
        • 因为中断线可能是多个设备共享的(通常不好),需要判断是哪个设备产生了中断(或只有一个设备时直接处理)。
        • 通过 I2C 总线(此时 MCU 作为 I2C 主设备)去访问产生中断的那个从设备。
          • 从状态寄存器读取中断标志位以确认事件类型。
          • 执行需要的操作(如读取新数据)。
          • 清除从设备内部的中断标志位(通常通过读取状态寄存器或写特定值)。

关键区别:

应用示例 (组合使用):

想象一个 I2C 加速度计传感器(如 MPU6050)连接到一个 MCU。

  1. 硬件:
    • SCL/SDA 连接:用于 I2C 通信。
    • /INT 连接:MPU6050 的 /INT 引脚连接到 MCU 的一个 GPIO/EXTI 引脚。
  2. 配置:
    • MCU 初始化其 I2C 主模块(可能配置一些事件中断,但启动时不一定用)。
    • MCU 初始化 /INT 对应的 GPIO 为外部中断输入(如下降沿触发)。
    • MCU 通过 I2C 向 MPU6050 写入配置,使能“数据准备就绪中断”。
  3. 工作流程:
    • MPU6050 完成一次数据采样。
    • MPU6050 将其 /INT 引脚拉低 -> 触发 MCU 的外部中断。
    • MCU 执行外部中断服务程序。
      • 清除 EXTI 标志。
      • 作为 I2C 主设备:
        • 启动 I2C 传输。
        • 可选: I2C 模块自己的事件中断会触发,用于驱动主发送地址、读取数据字节等步骤)。
        • 通过 I2C 读取 MPU6050 的加速度/陀螺仪数据寄存器。
        • 通过 I2C 读取 MPU6050 的中断状态寄存器并清除 MPU6050 的内部中断标志。
    • 主程序或任务可以使用读取到的加速度计数据。

总结:

当你阅读文档或调试时,务必明确讨论的是哪种“中断”,这对于理解和解决问题至关重要。在主设备代码中,驱动 I2C 传输流程本身需要处理 I2C 中断;而要高效地响应从设备的特定状态变化,则需要配置并处理外部中断线。

I2C总线—电平转换

我们先来看一张图,熟悉I2C的人一看,这不是I2C的level shifter电路嘛,在Philip的I2C标准里面有,没有啥复杂的。

2023-11-02 12:32:20

i2c采样是上升沿吗?

i2c采样是上升沿吗?  I2C采样是指在I2C总线上对数据进行采样。在I2C

2023-09-19 17:16:05

I2CI3C关于功耗和传输速率的对比

传统 I2C 设备的静态寻址 I3C 总线支持传统 I2C 通讯 类似 I2C

2023-07-22 16:24:05

NCA9555带中断的16位I2C总线I/O端口英文手册

电子发烧友网站提供《NCA9555带中断的16位I2C总线I/O端口英文手册.pdf》资料免费下载

资料下载 小小蜉蝣星 2024-07-03 17:26:44

硬件I2C与模拟I2C

硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C

资料下载 佚名 2021-12-28 19:14:11

STM32作为I2C从机中断接收和从模式中断应答数据总结

之前在项目中用到了STM32F103的i2c功能,大致功能是两个单片机进行i2c通信,而且通信模式是主问从答模式。这里我研究了一下STM32F103硬件i2c

资料下载 远不及你 2021-12-02 19:21:32

ARM Cortex-M3 MCU 的 I2C DMA操作和中断资料下载

电子发烧友网为你提供ARM Cortex-M3 MCU 的 I2C DMA操作和中断资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助

资料下载 佚名 2021-04-25 08:42:58

如何将I2C从地址左移1位

  I2C总线读写中,新人会比较困惑,为什么I2C从地址要左移1位?这是i2c协议决定的,

资料下载 李霞 2019-08-05 17:34:00

I2CI3C的区别有哪些

I2C 和 I3C 主要区别如下: I2C 虽然也是两条线,但是很多时候传感器需要一条额外的

2023-07-22 16:20:20

I2C子系统SW Architecture

I2C SW Architecture 【driver 驱动层】由普通驱动工程师负责,【i2c 核心层】由 Linux 提供,【i2c 核心层】

2023-07-22 16:01:00

I2C debug出现问题怎么解决

RK 平台 I2C debug 1、I2C 通信失败,出现 log: “timeout, ipd: 0x00, state: 1” 请检查硬件上拉是否给电。

2023-07-22 15:00:27

I2C怎么使用

硬件I2C(中断方式)以STC8F2K08S2单片机为例一、I2C相关的

2021-12-02 08:16:27

I2C总线的基本通信总结

在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额

2021-08-26 14:08:36

I2C系列的合集,可以系统学习I2C协议

这篇文章给大家带来了I2C系列的合集,可以系统学习I2C协议。大家赶紧看看吧! 1、I2C总线:何时使用

2020-09-23 15:28:10

STM32F10x_硬件I2C主从通信 (轮询发送,中断接收)

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

2020-03-25 10:59:11

7天热门专题 换一换
相关标签