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¶
上升沿和下降沿中断