I2C中断
好的,我们来详细解释一下 I2C 中的中断。
在 I2C 通信中,“中断”通常指代两种相关但不同的概念,理解其差异对嵌入式开发很重要:
-
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):
- 在 I2C 和系统中断控制器中启用所需的中断源(例如 EVT (Event) 和 ERR (Error) 中断)。
- 在中断服务程序 (ISR) 中:
- 读取 I2C 状态寄存器 (SRx) 以确定触发中断的具体事件(哪个标志位被置位)。
- 根据具体事件执行操作(例如,清除状态标志、写入下一个数据到数据寄存器、从数据寄存器读取接收到的数据、处理错误)。
- 清除中断挂起标志。
-
从设备通过专用中断线通知主设备的中断 (External/Device-Specific Interrupt Line):
- 这是什么? 这是指某些具有中断功能的 I2C 从设备(例如传感器 MPU6050、EEPROM、RTC、GPIO 扩展芯片等)拥有的一条额外的物理引脚,通常标为
/INT、INTB、IRQ等。 - 如何工作的?
- 当该从设备内部发生特定事件时(例如,传感器有新的测量数据准备就绪、RTC 的闹钟触发、GPIO 输入状态改变),它会将
/INT引脚拉低(通常是低电平有效)。 - 这条
/INT引脚需要连接到主控制器 MCU 的某个通用输入/输出 (GPIO) 引脚,并将该 GPIO 引脚配置为外部中断 (EXTI) 输入。
- 当该从设备内部发生特定事件时(例如,传感器有新的测量数据准备就绪、RTC 的闹钟触发、GPIO 输入状态改变),它会将
- 用途: 这是一种高效的机制,允许从设备主动通知主设备,避免了主设备需要不断地轮询 (Polling) I2C 从设备去“询问”是否有新数据或事件发生的低效方式。主设备收到这个 GPIO 上的中断后,知道某个从设备有事情需要处理,可以开始通过 I2C 总线去读取数据或处理事件。
- 编程模型:
- 硬件连接:从设备的
/INT引脚连接到 MCU 的 GPIO 引脚 (配置为 EXTI)。 - 配置 MCU 的 EXTI 和 NVIC,使能该 GPIO 引脚上的中断(例如上升沿、下降沿或双边沿触发)。
- 在从设备中配置或启用其产生中断的条件(例如使能数据准备中断、运动检测中断、报警中断等,通过 I2C 写从设备的特定配置寄存器)。
- 在 MCU 为该 GPIO 引脚编写的外部中断服务程序 (ISR) 中:
- 处理 EXTI 标志位。
- 因为中断线可能是多个设备共享的(通常不好),需要判断是哪个设备产生了中断(或只有一个设备时直接处理)。
- 通过 I2C 总线(此时 MCU 作为 I2C 主设备)去访问产生中断的那个从设备。
- 从状态寄存器读取中断标志位以确认事件类型。
- 执行需要的操作(如读取新数据)。
- 清除从设备内部的中断标志位(通常通过读取状态寄存器或写特定值)。
- 硬件连接:从设备的
- 这是什么? 这是指某些具有中断功能的 I2C 从设备(例如传感器 MPU6050、EEPROM、RTC、GPIO 扩展芯片等)拥有的一条额外的物理引脚,通常标为
关键区别:
- 来源与目的:
- I2C 模块中断: 来源于 I2C 总线协议事件本身。用于告知 CPU I2C 通信流程中的关键节点(开始、地址、数据、停止、错误)。
- 外部中断线 (
/INT): 来源于从设备内部特定事件(与总线时序无关),仅用于通知“我有事需要处理”。
- 硬件连接:
- I2C 模块中断: MCU 内部信号,不需要额外引脚连接到 I2C 从设备(仅通过 SCL, SDA 通信)。
- 外部中断线 (
/INT): 需要从设备的专用/INT引脚连接到 MCU 的 GPIO/EXTI 引脚。
- 通信方向:
- I2C 模块中断: 通知后,后续操作通常是操作 I2C 模块自身(作为主控器访问从设备,或作为从设备响应主设备)。
- 外部中断线 (
/INT): 通知后,主控器(MCU)需要通过 I2C 总线主动去访问产生中断的那个从设备以获取信息或执行操作。
- 依赖性:
- I2C 模块中断: 是 I2C 通信能进行的基础机制之一,主模式驱动状态机尤其依赖。
- 外部中断线 (
/INT): 可选特性,仅特定设备拥有,用于提高系统响应效率(避免轮询)。没有这根线也能操作该设备,但需要轮询。
应用示例 (组合使用):
想象一个 I2C 加速度计传感器(如 MPU6050)连接到一个 MCU。
- 硬件:
- SCL/SDA 连接:用于 I2C 通信。
/INT连接:MPU6050 的/INT引脚连接到 MCU 的一个 GPIO/EXTI 引脚。
- 配置:
- MCU 初始化其 I2C 主模块(可能配置一些事件中断,但启动时不一定用)。
- MCU 初始化
/INT对应的 GPIO 为外部中断输入(如下降沿触发)。 - MCU 通过 I2C 向 MPU6050 写入配置,使能“数据准备就绪中断”。
- 工作流程:
- MPU6050 完成一次数据采样。
- MPU6050 将其
/INT引脚拉低 -> 触发 MCU 的外部中断。 - MCU 执行外部中断服务程序。
- 清除 EXTI 标志。
- 作为 I2C 主设备:
- 启动 I2C 传输。
- (可选: I2C 模块自己的事件中断会触发,用于驱动主发送地址、读取数据字节等步骤)。
- 通过 I2C 读取 MPU6050 的加速度/陀螺仪数据寄存器。
- 通过 I2C 读取 MPU6050 的中断状态寄存器并清除 MPU6050 的内部中断标志。
- 主程序或任务可以使用读取到的加速度计数据。
总结:
- I2C(外设)中断 是针对 I2C 总线协议本身操作的中断机制,由总线事件触发。
- 外部中断线 (
/INT) 是一种由从设备主动通知主控器的硬件机制,它依赖 I2C 通信(通知后需要主设备通过 I2C 去操作),但它并不属于 I2C 协议规范的一部分,而是一个常用的设备增强特性。
当你阅读文档或调试时,务必明确讨论的是哪种“中断”,这对于理解和解决问题至关重要。在主设备代码中,驱动 I2C 传输流程本身需要处理 I2C 中断;而要高效地响应从设备的特定状态变化,则需要配置并处理外部中断线。
NCA9555带中断的16位I2C总线I/O端口英文手册
电子发烧友网站提供《NCA9555带中断的16位I2C总线I/O端口英文手册.pdf》资料免费下载
资料下载
小小蜉蝣星
2024-07-03 17:26:44
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子系统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大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额
2021-08-26 14:08:36
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览