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

Revision:
18:5ed1759e863b
Parent:
7:acfd2dbff157
--- a/Target2.cpp	Sat May 03 12:54:55 2014 +0000
+++ b/Target2.cpp	Sun Jun 22 12:04:16 2014 +0000
@@ -1,4 +1,4 @@
-// Target2.cpp 2013/9/23
+// Target2.cpp 2014/6/22
 #include "Target2.h"
 #include "mydebug.h"
 
@@ -51,6 +51,7 @@
 
 bool Target2::setup()
 {
+    TRACE();
     _swd->Setup();
     JTAG2SWD();
     
@@ -149,24 +150,29 @@
 
 void Target2::SoftwareReset()
 {
+    TRACE();
     writeMemory(NVIC_AIRCR, 0x05fa0004);
 }
 
 uint32_t Target2::readMemory(uint32_t addr)
 {
+    TRACE1(addr);
     _setaddr(addr);
 
     uint32_t data;
     uint8_t ack = _swd->Transfer(AP_DRW_R, &data); // dummy read
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
 
     ack = _swd->Transfer(DP_RDBUFF, &data);
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
     return data;
 }
 
 void Target2::readMemory(uint32_t addr, uint32_t* data, int count)
 {
+    TRACE1(addr);
     if (count == 0) {
         return;
     }
@@ -202,6 +208,7 @@
 
 uint8_t Target2::readMemory8(uint32_t addr)
 {
+    TRACE1(addr);
     _setaddr8(addr);
 
     uint32_t data32;
@@ -225,22 +232,28 @@
 
 void Target2::_setaddr(uint32_t addr)
 {
+    TRACE1(addr);
     uint32_t ctl = CSW_VALUE|CSW_SIZE32;
     uint8_t ack = _swd->Transfer(AP_CSW, &ctl);
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
 
     ack = _swd->Transfer(DP_RDBUFF, NULL);
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
 
     ack = _swd->Transfer(AP_TAR, &addr);
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
 
     ack = _swd->Transfer(DP_RDBUFF, NULL);
+    TRACE1(ack);
     TEST_ASSERT(ack == SWD_OK);
 } 
 
 void Target2::_setaddr8(uint32_t addr)
 {
+    TRACE1(addr);
     uint32_t ctl = CSW_VALUE|CSW_SIZE8;
     uint8_t ack = _swd->Transfer(AP_CSW, &ctl);
     TEST_ASSERT(ack == SWD_OK);
@@ -264,11 +277,13 @@
 
 int Target2::getStatus()
 {
+    TRACE();
     return readMemory(DHCSR) & 6 ? TARGET_HALTED : TARGET_RUNNING;
 }
 
 bool Target2::wait_status(int status, int timeout_ms)
 {
+    TRACE1(status);
     Timer t;
     t.reset();
     t.start();
@@ -282,6 +297,7 @@
 
 bool Target2::prog_status()
 {
+    TRACE();
     writeMemory(DEMCR, 1);
     int status = getStatus();
     TEST_ASSERT(status == TARGET_HALTED);
@@ -305,6 +321,7 @@
 
 bool Target2::setBreakpoint0(uint32_t addr)
 {
+    TRACE1(addr);
     if ((addr&1) == 0 || addr >= 0x20000000) {
         return false;
     }
@@ -321,22 +338,26 @@
 
 void Target2::removeBreakpoint0(uint32_t addr)
 {
+    TRACE1(addr);
     writeMemory(FP_COMP0, 0); // breakpoint clear
     writeMemory(FP_CTRL, 2); // desable FPB
 }
 
 void Target2::halt()
 {
+    TRACE();
     writeMemory(DHCSR, 0xa05f0003);     
 }
 
 void Target2::resume()
 {
+    TRACE();
     writeMemory(DHCSR, 0xa05f0001);     
 }
 
 void Target2::step()
 {
+    TRACE();
     writeMemory(DHCSR, 0xa05f0005);     
 }