Sam Grove
/
Re-InvokeISP
Testing documentation
main.cpp@0:116ff1f909ba, 2010-08-27 (annotated)
- Committer:
- sgrove
- Date:
- Fri Aug 27 20:58:54 2010 +0000
- Revision:
- 0:116ff1f909ba
- Child:
- 1:e835875b325c
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sgrove | 0:116ff1f909ba | 1 | #include "mbed.h" |
sgrove | 0:116ff1f909ba | 2 | |
sgrove | 0:116ff1f909ba | 3 | DigitalOut myled(LED1); |
sgrove | 0:116ff1f909ba | 4 | |
sgrove | 0:116ff1f909ba | 5 | void DisconnectPLL0(){ |
sgrove | 0:116ff1f909ba | 6 | // good practice to disable before feeding |
sgrove | 0:116ff1f909ba | 7 | __disable_irq(); |
sgrove | 0:116ff1f909ba | 8 | // disconnect |
sgrove | 0:116ff1f909ba | 9 | LPC_SC->PLL0CON = 0x1; |
sgrove | 0:116ff1f909ba | 10 | LPC_SC->PLL0FEED = 0xAA; |
sgrove | 0:116ff1f909ba | 11 | LPC_SC->PLL0FEED = 0x55; |
sgrove | 0:116ff1f909ba | 12 | while (LPC_SC->PLL0STAT&(1<<25)); |
sgrove | 0:116ff1f909ba | 13 | // power down |
sgrove | 0:116ff1f909ba | 14 | LPC_SC->PLL0CON = 0x0; |
sgrove | 0:116ff1f909ba | 15 | LPC_SC->PLL0FEED = 0xAA; |
sgrove | 0:116ff1f909ba | 16 | LPC_SC->PLL0FEED = 0x55; |
sgrove | 0:116ff1f909ba | 17 | while (LPC_SC->PLL0STAT&(1<<24)); |
sgrove | 0:116ff1f909ba | 18 | // This is the default flash read/write setting for IRC |
sgrove | 0:116ff1f909ba | 19 | LPC_SC->FLASHCFG &= 0x0fff; |
sgrove | 0:116ff1f909ba | 20 | LPC_SC->FLASHCFG |= 0x5000; |
sgrove | 0:116ff1f909ba | 21 | LPC_SC->CCLKCFG = 0x0; |
sgrove | 0:116ff1f909ba | 22 | // Select the IRC as clk |
sgrove | 0:116ff1f909ba | 23 | LPC_SC->CLKSRCSEL = 0x00; |
sgrove | 0:116ff1f909ba | 24 | // not using XTAL anymore |
sgrove | 0:116ff1f909ba | 25 | LPC_SC->SCS = 0x00; |
sgrove | 0:116ff1f909ba | 26 | } |
sgrove | 0:116ff1f909ba | 27 | |
sgrove | 0:116ff1f909ba | 28 | // IAP address |
sgrove | 0:116ff1f909ba | 29 | #define IAP_LOCATION 0x1FFF1FF1 |
sgrove | 0:116ff1f909ba | 30 | // variable for command and result |
sgrove | 0:116ff1f909ba | 31 | unsigned int command[5]; |
sgrove | 0:116ff1f909ba | 32 | unsigned int result[5]; |
sgrove | 0:116ff1f909ba | 33 | // function pointer with 2 parameters |
sgrove | 0:116ff1f909ba | 34 | typedef void (*IAP)(unsigned int[5],unsigned int [5]); |
sgrove | 0:116ff1f909ba | 35 | // declaration of the fptr. |
sgrove | 0:116ff1f909ba | 36 | IAP iap_entry = (IAP)IAP_LOCATION; |
sgrove | 0:116ff1f909ba | 37 | |
sgrove | 0:116ff1f909ba | 38 | int main(){ |
sgrove | 0:116ff1f909ba | 39 | |
sgrove | 0:116ff1f909ba | 40 | // change clk to 4MHz - see below |
sgrove | 0:116ff1f909ba | 41 | DisconnectPLL0(); |
sgrove | 0:116ff1f909ba | 42 | // stop all ISRs |
sgrove | 0:116ff1f909ba | 43 | __disable_irq(); |
sgrove | 0:116ff1f909ba | 44 | //make IAP call |
sgrove | 0:116ff1f909ba | 45 | command[0] = 57; |
sgrove | 0:116ff1f909ba | 46 | iap_entry(command, result); |
sgrove | 0:116ff1f909ba | 47 | |
sgrove | 0:116ff1f909ba | 48 | // This should never get executed |
sgrove | 0:116ff1f909ba | 49 | while(1) { |
sgrove | 0:116ff1f909ba | 50 | myled = 1; |
sgrove | 0:116ff1f909ba | 51 | wait(0.2); |
sgrove | 0:116ff1f909ba | 52 | myled = 0; |
sgrove | 0:116ff1f909ba | 53 | wait(0.2); |
sgrove | 0:116ff1f909ba | 54 | } |
sgrove | 0:116ff1f909ba | 55 | } |