0

我正在尝试为 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 集成时出现此错误。

我什至尝试了一个共享处理程序,但冻结仍然发生......

我不完全确定为什么会发生这种情况以及如何检测问题。

4

0 回答 0