class ExtInt – 配置 I/O 引脚以在外部事件上触发中断

总共有22条中断线路。其中16条可以来自 GPIO引脚,剩下6条来自内部源。

对于 0 到 15 号线,给定的线路可以映射到任意端口的相应线路。因此,线路 0 可以映射到 Px0,其中 x 是 A、B、C,…,而线路 1 可以映射到 Px1,其中 x 是 A、B、C,…

def callback(line):
    print("line =", line)

注意:ExtInt 将自动将 gpio 引线配置为输入。:

extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)

现在,每当在引脚上看到下降沿时,将调用回调函数。注意:机械按键存在“抖动”,按下或释放开关通常会生成多个边缘。参见:http://www.eng.utah.edu/~cs5780/debouncing.pdf,其中详细说明了去抖动的各种技术。

尝试在用一个引脚上注册2个回调将引发异常。

如果将引脚传递为整数,则假定它映射到内部中断源之一,并且必须在16到22范围内。

所以其他引脚对象都通过引脚映射器来获取其中一个GPIO引脚。:

extint = pyb.ExtInt(pin, mode, pull, callback)

有效的模式为 pyb.ExtInt.IRQ_RISING、pyb.ExtInt.IRQ_FALLING、pyb.ExtInt.IRQ_RISING_FALLING、pyb.ExtInt.EVT_RISING、pyb.ExtInt.EVT_FALLING 和 pyb.ExtInt.EVT_RISING_FALLING。

只测试了 IRQ_xxx 模式。EVT_xxx 模式与睡眠模式和 WFE 指令有关。

有效的拉电阻值为 pyb.Pin.PULL_UP、pyb.Pin.PULL_DOWN、pyb.Pin.PULL_NONE。

还有一个 C API,因此需要 EXTI 中断线路的驱动程序也可以使用此代码。请参阅 extint.h 以获取可用函数和 usrsw.h 以获取使用示例。

构造函数

class pyb.ExtInt(pin, mode, pull, callback)

创建一个 ExtInt 对象:

  • pin 是要启用中断的引脚(可以是引脚对象或任何有效的引脚名称)。

  • mode 可以是以下之一:- ExtInt.IRQ_RISING - 在上升沿触发;- ExtInt.IRQ_FALLING - 在下降沿触发;- ExtInt.IRQ_RISING_FALLING - 在上升沿或下降沿触发。

  • pull 可以是以下之一:- pyb.Pin.PULL_NONE - 无拉电阻;- pyb.Pin.PULL_UP - 启用上拉电阻;- pyb.Pin.PULL_DOWN - 启用下拉电阻。

  • callback 是触发中断时要调用的函数。回调函数必须接受恰好 1 个参数,即触发中断的线路。

类方法

classmethod ExtInt.regs()

转储 EXTI 寄存器的值。

方法

ExtInt.disable()

禁用与 ExtInt 对象关联的中断。这对去抖动可能很有用。

ExtInt.enable()

启用已禁用的中断。

ExtInt.line()

返回引脚映射到的线路号。

ExtInt.swint()

通过软件触发回调。

常量

ExtInt.IRQ_FALLING

下降沿中断

ExtInt.IRQ_RISING

上升沿中断

ExtInt.IRQ_RISING_FALLING

上升沿和下降沿中断