C语言 使用 i2c 和 Python 的中断



一些背景:

我有一个 i2c 设备 (MCP23017),它有 6 个交换机连接到其 GPIO 端口。MCP23017通过i2c连接到Raspberry Pi。

我能够根据需要读取每个开关的状态。

我的问题是关于中断。我正在使用 Python 的 WiringPi2 库,它允许我与 Python 下的MCP23017进行交互。根据我所做的研究,WiringPiISR 库允许运行 i2c 中断协议,尽管它似乎只能在 C 下(正常工作)工作。

我的问题是:在 Python 下实现 i2c 中断有没有一个简单的解决方案?

我正在考虑为这个特定的项目放弃 Python for C,但 GUI 界面已经编写好了(用 Python 编写),所以我想将其作为最后的选择。

任何指导/输入/评论将不胜感激!

谢谢!

据我了解,WiringPiISR 库只允许您将引脚配置为中断并定义其类型(即基于边缘或基于电平)。由于您谈论的是 I2C 中断,因此您不可能像在这种情况下那样拥有 I2C 中断,您的 Rpi 用作主设备,其他连接的设备用作从设备。由于在I2C中,通信始终由主站发起,因此从机无法打断您。(至少不是通过I2C通道)

希望对您有所帮助。

除了 I2C 线路外,还有一些设备还有中断线。例如,我有一个来自 duppa.net 的旋转编码器 I2C 接口板,它有 5 个引脚 - SDA、SCL、+ 和中断。

它附带的python库将Raspberry Pi GPIO 4行配置为输入边沿触发的中断并设置回调。在更改时(例如旋转编码器旋转),中断线摆动,中断处理程序通过I2C读取状态寄存器并调用相应的回调。

因此,这是I2C环境中完全传统的中断用法,通常的任务是将主机从轮询总线中解放出来。