使用i2c和Python中断

时间:2014-11-13 00:16:47

标签: python c interrupt i2c

一些背景知识:

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

我可以根据需要读取每个开关的状态。

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

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

我正在考虑为此特定项目删除Python for C,但GUI界面已经编写(在Python中),所以我想将其作为最后一个选项。

非常感谢任何指导/意见/建议!

谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,WiringPiISR库只允许您将Pin配置为中断并定义其类型(即基于边缘或基于级别)。由于您正在谈论I2c中断,因此您无法获得I2C中断,因为在这种情况下,您的Rpi作为主设备而其他连接的设备作为从设备。由于在I2C中,通信始终由主站启动,因此从站不能中断您。 (至少不通过I2C通道)

希望它有所帮助。

答案 1 :(得分:0)

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

随附的 python 库将 Raspberry Pi GPIO 4 线配置为输入边沿触发中断并设置回调。发生变化时(例如旋转编码器旋转),中断线摆动,中断处理程序通过 I2C 读取状态寄存器并调用适当的回调。

因此,在 I2C 的上下文中,这完全是传统的中断用法,用于执行使主设备不必轮询总线的常规任务。

相关问题