类 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)

现在每次在 X1 引脚上看到下降沿时,都会调用回调。注意:机械按钮具有“弹跳”功能,按下或松开开关通常会产生多个边沿。请参阅:http://www.eng.utah.edu/~cs5780/debouncing.pdf了解详细说明以及各种去抖动技术。

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

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

所有其他 pin 对象都通过 pin mapper 来产生一个 gpio pin。

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_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

在上升沿或下降沿中断