Skip to content

Commit 2e0d8f1

Browse files
committed
Fix SWD, output couldn't be disabled in dedic_gpio
The SWDIO output was never disabled, and this caused all readings to be wrong. This seems related to ESP32-S2 and S3 SOC_DEDIC_GPIO_OUT_AUTO_ENABLE. I change to use dedic_gpio only for input, and then I drive the output the usual gpio_ll_set_level way. This makes openocd finally work for me; debugging an nrf52 target.
1 parent ef7661e commit 2e0d8f1

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

components/debug_probe/debug_gpio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void debug_probe_init_swd_pins(void)
106106
.gpio_array = bundle_io_gpios,
107107
.array_size = ARRAY_SIZE(bundle_io_gpios),
108108
.flags = {
109-
.out_en = 1,
109+
.out_en = 0, /* We will output without dedic_gpio, or we cannot disable output */
110110
.in_en = 1,
111111
},
112112
};

components/debug_probe/debug_gpio.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ void debug_probe_notify_activity(bool active);
103103

104104
__STATIC_FORCEINLINE void debug_probe_swdio_out_enable(void)
105105
{
106-
REG_WRITE(GPIO_FUNC0_OUT_SEL_CFG_REG + (GPIO_SWDIO * 4), dedic_gpio_conf);
107106
gpio_ll_output_enable(dedic_gpio_dev, GPIO_SWDIO);
108107
}
109108

110109
__STATIC_FORCEINLINE void debug_probe_swdio_out_disable(void)
111110
{
111+
REG_WRITE(GPIO_FUNC0_OUT_SEL_CFG_REG + (GPIO_SWDIO * 4), dedic_gpio_conf);
112112
gpio_ll_output_disable(dedic_gpio_dev, GPIO_SWDIO);
113113
}
114114

@@ -129,17 +129,17 @@ __STATIC_FORCEINLINE void debug_probe_swclk_clr(void)
129129

130130
__STATIC_FORCEINLINE void debug_probe_swdio_set(void)
131131
{
132-
dedic_gpio_cpu_ll_write_mask(GPIO_SWDIO_OUT_MASK, GPIO_SWDIO_OUT_MASK);
132+
gpio_ll_set_level(dedic_gpio_dev, GPIO_SWDIO, 1);
133133
}
134134

135135
__STATIC_FORCEINLINE void debug_probe_swdio_clr(void)
136136
{
137-
dedic_gpio_cpu_ll_write_mask(GPIO_SWDIO_OUT_MASK, 0);
137+
gpio_ll_set_level(dedic_gpio_dev, GPIO_SWDIO, 0);
138138
}
139139

140140
__STATIC_FORCEINLINE void debug_probe_swdio_write(int val)
141141
{
142-
dedic_gpio_cpu_ll_write_mask(GPIO_SWDIO_OUT_MASK, (val & 0x01) ? GPIO_SWDIO_OUT_MASK : 0);
142+
gpio_ll_set_level(dedic_gpio_dev, GPIO_SWDIO, (val & 0x1)?1:0);
143143
}
144144

145145
__STATIC_FORCEINLINE void debug_probe_swd_blink(int on)

0 commit comments

Comments
 (0)