probe: revert pins to Hi-Z when PORT_OFF is called Alternative implementation of #146 Fixes #146
diff --git a/src/probe.c b/src/probe.c index bba6b31..ce79857 100644 --- a/src/probe.c +++ b/src/probe.c
@@ -171,7 +171,7 @@ pio_remove_program(pio0, &probe_program, probe.offset); probe_assert_reset(1); // de-assert nRESET - + probe_gpio_deinit(); probe.initted = 0; } }
diff --git a/src/probe.pio b/src/probe.pio index 79e4be8..5636c0c 100644 --- a/src/probe.pio +++ b/src/probe.pio
@@ -86,6 +86,19 @@ gpio_pull_up(PROBE_PIN_SWDIO); } +// DAP interface says all pins have to be High-Z when disabled +static inline void probe_gpio_deinit() +{ +#if defined(PROBE_PIN_RESET) + gpio_deinit(PROBE_PIN_RESET); + gpio_disable_pulls(PROBE_PIN_RESET); +#endif + gpio_deinit(PROBE_PIN_SWCLK); + gpio_disable_pulls(PROBE_PIN_SWCLK); + gpio_deinit(PROBE_PIN_SWDIO); + gpio_disable_pulls(PROBE_PIN_SWDIO); +} + static inline void probe_sm_init(pio_sm_config* sm_config) { // Set SWCLK as a sideset pin
diff --git a/src/probe_oen.pio b/src/probe_oen.pio index 2057705..e997340 100644 --- a/src/probe_oen.pio +++ b/src/probe_oen.pio
@@ -63,6 +63,21 @@ gpio_pull_up(PROBE_PIN_SWDIOEN); } +// DAP interface says all pins have to be High-Z when disabled +static inline void probe_gpio_deinit() +{ +#if defined(PROBE_PIN_RESET) + gpio_deinit(PROBE_PIN_RESET); + gpio_disable_pulls(PROBE_PIN_RESET); +#endif + gpio_deinit(PROBE_PIN_SWCLK); + gpio_disable_pulls(PROBE_PIN_SWCLK); +// Note for SWDIOEN - make sure the driver output enable is removed before removing drive - leave pull-up enabled + gpio_deinit(PROBE_PIN_SWDIOEN); + gpio_deinit(PROBE_PIN_SWDIO); + gpio_disable_pulls(PROBE_PIN_SWDIO); +} + static inline void probe_sm_init(pio_sm_config* sm_config) { // Set SWDIOEN and SWCLK as sideset pins