我正在尝试为 MicroPython 编写一个用户定义的模块,让我的 Raspberry Pico 使用它的 PIO 来处理基于Pimoroni实现的电机编码器。我正在编译这个实现作为 MicroPython 固件的扩展,我的目标是将它与我为 MicroPython 编写的其余代码集成。
Pimoroni 的实现有一个encoder.cpp
包含Encoder
类。我在调用该init()
方法时遇到问题,在为 PIO 设置中断处理程序时我的程序似乎冻结了,但我无法弄清楚为什么会发生这种情况。这是处理设置的部分:
enc_sm = pio_claim_unused_sm(enc_pio, true);
uint pio_idx = pio_get_index(enc_pio);
//Is this the first time using an encoder on this PIO?
if(pio_claimed_sms[pio_idx] == 0) {
//Add the program to the PIO memory and enable the appropriate interrupt
enc_offset = pio_add_program(enc_pio, &encoder_program);
encoder_program_init(enc_pio, enc_sm, enc_offset, pinA, pinB, freq_divider);
// sleep_ms(500);
hw_set_bits(&enc_pio->inte0, PIO_IRQ0_INTE_SM0_RXNEMPTY_BITS << enc_sm);
if(pio_idx == 0) {
// irq_set_enabled(PIO0_IRQ_0, false);
irq_set_exclusive_handler(PIO0_IRQ_0, pio0_interrupt_callback);
// irq_add_shared_handler(PIO0_IRQ_0, pio0_interrupt_callback, PICO_HIGHEST_IRQ_PRIORITY);
irq_set_enabled(PIO0_IRQ_0, true);
}
else {
// irq_set_enabled(PIO1_IRQ_0, false);
irq_set_exclusive_handler(PIO1_IRQ_0, pio1_interrupt_callback);
irq_set_enabled(PIO1_IRQ_0, true);
}
}
当我使用pico-sdk
. 仅在与 Micropython 集成时出现此错误。
我什至尝试了一个共享处理程序,但冻结仍然发生......
我不完全确定为什么会发生这种情况以及如何检测问题。