• Phil Howard's avatar
    rp2/rp2_pio: Make PIO IRQ handlers have lazy initialisation. · ad3552ae
    Phil Howard authored
    This change has no impact on vanilla MicroPython builds, but is intended to
    avoid RP2's PIO implementation from trampling PIO usage in USER_C_MODULES.
    
    This is consistent with PIOs tracking of used state machines and managed
    programs, and makes working with PIO in USER_C_MODULES much less of an
    uphill battle.
    
    Since PIO deinit runs before gc_sweep_all it's impossible to work around
    this wrinkle otherwise.  A module finalizer does not get the opportunity to
    put the PIOs back into a state which wont crash rp2_pio_deinit.
    
    Changes are:
    - init: Avoid exclusive handlers being added to all PIOs and add them only
      when needed.
    - deinit: Only remove handlers we have set.
    - rp2_pio_irq: Add the exlusive handler if needed.
    - rp2_state_machine_irq: Add the exclusive handler if needed.
    Signed-off-by: default avatarPhil Howard <phil@gadgetoid.com>
    ad3552ae
rp2_pio.c 36.7 KB