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
add LPC11U68 interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 18:5ed1759e863b 1 // main.cpp 2014/6/22
va009039 18:5ed1759e863b 2 #if 1
va009039 18:5ed1759e863b 3 #include "Target2.h"
va009039 18:5ed1759e863b 4 #include "Flash.h"
va009039 18:5ed1759e863b 5 #include "USBLocalFileSystem.h"
va009039 18:5ed1759e863b 6 #include "Semihost.h"
va009039 18:5ed1759e863b 7 #include "mydebug.h"
va009039 18:5ed1759e863b 8
va009039 18:5ed1759e863b 9 #if defined(TARGET_KL46Z)
va009039 18:5ed1759e863b 10 #define TARGET_SWDIO D12
va009039 18:5ed1759e863b 11 #define TARGET_SWCLK D10
va009039 18:5ed1759e863b 12 #define TARGET_nRESET D6
va009039 18:5ed1759e863b 13 #define SW_PIN SW1
va009039 18:5ed1759e863b 14 #define SW_MODE PullUp
va009039 18:5ed1759e863b 15 #define LED_OFF 1
va009039 18:5ed1759e863b 16
va009039 18:5ed1759e863b 17 #elif defined(TARGET_LPC1549)
va009039 18:5ed1759e863b 18 #define TARGET_SWDIO D12
va009039 18:5ed1759e863b 19 #define TARGET_SWCLK D10
va009039 18:5ed1759e863b 20 #define TARGET_nRESET D6
va009039 18:5ed1759e863b 21 #define SW_PIN P1_9 // SW3
va009039 18:5ed1759e863b 22 #define SW_MODE PullUp
va009039 18:5ed1759e863b 23 #define LED_OFF 1
va009039 18:5ed1759e863b 24
va009039 18:5ed1759e863b 25 #elif defined(TARGET_LPC11U68)
va009039 18:5ed1759e863b 26 #define TARGET_SWDIO D12
va009039 18:5ed1759e863b 27 #define TARGET_SWCLK D10
va009039 18:5ed1759e863b 28 #define TARGET_nRESET D6
va009039 18:5ed1759e863b 29 #define SW_PIN P0_1 // SW2
va009039 18:5ed1759e863b 30 #define SW_MODE PullUp
va009039 18:5ed1759e863b 31 #define LED_OFF 1
va009039 18:5ed1759e863b 32
va009039 18:5ed1759e863b 33 #elif defined(TARGET_LPC1768)
va009039 18:5ed1759e863b 34 #define TARGET_SWDIO p21
va009039 18:5ed1759e863b 35 #define TARGET_SWCLK p22
va009039 18:5ed1759e863b 36 #define TARGET_nRESET p30
va009039 18:5ed1759e863b 37 #define SW_PIN p14 // joystick mbed application board
va009039 18:5ed1759e863b 38 #define LED_OFF 0
va009039 18:5ed1759e863b 39
va009039 18:5ed1759e863b 40 #elif defined(TARGET_LPC4088)
va009039 18:5ed1759e863b 41 #define TARGET_SWDIO p25
va009039 18:5ed1759e863b 42 #define TARGET_SWCLK p26
va009039 18:5ed1759e863b 43 #define TARGET_nRESET p34
va009039 18:5ed1759e863b 44 #define SW_PIN p14 // joystick mbed application board
va009039 18:5ed1759e863b 45 #define LED_OFF 0
va009039 18:5ed1759e863b 46
va009039 18:5ed1759e863b 47 #else
va009039 18:5ed1759e863b 48 #error "target error"
va009039 18:5ed1759e863b 49 #endif
va009039 18:5ed1759e863b 50
va009039 18:5ed1759e863b 51 Serial pc(USBTX,USBRX);
va009039 18:5ed1759e863b 52 SWD swd(TARGET_SWDIO, TARGET_SWCLK, TARGET_nRESET);
va009039 18:5ed1759e863b 53 InterruptIn sw(SW_PIN);
va009039 18:5ed1759e863b 54 DigitalOut led_flash(LED1);
va009039 18:5ed1759e863b 55
va009039 18:5ed1759e863b 56 void callback_flash() {
va009039 18:5ed1759e863b 57 led_flash = !led_flash;
va009039 18:5ed1759e863b 58 }
va009039 18:5ed1759e863b 59
va009039 18:5ed1759e863b 60 __IO bool write_start = false;
va009039 18:5ed1759e863b 61 void swIRQ() {
va009039 18:5ed1759e863b 62 wait_ms(100);
va009039 18:5ed1759e863b 63 write_start = true;
va009039 18:5ed1759e863b 64 }
va009039 18:5ed1759e863b 65
va009039 18:5ed1759e863b 66 int main() {
va009039 18:5ed1759e863b 67 TRACE();
va009039 18:5ed1759e863b 68 pc.baud(9600);
va009039 18:5ed1759e863b 69 pc.printf("%s\n", __FILE__);
va009039 18:5ed1759e863b 70 led_flash = LED_OFF;
va009039 18:5ed1759e863b 71
va009039 18:5ed1759e863b 72 #ifdef SW_MODE
va009039 18:5ed1759e863b 73 sw.mode(SW_MODE);
va009039 18:5ed1759e863b 74 #endif
va009039 18:5ed1759e863b 75 sw.rise(swIRQ);
va009039 18:5ed1759e863b 76
va009039 18:5ed1759e863b 77 USBLocalFileSystem* usb_local = new USBLocalFileSystem(); // RamDisk(64KB)
va009039 18:5ed1759e863b 78
va009039 18:5ed1759e863b 79 Target2* lpc = new Target2(&swd);
va009039 18:5ed1759e863b 80 if (!lpc->setup()) {
va009039 18:5ed1759e863b 81 pc.printf("*** SWD error.\n");
va009039 18:5ed1759e863b 82 }
va009039 18:5ed1759e863b 83 Semihost semihost(lpc, &pc, usb_local);
va009039 18:5ed1759e863b 84 semihost.mount("/local");
va009039 18:5ed1759e863b 85 lpc->resume(); // C_DEBUGEN ON
va009039 18:5ed1759e863b 86 while(1) {
va009039 18:5ed1759e863b 87 if (write_start) {
va009039 18:5ed1759e863b 88 usb_local->lock(true);
va009039 18:5ed1759e863b 89 usb_local->remount();
va009039 18:5ed1759e863b 90 char filename[64];
va009039 18:5ed1759e863b 91 if (usb_local->find(filename, sizeof(filename), "*.BIN")) {
va009039 18:5ed1759e863b 92 pc.printf("*** bin filename=[%s]\n", filename);
va009039 18:5ed1759e863b 93 if (!lpc->setup()) {
va009039 18:5ed1759e863b 94 pc.printf("*** SWD error.\n");
va009039 18:5ed1759e863b 95 } else {
va009039 18:5ed1759e863b 96 Flash flash(lpc, &pc);
va009039 18:5ed1759e863b 97 flash.attachEvent(callback_flash);
va009039 18:5ed1759e863b 98 if (flash.init()) {
va009039 18:5ed1759e863b 99 flash.write(filename);
va009039 18:5ed1759e863b 100 flash.verify(filename);
va009039 18:5ed1759e863b 101 }
va009039 18:5ed1759e863b 102 }
va009039 18:5ed1759e863b 103 } else {
va009039 18:5ed1759e863b 104 pc.printf("*** binary image file not found.\n");
va009039 18:5ed1759e863b 105 }
va009039 18:5ed1759e863b 106 usb_local->lock(false);
va009039 18:5ed1759e863b 107 lpc->SoftwareReset();
va009039 18:5ed1759e863b 108 lpc->HardwareReset();
va009039 18:5ed1759e863b 109 led_flash = LED_OFF;
va009039 18:5ed1759e863b 110 write_start = false;
va009039 18:5ed1759e863b 111 }
va009039 18:5ed1759e863b 112 semihost.poll();
va009039 18:5ed1759e863b 113 }
va009039 18:5ed1759e863b 114 }
va009039 18:5ed1759e863b 115 #endif
va009039 18:5ed1759e863b 116