xtest.c (2360B)
1 // Copyright 2023, Brian Swetland <swetland@frotz.net> 2 // Licensed under the Apache License, Version 2.0. 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <unistd.h> 7 #include <string.h> 8 #include <stdarg.h> 9 10 #include "xdebug.h" 11 #include "transport.h" 12 #include "arm-debug.h" 13 #include "cmsis-dap-protocol.h" 14 15 void MSG(uint32_t flags, const char* fmt, ...) { 16 va_list ap; 17 va_start(ap, fmt); 18 vfprintf(stderr, fmt, ap); 19 va_end(ap); 20 } 21 22 void dump(uint32_t* w, int count) { 23 int n = 0; 24 while (count > 0) { 25 INFO(" %08x", *w++); 26 count--; 27 n++; 28 if (n == 4) { 29 INFO("\n"); 30 n = 0; 31 } 32 } 33 if (n) INFO("\n"); 34 } 35 36 int main(int argc, char **argv) { 37 uint32_t n = 0; 38 39 dctx_t* dc; 40 if (dc_create(&dc, 0, 0) < 0) { 41 return -1; 42 } 43 44 dc_set_clock(dc, 4000000); 45 46 dc_attach(dc, 0, 0, &n); 47 48 #if 1 49 // dump some info 50 dc_dp_rd(dc, DP_DPIDR, &n); 51 INFO("DP.DPIDR %08x\n", n); 52 dc_dp_rd(dc, DP_TARGETID, &n); 53 INFO("DP.TARGETID %08x\n", n); 54 dc_dp_rd(dc, DP_DLPIDR, &n); 55 INFO("DP.DLPIDR %08x\n", n); 56 dc_ap_rd(dc, MAP_IDR, &n); 57 INFO("MAP.IDR %08x\n", n); 58 dc_ap_rd(dc, MAP_CSW, &n); 59 INFO("MAP.CSW %08x\n", n); 60 dc_ap_rd(dc, MAP_CFG, &n); 61 INFO("MAP.CFG %08x\n", n); 62 dc_ap_rd(dc, MAP_CFG1, &n); 63 INFO("MAP.CFG1 %08x\n", n); 64 dc_ap_rd(dc, MAP_BASE, &n); 65 INFO("MAP.BASE %08x\n", n); 66 #endif 67 68 #if 0 69 dc_mem_rd32(dc, 0, &n); 70 INFO("%08x: %08x\n", 0, n); 71 72 dc_mem_rd32(dc, 0xc0000000, &n); 73 INFO("%08x: %08x\n", 0, n); 74 75 dc_mem_rd32(dc, 0, &n); 76 INFO("%08x: %08x\n", 0, n); 77 78 unsigned addr = 0x00000000; 79 for (unsigned a = addr; a < addr + 32; a += 4) { 80 dc_mem_rd32(dc, a, &n); 81 INFO("%08x: %08x\n", a, n); 82 } 83 #endif 84 85 #if 0 86 int r = dc_core_halt(dc); 87 INFO("halt ? %d\n", r); 88 r = dc_core_reg_rd(dc, 0, &n); 89 INFO("r0 %x ? %d\n", n, r); 90 r = dc_core_reg_wr(dc, 0, 0xe0a0b0c0); 91 INFO("wr ? %d\n", r); 92 r = dc_core_reg_rd(dc, 15, &n); 93 INFO("r15 %x ? %d\n", n, r); 94 r = dc_core_reg_rd(dc, 0, &n); 95 INFO("r0 %x ? %d\n", n, r); 96 r = dc_core_resume(dc); 97 INFO("resume ? %d\n", r); 98 r = dc_core_reg_rd(dc, 0, &n); 99 INFO("r0 %x ? %d\n", n, r); 100 r = dc_core_reg_rd(dc, 15, &n); 101 INFO("r15 %x ? %d\n", n, r); 102 #endif 103 104 #if 0 105 uint32_t w[1024]; 106 int r = dc_mem_rd_words(dc, 0x00000000, 1024, w); 107 if (r == 0) { 108 dump(w, 1024); 109 } 110 for (unsigned n = 0; n < 250; n++) { 111 uint32_t w[1024]; 112 dc_mem_rd_words(dc, 0x00000000, 1024, w); 113 } 114 #endif 115 return 0; 116 } 117