semihost server example program
Dependencies: SWD mbed USBLocalFileSystem BaseDAP USBDAP
test1_SWD.cpp
00001 // test1_SWD.cpp 2013/9/14 00002 #if 0 00003 #include "SWD.h" 00004 #include "mytest.h" 00005 00006 Serial pc(USBTX, USBRX); 00007 #ifdef TARGET_LPC1768 00008 SWD swd(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) 00009 #endif 00010 #ifdef TARGET_KL25Z 00011 SWD swd(PTB8,PTB9,PTB10); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) 00012 #endif 00013 00014 00015 TEST(SWD1,setup) { 00016 swd.Setup(); 00017 } 00018 00019 TEST(SWD1,JTAG2SWD) { 00020 const uint8_t data1[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff}; 00021 const uint8_t data2[] = {0x9e,0xe7}; 00022 const uint8_t data3[] = {0x00}; 00023 swd.SWJSequence(sizeof(data1)*8, data1); 00024 swd.SWJSequence(sizeof(data2)*8, data2); 00025 swd.SWJSequence(sizeof(data1)*8, data1); 00026 swd.SWJSequence(sizeof(data3)*8, data3); 00027 } 00028 00029 TEST(SWD1,idcode) { 00030 uint32_t data = 0xffffffff; 00031 uint8_t ack = swd.Transfer(DP_IDCODE, &data); 00032 ASSERT_TRUE(ack == SWD_OK); 00033 ASSERT_TRUE(data == 0x0bb11477); 00034 } 00035 00036 TEST(SWD1,abort1) { 00037 uint32_t data = 0x1e; 00038 uint8_t ack = swd.Transfer(DP_ABORT, &data); 00039 ASSERT_TRUE(ack == SWD_OK); 00040 } 00041 00042 TEST(SWD1,select) { 00043 uint32_t data = 0x0; 00044 uint8_t ack = swd.Transfer(DP_SELECT, &data); 00045 ASSERT_TRUE(ack == SWD_OK); 00046 00047 ack = swd.Transfer(DP_RDBUFF, &data); 00048 ASSERT_TRUE(ack == SWD_OK); 00049 DBG("DP_RDBUFF: %08x\n", data); 00050 } 00051 00052 TEST(SWD1,ctrl_stat) { 00053 uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ; 00054 ASSERT_TRUE(data == 0x50000000); 00055 uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); 00056 ASSERT_TRUE(ack == SWD_OK); 00057 00058 ack = swd.Transfer(DP_RDBUFF, &data); 00059 ASSERT_TRUE(ack == SWD_OK); 00060 DBG("DP_RDBUFF: %08x\n", data); 00061 00062 ack = swd.Transfer(DP_CTRL_STAT_R, &data); 00063 ASSERT_TRUE(ack == SWD_OK); 00064 DBG("%08x\n", data); 00065 ASSERT_TRUE(data == 0xf0000040); 00066 } 00067 00068 TEST(SWD1,abort2) { 00069 uint32_t data = 0x1e; 00070 uint8_t ack = swd.Transfer(DP_ABORT, &data); 00071 ASSERT_TRUE(ack == SWD_OK); 00072 } 00073 00074 TEST(SWD1,ctrl_stat1) { 00075 //uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | TRNNORMAL; 00076 uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | 0x04000000; 00077 ASSERT_TRUE(data == 0x54000000); 00078 uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); 00079 ASSERT_TRUE(ack == SWD_OK); 00080 00081 ack = swd.Transfer(DP_RDBUFF, &data); 00082 ASSERT_TRUE(ack == SWD_OK); 00083 DBG("DP_RDBUFF: %08x\n", data); 00084 } 00085 00086 TEST(SWD1,ctrl_stat2) { 00087 uint32_t data = CSYSPWRUPREQ | CDBGPWRUPREQ | MASKLANE; 00088 ASSERT_TRUE(data == 0x50000f00); 00089 uint8_t ack = swd.Transfer(DP_CTRL_STAT, &data); 00090 ASSERT_TRUE(ack == SWD_OK); 00091 00092 ack = swd.Transfer(DP_RDBUFF, &data); 00093 ASSERT_TRUE(ack == SWD_OK); 00094 DBG("DP_RDBUFF: %08x\n", data); 00095 } 00096 00097 TEST(SWD1,csw) { 00098 uint32_t data = CSW_VALUE|CSW_SIZE32; 00099 ASSERT_TRUE(data == 0x23000052); 00100 uint8_t ack = swd.Transfer(AP_CSW, &data); 00101 ASSERT_TRUE(ack == SWD_OK); 00102 00103 ack = swd.Transfer(DP_RDBUFF, &data); 00104 DBG("ack=%02x\n", ack); 00105 ASSERT_TRUE(ack == SWD_OK); 00106 DBG("DP_RDBUFF: %08x\n", data); 00107 } 00108 00109 TEST(SWD1,tar) { 00110 //uint32_t addr = 0x10000000; 00111 uint32_t addr = 0x00000000; 00112 uint8_t ack = swd.Transfer(AP_TAR, &addr); 00113 ASSERT_TRUE(ack == SWD_OK); 00114 00115 ack = swd.Transfer(DP_RDBUFF, NULL); 00116 ASSERT_TRUE(ack == SWD_OK); 00117 } 00118 00119 TEST(SWD1,drw) { 00120 uint32_t data = 0xffffffff; 00121 uint8_t ack = swd.Transfer(AP_DRW_R, &data); 00122 ASSERT_TRUE(ack == SWD_OK); 00123 DBG("data=%08x\n", data); 00124 00125 ack = swd.Transfer(AP_DRW_R, &data); 00126 ASSERT_TRUE(ack == SWD_OK); 00127 DBG("data=%08x\n", data); 00128 00129 ack = swd.Transfer(AP_DRW_R, &data); 00130 ASSERT_TRUE(ack == SWD_OK); 00131 DBG("data=%08x\n", data); 00132 00133 ack = swd.Transfer(DP_RDBUFF, &data); 00134 ASSERT_TRUE(ack == SWD_OK); 00135 DBG("data=%08x\n", data); 00136 } 00137 00138 TEST(SWD1,MemoryRead) { 00139 uint32_t addr = 0; 00140 uint32_t data = 0xffffffff; 00141 uint32_t dummy = 0xffffffff; 00142 00143 uint8_t ack = swd.Transfer(AP_TAR, &addr); 00144 ASSERT_TRUE(ack == SWD_OK); 00145 00146 ack = swd.Transfer(DP_RDBUFF, NULL); 00147 ASSERT_TRUE(ack == SWD_OK); 00148 00149 ack = swd.Transfer(AP_DRW_R, &dummy); 00150 ASSERT_TRUE(ack == SWD_OK); 00151 DBG("dummy=%08x\n", dummy); 00152 00153 ack = swd.Transfer(DP_RDBUFF, &data); 00154 ASSERT_TRUE(ack == SWD_OK); 00155 DBG("addr=%08x data=%08x\n", addr, data); 00156 } 00157 00158 TEST(SWD1,DHCSR) { 00159 uint32_t addr = 0xE000EDF0; // Debug Halting Control and Status Register 00160 uint32_t data = 0xffffffff; 00161 uint32_t dummy = 0xffffffff; 00162 00163 uint8_t ack = swd.Transfer(AP_TAR, &addr); 00164 ASSERT_TRUE(ack == SWD_OK); 00165 00166 ack = swd.Transfer(DP_RDBUFF, NULL); 00167 ASSERT_TRUE(ack == SWD_OK); 00168 00169 ack = swd.Transfer(AP_DRW_R, &dummy); 00170 ASSERT_TRUE(ack == SWD_OK); 00171 DBG("dummy=%08x\n", dummy); 00172 00173 ack = swd.Transfer(DP_RDBUFF, &data); 00174 ASSERT_TRUE(ack == SWD_OK); 00175 DBG("addr=%08x data=%08x\n", addr, data); 00176 } 00177 00178 TEST(SWD1,MemoryRead_fault) { 00179 uint32_t addr = 10000000; 00180 uint32_t data = 0xffffffff; 00181 uint32_t dummy = 0xffffffff; 00182 00183 uint8_t ack = swd.Transfer(AP_TAR, &addr); 00184 ASSERT_TRUE(ack == SWD_OK); 00185 00186 ack = swd.Transfer(DP_RDBUFF, NULL); 00187 ASSERT_TRUE(ack == SWD_OK); 00188 00189 ack = swd.Transfer(AP_DRW_R, &dummy); 00190 ASSERT_TRUE(ack == SWD_OK); 00191 00192 ack = swd.Transfer(DP_RDBUFF, &data); 00193 ASSERT_TRUE(ack == SWD_FAULT); 00194 } 00195 00196 TEST(SWD1,abort3) { 00197 uint32_t data = 0x1e; 00198 uint8_t ack = swd.Transfer(DP_ABORT, &data); 00199 ASSERT_TRUE(ack == SWD_OK); 00200 } 00201 00202 TEST(SWD1,DCRSR) { 00203 uint32_t addr = 0xE000EDF4; // Debug Core Register Selector Register 00204 uint32_t data = 0xffffffff; 00205 uint32_t dummy = 0xffffffff; 00206 00207 uint8_t ack = swd.Transfer(AP_TAR, &addr); 00208 ASSERT_TRUE(ack == SWD_OK); 00209 00210 ack = swd.Transfer(DP_RDBUFF, NULL); 00211 ASSERT_TRUE(ack == SWD_OK); 00212 00213 ack = swd.Transfer(AP_DRW_R, &dummy); 00214 ASSERT_TRUE(ack == SWD_OK); 00215 DBG("dummy=%08x\n", dummy); 00216 00217 ack = swd.Transfer(DP_RDBUFF, &data); 00218 ASSERT_TRUE(ack == SWD_OK); 00219 DBG("addr=%08x data=%08x\n", addr, data); 00220 } 00221 00222 int main() { 00223 //pc.baud(921600); 00224 pc.baud(9600); 00225 DBG("%s", __FILE__); 00226 00227 RUN_ALL_TESTS(); 00228 } 00229 #endif
Generated on Wed Jul 13 2022 16:56:23 by 1.7.2