Skip to content

Commit

Permalink
common/swdptap: Corrected the handling of when target_clk_divider is …
Browse files Browse the repository at this point in the history
…UINT32_MAX
  • Loading branch information
dragonmux committed Jul 20, 2023
1 parent 6532ac5 commit 62f5bb6
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/platforms/common/swdptap.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ static void swdptap_turnaround(const swdio_status_t dir)
SWDIO_MODE_FLOAT();
} else {
gpio_clear(SWCLK_PORT, SWCLK_PIN);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;
}

gpio_set(SWCLK_PORT, SWCLK_PIN);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;

if (dir == SWDIO_STATUS_DRIVE) {
Expand Down Expand Up @@ -127,14 +127,14 @@ static uint32_t swdptap_seq_in(size_t clock_cycles)
static bool swdptap_seq_in_parity(uint32_t *ret, size_t clock_cycles)
{
const uint32_t result = swdptap_seq_in(clock_cycles);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;

size_t parity = __builtin_popcount(result);
parity += gpio_get(SWDIO_IN_PORT, SWDIO_IN_PIN) ? 1U : 0U;

gpio_set(SWCLK_PORT, SWCLK_PIN);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;

*ret = result;
Expand Down Expand Up @@ -185,10 +185,10 @@ static void swdptap_seq_out_parity(const uint32_t tms_states, const size_t clock
int parity = __builtin_popcount(tms_states);
swdptap_seq_out(tms_states, clock_cycles);
gpio_set_val(SWDIO_PORT, SWDIO_PIN, parity & 1U);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;
gpio_set(SWCLK_PORT, SWCLK_PIN);
for (volatile uint32_t counter = target_clk_divider; counter > 0; --counter)
for (volatile uint32_t counter = target_clk_divider + 1; counter > 0; --counter)
continue;
gpio_clear(SWCLK_PORT, SWCLK_PIN);
}

0 comments on commit 62f5bb6

Please sign in to comment.