ISP example program.

Dependencies:   SLCD mbed USBLocalFileSystem

/media/uploads/va009039/lpc81isp-360x240.jpg

FRDM-KL46ZLPC810
UART RXDPTE23p2(P0_4)
UART TXDPTE22p8(P0_0)
nRESETD6p1(P0_5)
nISPD8p5(P0_1)
GNDGNDp7
3.3VP3V3p6

Copy binary image to the disk called LPC81ISP.
Push sw1 or sw3, start write to LPC810 flash.

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?

UserRevisionLine numberNew 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