From 39cbc17c783d3a9c22e857bcae2b33eb4c01e913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bengt=20Sj=C3=B6l=C3=A9n?= Date: Wed, 4 Feb 2026 17:03:31 +0100 Subject: [PATCH 1/2] Add PIO GPIO base selection addressing GPIO 32 and above --- include/board_example_config.h | 2 ++ src/probe.c | 3 +++ src/probe.pio | 10 +++++----- src/probe_config.h | 5 +++++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/board_example_config.h b/include/board_example_config.h index 0e0f13130..7d9e26e8b 100644 --- a/include/board_example_config.h +++ b/include/board_example_config.h @@ -45,6 +45,8 @@ #define PROBE_PIN_RESET 1 #define PROBE_SM 0 +/* Set PROBE_PIO_BASE base to 16 to use gpio 32 and above */ +#define PROBE_PIO_BASE 0 #define PROBE_PIN_OFFSET 12 /* PIO config for PROBE_IO_RAW */ #if defined(PROBE_IO_RAW) diff --git a/src/probe.c b/src/probe.c index dbe0ea85e..0aea29738 100644 --- a/src/probe.c +++ b/src/probe.c @@ -150,6 +150,9 @@ void probe_write_mode(void) { void probe_init() { if (!probe.initted) { + // MUST be early, before any SM config/init that uses pins + pio_set_gpio_base(pio0,PROBE_PIO_BASE); + probe_gpio_init(); uint offset = pio_add_program(pio0, &probe_program); probe.offset = offset; diff --git a/src/probe.pio b/src/probe.pio index 5636c0c6b..09a51a052 100644 --- a/src/probe.pio +++ b/src/probe.pio @@ -102,15 +102,15 @@ static inline void probe_gpio_deinit() static inline void probe_sm_init(pio_sm_config* sm_config) { // Set SWCLK as a sideset pin - sm_config_set_sideset_pins(sm_config, PROBE_PIN_SWCLK); + sm_config_set_sideset_pins(sm_config, PIO_PIN(PROBE_PIN_SWCLK)); // Set SWDIO offset - sm_config_set_out_pins(sm_config, PROBE_PIN_SWDIO, 1); - sm_config_set_set_pins(sm_config, PROBE_PIN_SWDIO, 1); + sm_config_set_out_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIO), 1); + sm_config_set_set_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIO), 1); #ifdef PROBE_IO_SWDI - sm_config_set_in_pins(sm_config, PROBE_PIN_SWDI); + sm_config_set_in_pins(sm_config, PIO_PIN(PROBE_PIN_SWDI)); #else - sm_config_set_in_pins(sm_config, PROBE_PIN_SWDIO); + sm_config_set_in_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIO)); #endif diff --git a/src/probe_config.h b/src/probe_config.h index 5c5e14909..1ef03219e 100644 --- a/src/probe_config.h +++ b/src/probe_config.h @@ -71,6 +71,11 @@ do { \ #include "board_debug_probe_config.h" #endif //#include "board_example_config.h" +#if !defined(PROBE_PIO_BASE) +#define PROBE_PIO_BASE 0 +#endif +#define PIO_PIN(gpio) ((gpio) - PROBE_PIO_BASE) + // Add the configuration to binary information void bi_decl_config(); From bb650a159deede370806b1f77f740b12bc7cbced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bengt=20Sj=C3=B6l=C3=A9n?= Date: Wed, 4 Feb 2026 17:51:45 +0100 Subject: [PATCH 2/2] adding PIO_PIN offsetting gpio base for probe_oen.pio too --- src/probe_oen.pio | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/probe_oen.pio b/src/probe_oen.pio index e9973403d..235539294 100644 --- a/src/probe_oen.pio +++ b/src/probe_oen.pio @@ -81,12 +81,13 @@ static inline void probe_gpio_deinit() static inline void probe_sm_init(pio_sm_config* sm_config) { // Set SWDIOEN and SWCLK as sideset pins - sm_config_set_sideset_pins(sm_config, PROBE_PIN_SWDIOEN); + sm_config_set_sideset_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIOEN)); // Set SWDIO offset - sm_config_set_out_pins(sm_config, PROBE_PIN_SWDIO, 1); - sm_config_set_set_pins(sm_config, PROBE_PIN_SWDIO, 1); - sm_config_set_in_pins(sm_config, PROBE_PIN_SWDI); + sm_config_set_out_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIO), 1); + sm_config_set_set_pins(sm_config, PIO_PIN(PROBE_PIN_SWDIO), 1); + + sm_config_set_in_pins(sm_config, PIO_PIN(PROBE_PIN_SWDI)); // Set SWDIOEN, SWD and SWDIO pins as output to start. This will be set in the sm pio_sm_set_consecutive_pindirs(pio0, PROBE_SM, PROBE_PIN_OFFSET, 3, true);