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:
1:eb30547ba84d
Child:
2:32e9437348ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Semihost.h	Mon Sep 02 17:33:08 2013 +0000
@@ -0,0 +1,62 @@
+// Semihost.h 2013/9/3
+#pragma once
+#include "Target2.h"
+#include "mydebug.h"
+
+class Semihost {
+public:
+    Semihost(Target2* target, Serial* usbpc);
+    void mount(const char* dirpath);
+    int poll();
+private:
+    int exec(uint32_t reason, uint32_t arg);
+    
+    int sys_open(uint32_t arg);   // 0x01
+    int sys_close(uint32_t arg);  // 0x02
+    int sys_writec(uint32_t arg); // 0x03
+    int sys_write0(uint32_t arg); // 0x04
+    int sys_write(uint32_t arg);  // 0x05
+    int sys_read(uint32_t arg);   // 0x06
+    int sys_readc(uint32_t arg);  // 0x07
+    int sys_istty(uint32_t arg);  // 0x09
+    int sys_fseek(uint32_t arg);  // 0x0a
+    int sys_ensure(uint32_t arg); // 0x0b
+    int sys_flen(uint32_t arg);   // 0x0c
+    int sys_remove(uint32_t arg); // 0x0e
+    int sys_rename(uint32_t arg); // 0x0f
+    int sys_exit(uint32_t arg);   // 0x18
+
+    int usr_xffind(uint32_t arg);      // 0x100
+    int usr_uid(uint32_t arg);         // 0x101
+    int usr_reset(uint32_t arg);       // 0x102
+    int usr_vbus(uint32_t arg);        // 0x103
+    int usr_powerdown(uint32_t arg);   // 0x104
+    int usr_disabledebug(uint32_t arg);// 0x105
+    
+    void _build_name(char* buf, int size, uint32_t arg1, uint32_t arg2);
+
+    template<typename T>
+    void wr(uint32_t addr, T data) {
+        TEST_ASSERT(addr <= 0x10001fff);
+        uint8_t buf[sizeof(T)];
+        *reinterpret_cast<T*>(buf) = data;
+        for(int i = 0; i < sizeof(T); i++) {
+            _target->writeMemory8(addr+i, buf[i]);
+        }
+    }
+
+    template<typename T>
+    T rd(uint32_t addr) {
+        TEST_ASSERT(addr <= 0x10001fff);
+        uint8_t buf[sizeof(T)];
+        for(int i = 0; i < sizeof(T); i++) {
+            buf[i] = _target->readMemory8(addr+i);
+        }
+        return *reinterpret_cast<T*>(buf);
+    }
+ 
+protected:
+    Target2* _target;
+    Serial* _pc;
+    char* _dirpath;
+};