# HG changeset patch # User Daniel O'Connor # Date 1740380240 -37800 # Node ID 2839552738846d1edc22642bd8caea8c0381f560 # Parent e9d12b36cfcc2f71a0049b98170e1424329390cd Add trigger PIO file diff -r e9d12b36cfcc -r 283955273884 trigger.pio --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trigger.pio Mon Feb 24 17:27:20 2025 +1030 @@ -0,0 +1,34 @@ +; +; Copyright (c) 2025 Daniel O'Connor +; + +.program trigger +.define TRIGGER_IRQ 0 + +.wrap_target +; Wait for trigger to be low + wait 0 pin 0 +; Wait for rising edge + wait 1 pin 0 +; Signal other state machine + irq nowait TRIGGER_IRQ +.wrap + +% c-sdk { +static inline void trigger_program_init(PIO pio, uint sm, uint offset, uint pin, uint clkdiv) { + pio_sm_config c = trigger_program_get_default_config(offset); + + // Configure SM input pin mapping to point to trigger pin + sm_config_set_in_pins(&c, pin); + // Set to input + pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false); + // Connect this GPIO to this PIO block + pio_gpio_init(pio, pin); + + sm_config_set_clkdiv(&c, clkdiv); + + // Load our configuration, and start the program from the beginning + pio_sm_init(pio, sm, offset, &c); + pio_sm_set_enabled(pio, sm, true); +} +%}