semihost server example program
Dependencies: SWD mbed USBLocalFileSystem BaseDAP USBDAP
LPCXpresso LPC11U68 | LPCXpresso LPC1549 | FRDM-KL46Z | EA LPC4088 QSB app-board | LPC1768 app-board | LPC810 | LPC1114FN28 | |
---|---|---|---|---|---|---|---|
server | server | server | server | server | client | client | |
SWDIO | D12 | D12 | D12 | p25 | p21 | p4(P0_2) | p12 |
SWCLK | D10 | D10 | D10 | p26 | p22 | p3(P0_3) | p3 |
nRESET *option | D6 | D6 | D6 | p34 | p30 | p1(P0_5) | p23 |
GND | GND | GND | GND | p1 | p1 | p7 | p22 |
3.3V | P3V3 | P3V3 | P3V3 | p44 | p40 | p6 | p21 |
flash write | SW2(P0_1) | SW3(P1_9) | SW1 | p14 joystick center | p14 joystick center |
client example:
Import programlpc810-semihost_helloworld
semihost client example program
main.cpp@18:5ed1759e863b, 2014-06-22 (annotated)
- Committer:
- va009039
- Date:
- Sun Jun 22 12:04:16 2014 +0000
- Revision:
- 18:5ed1759e863b
add LPC11U68 interface.
Who changed what in which revision?
User | Revision | Line number | New 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 |