From 7e3fe352ad4aed89522d808d76dbe868a470412e Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 23 Jan 2018 20:27:43 +0100 Subject: [PATCH] adiv5_swdp.c: Use swdptap_seq_out for initialiation sequence. --- src/platforms/common/swdptap.c | 7 +++++-- src/target/adiv5_swdp.c | 10 +++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/platforms/common/swdptap.c b/src/platforms/common/swdptap.c index 321ce5b2..9a0d89c9 100644 --- a/src/platforms/common/swdptap.c +++ b/src/platforms/common/swdptap.c @@ -134,6 +134,7 @@ void swdptap_bit_out(bool val) swdptap_turnaround(0); gpio_set_val(SWDIO_PORT, SWDIO_PIN, val); + gpio_clear(SWCLK_PORT, SWCLK_PIN); gpio_set(SWCLK_PORT, SWCLK_PIN); gpio_set(SWCLK_PORT, SWCLK_PIN); gpio_clear(SWCLK_PORT, SWCLK_PIN); @@ -149,9 +150,10 @@ swdptap_seq_out(uint32_t MS, int ticks) swdptap_turnaround(0); while (ticks--) { gpio_set_val(SWDIO_PORT, SWDIO_PIN, data); - gpio_set(SWCLK_PORT, SWCLK_PIN); MS >>= 1; data = MS & 1; + gpio_set(SWCLK_PORT, SWCLK_PIN); + gpio_set(SWCLK_PORT, SWCLK_PIN); gpio_clear(SWCLK_PORT, SWCLK_PIN); } } @@ -169,13 +171,14 @@ swdptap_seq_out_parity(uint32_t MS, int ticks) while (ticks--) { gpio_set_val(SWDIO_PORT, SWDIO_PIN, data); - gpio_set(SWCLK_PORT, SWCLK_PIN); parity ^= MS; MS >>= 1; + gpio_set(SWCLK_PORT, SWCLK_PIN); data = MS & 1; gpio_clear(SWCLK_PORT, SWCLK_PIN); } gpio_set_val(SWDIO_PORT, SWDIO_PIN, parity & 1); + gpio_clear(SWCLK_PORT, SWCLK_PIN); gpio_set(SWCLK_PORT, SWCLK_PIN); gpio_set(SWCLK_PORT, SWCLK_PIN); gpio_clear(SWCLK_PORT, SWCLK_PIN); diff --git a/src/target/adiv5_swdp.c b/src/target/adiv5_swdp.c index 6dfdfd4d..dd036549 100644 --- a/src/target/adiv5_swdp.c +++ b/src/target/adiv5_swdp.c @@ -53,12 +53,12 @@ int adiv5_swdp_scan(void) return -1; /* Switch from JTAG to SWD mode */ - swdptap_seq_out(0xFFFF, 16); - for(int i = 0; i < 50; i++) - swdptap_bit_out(1); + swdptap_seq_out(0xFFFFFFFF, 16); + swdptap_seq_out(0xFFFFFFFF, 32); + swdptap_seq_out(0xFFFFFFFF, 18); swdptap_seq_out(0xE79E, 16); /* 0b0111100111100111 */ - for(int i = 0; i < 50; i++) - swdptap_bit_out(1); + swdptap_seq_out(0xFFFFFFFF, 32); + swdptap_seq_out(0xFFFFFFFF, 18); swdptap_seq_out(0, 16); /* Read the SW-DP IDCODE register to syncronise */