嵌套 UART 引脚更改中断

问题描述 投票:0回答:1

我正在尝试在加载了 Adafruit Feather MicroPython 1.2 的基于 RP2040 的自定义板上用 MicroPython 实现 UART 中断。虽然我知道此功能通常适用于 WiPy 设备,但它对于我的自定义板至关重要。

我无法进行硬件更改,因此我在引脚 4 (TXD) 和 5 (RXD) 上初始化了 UART,并在 RXD 上分配了引脚更改中断。我的代码:

import _thread
from machine import Pin, UART, I2C, mem32, Timer
from micropython import schedule
import micropython

# ... Other code ...

Serial = UART(1, baudrate=115200, tx=txPin, rx=rxPin)
rxTrig = False

def onSerial(p):
    global rxTrig
    if Serial.any():
        rxTrig = True

# ... Other code ...

def main():
    global rxTrig

    rxPin.irq(handler=onSerial, trigger=Pin.IRQ_RISING, hard=True)
RXD 上的每个上升沿都会调用

onSerial
,如果数据可用,则会将
rxTrig
设置为 True,这在 Core 1 上运行的连续 while 循环中使用。这可以无缝工作。

我实现了两个嵌套计时器,由于 Core 1 上的无限循环,它们被卡住了。我怀疑计时器正在 Core 1 上执行,导致了这种情况。因此,我不再使用变量

rxTrig
和 while 循环,而是通过修改
onSerial(p)
代码来使用另一个引脚更改中断:

cmdPin = Pin(0, Pin.OUT)

# ... Other code ...

def onSerial(p):
    global rxTrig
    if Serial.any():
        cmdPin.on()

# ... Other code ...

def onCommand():
    # Consume the command and execute the actions
    cmdPin.off()

def main():
    cmdPin.irq(handler=onCommand, trigger=Pin.IRQ_RISING, hard=True)

cmdPin
按预期更改了其输出,但中断未触发。如何正确实施?

interrupt uart micropython rp2040
1个回答
0
投票

不知怎的,

cmdPin = Pin(0, Pin.OUT)
没有正确执行。一旦我重新启动 Thonny,它就开始工作,现在我在自定义 RP2040 板上成功地拥有带有中断的 UART。

mdPin = Pin(0, Pin.OUT)

# ... Other code ...

def onSerial(p):
    global rxTrig
    if Serial.any():
        cmdPin.on()

# ... Other code ...

def onCommand():
    # Consume the command and execute the actions
    cmdPin.off()

def main():
    cmdPin.irq(handler=onCommand, trigger=Pin.IRQ_RISING, hard=True)

这是正确的代码。

© www.soinside.com 2019 - 2024. All rights reserved.