semihost server example program
Dependencies: SWD mbed USBLocalFileSystem BaseDAP USBDAP
LPCXpresso LPC11U68 | LPCXpresso LPC1549 | FRDM-KL46Z | EA LPC4088 QSB app-board | LPC1768 app-board | LPC810 | LPC1114FN28 | |
---|---|---|---|---|---|---|---|
server | server | server | server | server | client | client | |
SWDIO | D12 | D12 | D12 | p25 | p21 | p4(P0_2) | p12 |
SWCLK | D10 | D10 | D10 | p26 | p22 | p3(P0_3) | p3 |
nRESET *option | D6 | D6 | D6 | p34 | p30 | p1(P0_5) | p23 |
GND | GND | GND | GND | p1 | p1 | p7 | p22 |
3.3V | P3V3 | P3V3 | P3V3 | p44 | p40 | p6 | p21 |
flash write | SW2(P0_1) | SW3(P1_9) | SW1 | p14 joystick center | p14 joystick center |
client example:
Import programlpc810-semihost_helloworld
semihost client example program
tests/test1_SWD.cpp@18:5ed1759e863b, 2014-06-22 (annotated)
- Committer:
- va009039
- Date:
- Sun Jun 22 12:04:16 2014 +0000
- Revision:
- 18:5ed1759e863b
- Parent:
- 5:2774358f5e4f
add LPC11U68 interface.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 5:2774358f5e4f | 1 | // test1_SWD.cpp 2013/9/14 |
va009039 | 5:2774358f5e4f | 2 | #if 0 |
va009039 | 5:2774358f5e4f | 3 | #include "SWD.h" |
va009039 | 5:2774358f5e4f | 4 | #include "mytest.h" |
va009039 | 5:2774358f5e4f | 5 | |
va009039 | 5:2774358f5e4f | 6 | Serial pc(USBTX, USBRX); |
va009039 | 5:2774358f5e4f | 7 | #ifdef TARGET_LPC1768 |
va009039 | 5:2774358f5e4f | 8 | SWD swd(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) |
va009039 | 5:2774358f5e4f | 9 | #endif |
va009039 | 5:2774358f5e4f | 10 | #ifdef TARGET_KL25Z |
va009039 | 5:2774358f5e4f | 11 | SWD swd(PTB8,PTB9,PTB10); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) |
va009039 | 5:2774358f5e4f | 12 | #endif |
va009039 | 5:2774358f5e4f | 13 | |
va009039 | 5:2774358f5e4f | 14 | |
va009039 | 5:2774358f5e4f | 15 | TEST(SWD1,setup) { |
va009039 | 5:2774358f5e4f | 16 | swd.Setup(); |
va009039 | 5:2774358f5e4f | 17 | } |
va009039 | 5:2774358f5e4f | 18 | |
va009039 | 5:2774358f5e4f | 19 | TEST(SWD1,JTAG2SWD) { |
va009039 | 5:2774358f5e4f | 20 | const uint8_t data1[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff}; |
va009039 | 5:2774358f5e4f | 21 | const uint8_t data2[] = {0x9e,0xe7}; |
va009039 | 5:2774358f5e4f | 22 | const uint8_t data3[] = {0x00}; |
va009039 | 5:2774358f5e4f | 23 | swd.SWJSequence(sizeof(data1)*8, data1); |
va009039 | 5:2774358f5e4f | 24 | swd.SWJSequence(sizeof(data2)*8, data2); |
va009039 | 5:2774358f5e4f | 25 | swd.SWJSequence(sizeof(data1)*8, data1); |
va009039 | 5:2774358f5e4f | 26 | swd.SWJSequence(sizeof(data3)*8, data3); |
va009039 | 5:2774358f5e4f | 27 | } |
va009039 | 5:2774358f5e4f | 28 | |
va009039 | 5:2774358f5e4f | 29 | TEST(SWD1,idcode) { |
va009039 | 5:2774358f5e4f | 30 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 31 | uint8_t ack = swd.Transfer(DP_IDCODE, &data); |
va009039 | 5:2774358f5e4f | 32 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 33 | ASSERT_TRUE(data == 0x0bb11477); |
va009039 | 5:2774358f5e4f | 34 | } |
va009039 | 5:2774358f5e4f | 35 | |
va009039 | 5:2774358f5e4f | 36 | TEST(SWD1,abort1) { |
va009039 | 5:2774358f5e4f | 37 | uint32_t data = 0x1e; |
va009039 | 5:2774358f5e4f | 38 | uint8_t ack = swd.Transfer(DP_ABORT, &data); |
va009039 | 5:2774358f5e4f | 39 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 40 | } |
va009039 | 5:2774358f5e4f | 41 | |
va009039 | 5:2774358f5e4f | 42 | TEST(SWD1,select) { |
va009039 | 5:2774358f5e4f | 43 | uint32_t data = 0x0; |
va009039 | 5:2774358f5e4f | 44 | uint8_t ack = swd.Transfer(DP_SELECT, &data); |
va009039 | 5:2774358f5e4f | 45 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 46 | |
va009039 | 5:2774358f5e4f | 47 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 48 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 49 | DBG("DP_RDBUFF: %08x\n", data); |
va009039 | 5:2774358f5e4f | 50 | } |
va009039 | 5:2774358f5e4f | 51 | |
va009039 | 5:2774358f5e4f | 52 | TEST(SWD1,ctrl_stat) { |
va009039 | 5:2774358f5e4f | 53 | uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ; |
va009039 | 5:2774358f5e4f | 54 | ASSERT_TRUE(data == 0x50000000); |
va009039 | 5:2774358f5e4f | 55 | uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); |
va009039 | 5:2774358f5e4f | 56 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 57 | |
va009039 | 5:2774358f5e4f | 58 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 59 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 60 | DBG("DP_RDBUFF: %08x\n", data); |
va009039 | 5:2774358f5e4f | 61 | |
va009039 | 5:2774358f5e4f | 62 | ack = swd.Transfer(DP_CTRL_STAT_R, &data); |
va009039 | 5:2774358f5e4f | 63 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 64 | DBG("%08x\n", data); |
va009039 | 5:2774358f5e4f | 65 | ASSERT_TRUE(data == 0xf0000040); |
va009039 | 5:2774358f5e4f | 66 | } |
va009039 | 5:2774358f5e4f | 67 | |
va009039 | 5:2774358f5e4f | 68 | TEST(SWD1,abort2) { |
va009039 | 5:2774358f5e4f | 69 | uint32_t data = 0x1e; |
va009039 | 5:2774358f5e4f | 70 | uint8_t ack = swd.Transfer(DP_ABORT, &data); |
va009039 | 5:2774358f5e4f | 71 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 72 | } |
va009039 | 5:2774358f5e4f | 73 | |
va009039 | 5:2774358f5e4f | 74 | TEST(SWD1,ctrl_stat1) { |
va009039 | 5:2774358f5e4f | 75 | //uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | TRNNORMAL; |
va009039 | 5:2774358f5e4f | 76 | uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | 0x04000000; |
va009039 | 5:2774358f5e4f | 77 | ASSERT_TRUE(data == 0x54000000); |
va009039 | 5:2774358f5e4f | 78 | uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); |
va009039 | 5:2774358f5e4f | 79 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 80 | |
va009039 | 5:2774358f5e4f | 81 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 82 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 83 | DBG("DP_RDBUFF: %08x\n", data); |
va009039 | 5:2774358f5e4f | 84 | } |
va009039 | 5:2774358f5e4f | 85 | |
va009039 | 5:2774358f5e4f | 86 | TEST(SWD1,ctrl_stat2) { |
va009039 | 5:2774358f5e4f | 87 | uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | MASKLANE; |
va009039 | 5:2774358f5e4f | 88 | ASSERT_TRUE(data == 0x50000f00); |
va009039 | 5:2774358f5e4f | 89 | uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); |
va009039 | 5:2774358f5e4f | 90 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 91 | |
va009039 | 5:2774358f5e4f | 92 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 93 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 94 | DBG("DP_RDBUFF: %08x\n", data); |
va009039 | 5:2774358f5e4f | 95 | } |
va009039 | 5:2774358f5e4f | 96 | |
va009039 | 5:2774358f5e4f | 97 | TEST(SWD1,csw) { |
va009039 | 5:2774358f5e4f | 98 | uint32_t data = CSW_VALUE|CSW_SIZE32; |
va009039 | 5:2774358f5e4f | 99 | ASSERT_TRUE(data == 0x23000052); |
va009039 | 5:2774358f5e4f | 100 | uint8_t ack = swd.Transfer(AP_CSW, &data); |
va009039 | 5:2774358f5e4f | 101 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 102 | |
va009039 | 5:2774358f5e4f | 103 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 104 | DBG("ack=%02x\n", ack); |
va009039 | 5:2774358f5e4f | 105 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 106 | DBG("DP_RDBUFF: %08x\n", data); |
va009039 | 5:2774358f5e4f | 107 | } |
va009039 | 5:2774358f5e4f | 108 | |
va009039 | 5:2774358f5e4f | 109 | TEST(SWD1,tar) { |
va009039 | 5:2774358f5e4f | 110 | //uint32_t addr = 0x10000000; |
va009039 | 5:2774358f5e4f | 111 | uint32_t addr = 0x00000000; |
va009039 | 5:2774358f5e4f | 112 | uint8_t ack = swd.Transfer(AP_TAR, &addr); |
va009039 | 5:2774358f5e4f | 113 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 114 | |
va009039 | 5:2774358f5e4f | 115 | ack = swd.Transfer(DP_RDBUFF, NULL); |
va009039 | 5:2774358f5e4f | 116 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 117 | } |
va009039 | 5:2774358f5e4f | 118 | |
va009039 | 5:2774358f5e4f | 119 | TEST(SWD1,drw) { |
va009039 | 5:2774358f5e4f | 120 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 121 | uint8_t ack = swd.Transfer(AP_DRW_R, &data); |
va009039 | 5:2774358f5e4f | 122 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 123 | DBG("data=%08x\n", data); |
va009039 | 5:2774358f5e4f | 124 | |
va009039 | 5:2774358f5e4f | 125 | ack = swd.Transfer(AP_DRW_R, &data); |
va009039 | 5:2774358f5e4f | 126 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 127 | DBG("data=%08x\n", data); |
va009039 | 5:2774358f5e4f | 128 | |
va009039 | 5:2774358f5e4f | 129 | ack = swd.Transfer(AP_DRW_R, &data); |
va009039 | 5:2774358f5e4f | 130 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 131 | DBG("data=%08x\n", data); |
va009039 | 5:2774358f5e4f | 132 | |
va009039 | 5:2774358f5e4f | 133 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 134 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 135 | DBG("data=%08x\n", data); |
va009039 | 5:2774358f5e4f | 136 | } |
va009039 | 5:2774358f5e4f | 137 | |
va009039 | 5:2774358f5e4f | 138 | TEST(SWD1,MemoryRead) { |
va009039 | 5:2774358f5e4f | 139 | uint32_t addr = 0; |
va009039 | 5:2774358f5e4f | 140 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 141 | uint32_t dummy = 0xffffffff; |
va009039 | 5:2774358f5e4f | 142 | |
va009039 | 5:2774358f5e4f | 143 | uint8_t ack = swd.Transfer(AP_TAR, &addr); |
va009039 | 5:2774358f5e4f | 144 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 145 | |
va009039 | 5:2774358f5e4f | 146 | ack = swd.Transfer(DP_RDBUFF, NULL); |
va009039 | 5:2774358f5e4f | 147 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 148 | |
va009039 | 5:2774358f5e4f | 149 | ack = swd.Transfer(AP_DRW_R, &dummy); |
va009039 | 5:2774358f5e4f | 150 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 151 | DBG("dummy=%08x\n", dummy); |
va009039 | 5:2774358f5e4f | 152 | |
va009039 | 5:2774358f5e4f | 153 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 154 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 155 | DBG("addr=%08x data=%08x\n", addr, data); |
va009039 | 5:2774358f5e4f | 156 | } |
va009039 | 5:2774358f5e4f | 157 | |
va009039 | 5:2774358f5e4f | 158 | TEST(SWD1,DHCSR) { |
va009039 | 5:2774358f5e4f | 159 | uint32_t addr = 0xE000EDF0; // Debug Halting Control and Status Register |
va009039 | 5:2774358f5e4f | 160 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 161 | uint32_t dummy = 0xffffffff; |
va009039 | 5:2774358f5e4f | 162 | |
va009039 | 5:2774358f5e4f | 163 | uint8_t ack = swd.Transfer(AP_TAR, &addr); |
va009039 | 5:2774358f5e4f | 164 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 165 | |
va009039 | 5:2774358f5e4f | 166 | ack = swd.Transfer(DP_RDBUFF, NULL); |
va009039 | 5:2774358f5e4f | 167 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 168 | |
va009039 | 5:2774358f5e4f | 169 | ack = swd.Transfer(AP_DRW_R, &dummy); |
va009039 | 5:2774358f5e4f | 170 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 171 | DBG("dummy=%08x\n", dummy); |
va009039 | 5:2774358f5e4f | 172 | |
va009039 | 5:2774358f5e4f | 173 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 174 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 175 | DBG("addr=%08x data=%08x\n", addr, data); |
va009039 | 5:2774358f5e4f | 176 | } |
va009039 | 5:2774358f5e4f | 177 | |
va009039 | 5:2774358f5e4f | 178 | TEST(SWD1,MemoryRead_fault) { |
va009039 | 5:2774358f5e4f | 179 | uint32_t addr = 10000000; |
va009039 | 5:2774358f5e4f | 180 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 181 | uint32_t dummy = 0xffffffff; |
va009039 | 5:2774358f5e4f | 182 | |
va009039 | 5:2774358f5e4f | 183 | uint8_t ack = swd.Transfer(AP_TAR, &addr); |
va009039 | 5:2774358f5e4f | 184 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 185 | |
va009039 | 5:2774358f5e4f | 186 | ack = swd.Transfer(DP_RDBUFF, NULL); |
va009039 | 5:2774358f5e4f | 187 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 188 | |
va009039 | 5:2774358f5e4f | 189 | ack = swd.Transfer(AP_DRW_R, &dummy); |
va009039 | 5:2774358f5e4f | 190 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 191 | |
va009039 | 5:2774358f5e4f | 192 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 193 | ASSERT_TRUE(ack == SWD_FAULT); |
va009039 | 5:2774358f5e4f | 194 | } |
va009039 | 5:2774358f5e4f | 195 | |
va009039 | 5:2774358f5e4f | 196 | TEST(SWD1,abort3) { |
va009039 | 5:2774358f5e4f | 197 | uint32_t data = 0x1e; |
va009039 | 5:2774358f5e4f | 198 | uint8_t ack = swd.Transfer(DP_ABORT, &data); |
va009039 | 5:2774358f5e4f | 199 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 200 | } |
va009039 | 5:2774358f5e4f | 201 | |
va009039 | 5:2774358f5e4f | 202 | TEST(SWD1,DCRSR) { |
va009039 | 5:2774358f5e4f | 203 | uint32_t addr = 0xE000EDF4; // Debug Core Register Selector Register |
va009039 | 5:2774358f5e4f | 204 | uint32_t data = 0xffffffff; |
va009039 | 5:2774358f5e4f | 205 | uint32_t dummy = 0xffffffff; |
va009039 | 5:2774358f5e4f | 206 | |
va009039 | 5:2774358f5e4f | 207 | uint8_t ack = swd.Transfer(AP_TAR, &addr); |
va009039 | 5:2774358f5e4f | 208 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 209 | |
va009039 | 5:2774358f5e4f | 210 | ack = swd.Transfer(DP_RDBUFF, NULL); |
va009039 | 5:2774358f5e4f | 211 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 212 | |
va009039 | 5:2774358f5e4f | 213 | ack = swd.Transfer(AP_DRW_R, &dummy); |
va009039 | 5:2774358f5e4f | 214 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 215 | DBG("dummy=%08x\n", dummy); |
va009039 | 5:2774358f5e4f | 216 | |
va009039 | 5:2774358f5e4f | 217 | ack = swd.Transfer(DP_RDBUFF, &data); |
va009039 | 5:2774358f5e4f | 218 | ASSERT_TRUE(ack == SWD_OK); |
va009039 | 5:2774358f5e4f | 219 | DBG("addr=%08x data=%08x\n", addr, data); |
va009039 | 5:2774358f5e4f | 220 | } |
va009039 | 5:2774358f5e4f | 221 | |
va009039 | 5:2774358f5e4f | 222 | int main() { |
va009039 | 5:2774358f5e4f | 223 | //pc.baud(921600); |
va009039 | 5:2774358f5e4f | 224 | pc.baud(9600); |
va009039 | 5:2774358f5e4f | 225 | DBG("%s", __FILE__); |
va009039 | 5:2774358f5e4f | 226 | |
va009039 | 5:2774358f5e4f | 227 | RUN_ALL_TESTS(); |
va009039 | 5:2774358f5e4f | 228 | } |
va009039 | 5:2774358f5e4f | 229 | #endif |