From 88e44d1c12425bd5443b4a93397d327adf10ee09 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Sun, 24 Oct 2021 01:14:46 +0200 Subject: [PATCH] cmsis: use exception in wait_word(). --- src/platforms/hosted/dap.c | 8 +++++--- src/target/adiv5.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/platforms/hosted/dap.c b/src/platforms/hosted/dap.c index e3d53e0c..196ed7c6 100644 --- a/src/platforms/hosted/dap.c +++ b/src/platforms/hosted/dap.c @@ -32,6 +32,7 @@ /*- Includes ----------------------------------------------------------------*/ #include +#include "exception.h" #include "dap.h" #include "jtag_scan.h" @@ -329,12 +330,13 @@ static uint32_t wait_word(uint8_t *buf, int size, int len, uint8_t *dp_fault) break; } while (buf[1] == DAP_TRANSFER_WAIT); - if (buf[1] > DAP_TRANSFER_WAIT) { - DEBUG_WARN("dap wait_word reg %x fault %x\n", - cmd_copy[3], buf[1]); + if(buf[1] == SWDP_ACK_FAULT) { *dp_fault = 1; return 0; } + + if(buf[1] != SWDP_ACK_OK) + raise_exception(EXCEPTION_ERROR, "SWDP invalid ACK"); uint32_t res = ((uint32_t)buf[5] << 24) | ((uint32_t)buf[4] << 16) | ((uint32_t)buf[3] << 8) | (uint32_t)buf[2]; diff --git a/src/target/adiv5.h b/src/target/adiv5.h index 63abecf4..95c62f62 100644 --- a/src/target/adiv5.h +++ b/src/target/adiv5.h @@ -170,7 +170,7 @@ typedef struct ADIv5_DP_s { void (*seq_out_parity)(uint32_t MS, int ticks); uint32_t (*seq_in)(int ticks); bool (*seq_in_parity)(uint32_t *ret, int ticks); - /* dp_low_write returns true if no OK resonse. */ + /* dp_low_write returns true if no OK resonse, but ignores errors */ bool (*dp_low_write)(struct ADIv5_DP_s *dp, uint16_t addr, const uint32_t data); uint32_t (*dp_read)(struct ADIv5_DP_s *dp, uint16_t addr);