ISP example program.
Dependencies: SLCD mbed USBLocalFileSystem
FRDM-KL46Z | LPC810 | |
---|---|---|
UART RXD | PTE23 | p2(P0_4) |
UART TXD | PTE22 | p8(P0_0) |
nRESET | D6 | p1(P0_5) |
nISP | D8 | p5(P0_1) |
GND | GND | p7 |
3.3V | P3V3 | p6 |
Copy binary image to the disk called LPC81ISP.
Push sw1 or sw3, start write to LPC810 flash.
main.cpp@1:cccfc461c61f, 2014-02-16 (annotated)
- Committer:
- va009039
- Date:
- Sun Feb 16 12:56:12 2014 +0000
- Revision:
- 1:cccfc461c61f
- Parent:
- 0:ad2b1fc04955
- Child:
- 2:eafc1c6787c7
add virtual COM.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 1:cccfc461c61f | 1 | #ifdef TARGET_KL46Z |
va009039 | 0:ad2b1fc04955 | 2 | #include "RamDisk.h" |
va009039 | 0:ad2b1fc04955 | 3 | #include "Storage.h" |
va009039 | 0:ad2b1fc04955 | 4 | #include "BaseLpcIsp.h" |
va009039 | 0:ad2b1fc04955 | 5 | #include "SLCD.h" |
va009039 | 0:ad2b1fc04955 | 6 | |
va009039 | 0:ad2b1fc04955 | 7 | DigitalOut led_sw(PTD5); |
va009039 | 0:ad2b1fc04955 | 8 | DigitalOut led_tx(PTE29); |
va009039 | 0:ad2b1fc04955 | 9 | #define LED_ON 0 |
va009039 | 0:ad2b1fc04955 | 10 | #define LED_OFF 1 |
va009039 | 0:ad2b1fc04955 | 11 | |
va009039 | 0:ad2b1fc04955 | 12 | InterruptIn sw1(SW1); |
va009039 | 0:ad2b1fc04955 | 13 | InterruptIn sw3(SW3); |
va009039 | 0:ad2b1fc04955 | 14 | RawSerial pc(USBTX,USBRX); |
va009039 | 0:ad2b1fc04955 | 15 | SLCD slcd; |
va009039 | 0:ad2b1fc04955 | 16 | |
va009039 | 0:ad2b1fc04955 | 17 | class lpc81isp : public BaseLpcIsp { |
va009039 | 0:ad2b1fc04955 | 18 | public: |
va009039 | 0:ad2b1fc04955 | 19 | lpc81isp(PinName txd, PinName rxd, PinName reset, PinName isp):BaseLpcIsp(txd, rxd, reset, isp){} |
va009039 | 0:ad2b1fc04955 | 20 | virtual void infoLED(int select, int value) { |
va009039 | 0:ad2b1fc04955 | 21 | switch(select) { |
va009039 | 0:ad2b1fc04955 | 22 | case LED_TX: led_tx = value ? LED_ON : LED_OFF; break; |
va009039 | 0:ad2b1fc04955 | 23 | } |
va009039 | 0:ad2b1fc04955 | 24 | } |
va009039 | 0:ad2b1fc04955 | 25 | virtual void infoSLCD(const char* s) { slcd.puts(s); } |
va009039 | 0:ad2b1fc04955 | 26 | } lpc(PTE22, PTE23, PTB0, PTB1); // TX,RX,nRESET,nISP |
va009039 | 0:ad2b1fc04955 | 27 | |
va009039 | 0:ad2b1fc04955 | 28 | __IO bool write_start = false; |
va009039 | 0:ad2b1fc04955 | 29 | void swIRQ() { |
va009039 | 0:ad2b1fc04955 | 30 | led_sw = LED_ON; |
va009039 | 0:ad2b1fc04955 | 31 | wait_ms(100); |
va009039 | 0:ad2b1fc04955 | 32 | led_sw = LED_OFF; |
va009039 | 0:ad2b1fc04955 | 33 | write_start = true; |
va009039 | 0:ad2b1fc04955 | 34 | } |
va009039 | 0:ad2b1fc04955 | 35 | |
va009039 | 0:ad2b1fc04955 | 36 | int main() { |
va009039 | 0:ad2b1fc04955 | 37 | pc.baud(9600); |
va009039 | 0:ad2b1fc04955 | 38 | pc.printf("%s", __FILE__); |
va009039 | 0:ad2b1fc04955 | 39 | led_sw = LED_OFF; |
va009039 | 0:ad2b1fc04955 | 40 | led_tx = LED_OFF; |
va009039 | 0:ad2b1fc04955 | 41 | |
va009039 | 0:ad2b1fc04955 | 42 | sw1.rise(swIRQ); |
va009039 | 0:ad2b1fc04955 | 43 | sw3.rise(swIRQ); |
va009039 | 0:ad2b1fc04955 | 44 | |
va009039 | 0:ad2b1fc04955 | 45 | RamDisk* ramdisk = new RamDisk; |
va009039 | 1:cccfc461c61f | 46 | USBStorage2* usb = new USBStorage2(ramdisk); |
va009039 | 0:ad2b1fc04955 | 47 | LocalStorage* local = NULL; |
va009039 | 0:ad2b1fc04955 | 48 | slcd.puts("REDY"); |
va009039 | 0:ad2b1fc04955 | 49 | write_start = false; |
va009039 | 0:ad2b1fc04955 | 50 | while(1) { |
va009039 | 0:ad2b1fc04955 | 51 | if (write_start) { |
va009039 | 0:ad2b1fc04955 | 52 | if (local) { |
va009039 | 0:ad2b1fc04955 | 53 | delete local; |
va009039 | 0:ad2b1fc04955 | 54 | } |
va009039 | 0:ad2b1fc04955 | 55 | local = new LocalStorage(ramdisk); |
va009039 | 0:ad2b1fc04955 | 56 | mystring filename; |
va009039 | 0:ad2b1fc04955 | 57 | if (LocalStorage::find_bin(filename)) { |
va009039 | 0:ad2b1fc04955 | 58 | pc.printf("bin filename=[%s]\n", filename.c_str()); |
va009039 | 0:ad2b1fc04955 | 59 | lpc.baud(9600); |
va009039 | 0:ad2b1fc04955 | 60 | lpc.Reset(true); // ISP mode |
va009039 | 0:ad2b1fc04955 | 61 | lpc.Sync(); |
va009039 | 0:ad2b1fc04955 | 62 | lpc.FlashWrite(filename.c_str()); |
va009039 | 0:ad2b1fc04955 | 63 | lpc.Reset(false); // Reset |
va009039 | 0:ad2b1fc04955 | 64 | } |
va009039 | 0:ad2b1fc04955 | 65 | write_start = false; |
va009039 | 0:ad2b1fc04955 | 66 | } |
va009039 | 1:cccfc461c61f | 67 | if (usb->readable()) { |
va009039 | 1:cccfc461c61f | 68 | lpc.putc(usb->getc()); |
va009039 | 1:cccfc461c61f | 69 | } |
va009039 | 1:cccfc461c61f | 70 | if (lpc.readable()) { |
va009039 | 1:cccfc461c61f | 71 | usb->putc(lpc.getc()); |
va009039 | 1:cccfc461c61f | 72 | } |
va009039 | 0:ad2b1fc04955 | 73 | if (pc.readable()) { |
va009039 | 0:ad2b1fc04955 | 74 | switch(pc.getc()) { |
va009039 | 0:ad2b1fc04955 | 75 | case 'd': ramdisk->dump(0); break; |
va009039 | 0:ad2b1fc04955 | 76 | case 'D': ramdisk->dump(1); break; |
va009039 | 0:ad2b1fc04955 | 77 | case 'w': write_start = true; break; |
va009039 | 0:ad2b1fc04955 | 78 | } |
va009039 | 0:ad2b1fc04955 | 79 | } |
va009039 | 0:ad2b1fc04955 | 80 | } |
va009039 | 0:ad2b1fc04955 | 81 | } |
va009039 | 1:cccfc461c61f | 82 | #endif |