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

main_KL46Z.cpp

Committer:
va009039
Date:
2014-02-20
Revision:
9:7e71c20c96e4
Parent:
8:d7f5d80531e4
Child:
11:ad8af1047350

File content as of revision 9:7e71c20c96e4:

// main_KL46Z.cpp 2014/2/20
#if defined(TARGET_KL46Z)
#include "Target2.h"
#include "Flash.h"
#include "RamDisk.h"
#include "Storage.h"
#include "Semihost.h"

Serial pc(USBTX, USBRX);
SWD swd(PTE2,PTE3,PTE6); // SWDIO,SWCLK,nReset
InterruptIn sw1(SW1);
InterruptIn sw3(SW3);
DigitalOut led_disk(PTD5);
DigitalOut led_flash(PTE29);
#define LED_ON  0
#define LED_OFF 1

void callback_disk() {
    led_disk = !led_disk;
}

void callback_flash() {
    led_flash = !led_flash;
}

__IO bool write_start = false;
void swIRQ() {
    wait_ms(100);
    write_start = true;
}

int main() {
    pc.baud(9600);
    pc.printf("%s\n", __FILE__);
    led_disk = LED_OFF;
    led_flash = LED_OFF;

    sw1.rise(swIRQ);
    sw3.rise(swIRQ);
        
    RamDisk* ramdisk = new RamDisk;
    ramdisk->attachEvent(callback_disk);
    USBStorage2* usb = new USBStorage2(ramdisk);
    LocalStorage* local = NULL;
    Target2* lpc = new Target2(&swd);
    lpc->setup();
    Semihost semihost(lpc, &pc, usb);
    semihost.mount("/local");
    lpc->resume(); // C_DEBUGEN ON
    while(1) {
        if (write_start) {
            if (local) {
                delete local;
            }    
            local = new LocalStorage(ramdisk);     
            mystring filename;
            if (LocalStorage::find_bin(filename)) {
                pc.printf("*** bin filename=[%s]\n", filename.c_str());
                lpc->setup();
                Flash flash(lpc, &pc);
                flash.attachEvent(callback_flash);
                if (flash.init()) {
                    flash.write(filename.c_str());
                    flash.verify(filename.c_str());
                }
            } else {
                pc.printf("*** binary image file not found.\n");
            }
            lpc->SoftwareReset();    
            lpc->HardwareReset();
            led_flash = LED_OFF;
            write_start = false;
        }
        semihost.poll();
    }        
}
#endif // TARGET_KL46Z