aboutsummaryrefslogtreecommitdiff
path: root/src/adiv5_swdp.c
diff options
context:
space:
mode:
authorGareth McMullin2015-03-14 18:03:04 -0700
committerGareth McMullin2015-03-14 18:03:04 -0700
commit2e785e56fa4e77549878eac88f2c4891af043e64 (patch)
tree3edffa5f46f577d440f8a10fe989db1bd2537a6b /src/adiv5_swdp.c
parent6f5b1873d7b986fe7b3bc1f267bae9f7649630a5 (diff)
adiv5: Encode APnDP into register definition.
Clean up magic numbers in adiv5 calls. Removed old adiv5_dp_write_ap and adiv5_dp_read_ap.
Diffstat (limited to 'src/adiv5_swdp.c')
-rw-r--r--src/adiv5_swdp.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/adiv5_swdp.c b/src/adiv5_swdp.c
index 9df362f..3e775cc 100644
--- a/src/adiv5_swdp.c
+++ b/src/adiv5_swdp.c
@@ -33,13 +33,13 @@
#define SWDP_ACK_WAIT 0x02
#define SWDP_ACK_FAULT 0x04
-static void adiv5_swdp_write(ADIv5_DP_t *dp, uint8_t addr, uint32_t value);
-static uint32_t adiv5_swdp_read(ADIv5_DP_t *dp, uint8_t addr);
+static void adiv5_swdp_write(ADIv5_DP_t *dp, uint16_t addr, uint32_t value);
+static uint32_t adiv5_swdp_read(ADIv5_DP_t *dp, uint16_t addr);
static uint32_t adiv5_swdp_error(ADIv5_DP_t *dp);
-static uint32_t adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t APnDP, uint8_t RnW,
- uint8_t addr, uint32_t value);
+static uint32_t adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t RnW,
+ uint16_t addr, uint32_t value);
int adiv5_swdp_scan(void)
@@ -78,14 +78,20 @@ int adiv5_swdp_scan(void)
return target_list?1:0;
}
-static void adiv5_swdp_write(ADIv5_DP_t *dp, uint8_t addr, uint32_t value)
+static void adiv5_swdp_write(ADIv5_DP_t *dp, uint16_t addr, uint32_t value)
{
- adiv5_swdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_WRITE, addr, value);
+ adiv5_swdp_low_access(dp, ADIV5_LOW_WRITE, addr, value);
}
-static uint32_t adiv5_swdp_read(ADIv5_DP_t *dp, uint8_t addr)
+static uint32_t adiv5_swdp_read(ADIv5_DP_t *dp, uint16_t addr)
{
- return adiv5_swdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_READ, addr, 0);
+ if (addr & ADIV5_APnDP) {
+ adiv5_dp_low_access(dp, ADIV5_LOW_READ, addr, 0);
+ return adiv5_dp_low_access(dp, ADIV5_LOW_READ,
+ ADIV5_DP_RDBUFF, 0);
+ } else {
+ return adiv5_swdp_low_access(dp, ADIV5_LOW_READ, addr, 0);
+ }
}
static uint32_t adiv5_swdp_error(ADIv5_DP_t *dp)
@@ -111,9 +117,11 @@ static uint32_t adiv5_swdp_error(ADIv5_DP_t *dp)
return err;
}
-static uint32_t adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t APnDP, uint8_t RnW,
- uint8_t addr, uint32_t value)
+static uint32_t adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t RnW,
+ uint16_t addr, uint32_t value)
{
+ bool APnDP = addr & ADIV5_APnDP;
+ addr &= 0xff;
uint8_t request = 0x81;
uint32_t response;
uint8_t ack;