semihost server example program

Dependencies:   SWD mbed USBLocalFileSystem BaseDAP USBDAP

/media/uploads/va009039/kl46z-lpc800-360x480.jpg

LPCXpresso
LPC11U68
LPCXpresso
LPC1549
FRDM-KL46ZEA LPC4088 QSB
app-board
LPC1768
app-board
LPC810LPC1114FN28
serverserverserverserverserverclientclient
SWDIOD12D12D12p25p21p4(P0_2)p12
SWCLKD10D10D10p26p22p3(P0_3)p3
nRESET
*option
D6D6D6p34p30p1(P0_5)p23
GNDGNDGNDGNDp1p1p7p22
3.3VP3V3P3V3P3V3p44p40p6p21
flash writeSW2(P0_1)SW3(P1_9)SW1p14
joystick
center
p14
joystick
center

client example:

Import programlpc810-semihost_helloworld

semihost client example program

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?

UserRevisionLine numberNew 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