semihost server example program

Dependencies:   SWD mbed USBLocalFileSystem BaseDAP USBDAP

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers test1_SWD.cpp Source File

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