aboutsummaryrefslogtreecommitdiff
path: root/src/adiv5.c
diff options
context:
space:
mode:
authorGareth McMullin2015-01-06 22:26:00 +1300
committerGareth McMullin2015-01-06 22:26:00 +1300
commit9c5ffd61f7d654418c76015f0073e4accbf9e004 (patch)
treef33ae3b2cb0e35ff2fb93deb9955970066ce1928 /src/adiv5.c
parentd162e75ceb92de346951b979cee5941bdd6ef651 (diff)
First cut at Freescale Kinetis support.
Diffstat (limited to 'src/adiv5.c')
-rw-r--r--src/adiv5.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/adiv5.c b/src/adiv5.c
index e7f45c9..6dcc919 100644
--- a/src/adiv5.c
+++ b/src/adiv5.c
@@ -414,6 +414,26 @@ void adiv5_ap_mem_write_halfword(ADIv5_AP_t *ap, uint32_t addr, uint16_t value)
adiv5_ap_write(ap, ADIV5_AP_DRW, v);
}
+uint8_t adiv5_ap_mem_read_byte(ADIv5_AP_t *ap, uint32_t addr)
+{
+ adiv5_ap_write(ap, ADIV5_AP_CSW, ap->csw |
+ ADIV5_AP_CSW_SIZE_BYTE | ADIV5_AP_CSW_ADDRINC_SINGLE);
+ adiv5_ap_write(ap, ADIV5_AP_TAR, addr);
+ uint32_t v = adiv5_ap_read(ap, ADIV5_AP_DRW);
+
+ return v >> ((addr & 3) * 8);
+}
+
+void adiv5_ap_mem_write_byte(ADIv5_AP_t *ap, uint32_t addr, uint8_t value)
+{
+ uint32_t v = value << ((addr & 3) * 8);
+
+ adiv5_ap_write(ap, ADIV5_AP_CSW, ap->csw |
+ ADIV5_AP_CSW_SIZE_BYTE | ADIV5_AP_CSW_ADDRINC_SINGLE);
+ adiv5_ap_write(ap, ADIV5_AP_TAR, addr);
+ adiv5_ap_write(ap, ADIV5_AP_DRW, v);
+}
+
void adiv5_ap_write(ADIv5_AP_t *ap, uint8_t addr, uint32_t value)
{
adiv5_dp_write(ap->dp, ADIV5_DP_SELECT,