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