Sam Grove
/
Re-InvokeISP
Testing documentation
main.cpp@1:e835875b325c, 2011-04-18 (annotated)
- Committer:
- sgrove
- Date:
- Mon Apr 18 04:09:29 2011 +0000
- Revision:
- 1:e835875b325c
- Parent:
- 0:116ff1f909ba
- Child:
- 2:60a7f968d4ad
r2
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 | 1:e835875b325c | 3 | //! using a led |
sgrove | 0:116ff1f909ba | 4 | DigitalOut myled(LED1); |
sgrove | 0:116ff1f909ba | 5 | |
sgrove | 1:e835875b325c | 6 | /** |
sgrove | 1:e835875b325c | 7 | * @param[in] - none |
sgrove | 1:e835875b325c | 8 | * @return - none |
sgrove | 1:e835875b325c | 9 | */ |
sgrove | 0:116ff1f909ba | 10 | void DisconnectPLL0(){ |
sgrove | 0:116ff1f909ba | 11 | // good practice to disable before feeding |
sgrove | 0:116ff1f909ba | 12 | __disable_irq(); |
sgrove | 0:116ff1f909ba | 13 | // disconnect |
sgrove | 0:116ff1f909ba | 14 | LPC_SC->PLL0CON = 0x1; |
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<<25)); |
sgrove | 0:116ff1f909ba | 18 | // power down |
sgrove | 0:116ff1f909ba | 19 | LPC_SC->PLL0CON = 0x0; |
sgrove | 0:116ff1f909ba | 20 | LPC_SC->PLL0FEED = 0xAA; |
sgrove | 0:116ff1f909ba | 21 | LPC_SC->PLL0FEED = 0x55; |
sgrove | 0:116ff1f909ba | 22 | while (LPC_SC->PLL0STAT&(1<<24)); |
sgrove | 0:116ff1f909ba | 23 | // This is the default flash read/write setting for IRC |
sgrove | 0:116ff1f909ba | 24 | LPC_SC->FLASHCFG &= 0x0fff; |
sgrove | 0:116ff1f909ba | 25 | LPC_SC->FLASHCFG |= 0x5000; |
sgrove | 0:116ff1f909ba | 26 | LPC_SC->CCLKCFG = 0x0; |
sgrove | 0:116ff1f909ba | 27 | // Select the IRC as clk |
sgrove | 0:116ff1f909ba | 28 | LPC_SC->CLKSRCSEL = 0x00; |
sgrove | 0:116ff1f909ba | 29 | // not using XTAL anymore |
sgrove | 0:116ff1f909ba | 30 | LPC_SC->SCS = 0x00; |
sgrove | 0:116ff1f909ba | 31 | } |
sgrove | 0:116ff1f909ba | 32 | |
sgrove | 1:e835875b325c | 33 | //! IAP address |
sgrove | 0:116ff1f909ba | 34 | #define IAP_LOCATION 0x1FFF1FF1 |
sgrove | 1:e835875b325c | 35 | //! variable for command and result |
sgrove | 0:116ff1f909ba | 36 | unsigned int command[5]; |
sgrove | 0:116ff1f909ba | 37 | unsigned int result[5]; |
sgrove | 1:e835875b325c | 38 | //! function pointer with 2 array parameters |
sgrove | 0:116ff1f909ba | 39 | typedef void (*IAP)(unsigned int[5],unsigned int [5]); |
sgrove | 1:e835875b325c | 40 | //! declaration of the fptr. |
sgrove | 0:116ff1f909ba | 41 | IAP iap_entry = (IAP)IAP_LOCATION; |
sgrove | 0:116ff1f909ba | 42 | |
sgrove | 1:e835875b325c | 43 | |
sgrove | 1:e835875b325c | 44 | /** Servo control class, based on a PwmOut |
sgrove | 1:e835875b325c | 45 | * |
sgrove | 1:e835875b325c | 46 | * Example: |
sgrove | 1:e835875b325c | 47 | * @code |
sgrove | 1:e835875b325c | 48 | * // Continuously sweep the servo through it's full range |
sgrove | 1:e835875b325c | 49 | * #include "mbed.h" |
sgrove | 1:e835875b325c | 50 | * #include "Servo.h" |
sgrove | 1:e835875b325c | 51 | * |
sgrove | 1:e835875b325c | 52 | * Servo myservo(p21); |
sgrove | 1:e835875b325c | 53 | * |
sgrove | 1:e835875b325c | 54 | * int main() { |
sgrove | 1:e835875b325c | 55 | * while(1) { |
sgrove | 1:e835875b325c | 56 | * for(int i=0; i<100; i++) { |
sgrove | 1:e835875b325c | 57 | * myservo = i/100.0; |
sgrove | 1:e835875b325c | 58 | * wait(0.01); |
sgrove | 1:e835875b325c | 59 | * } |
sgrove | 1:e835875b325c | 60 | * for(int i=100; i>0; i--) { |
sgrove | 1:e835875b325c | 61 | * myservo = i/100.0; |
sgrove | 1:e835875b325c | 62 | * wait(0.01); |
sgrove | 1:e835875b325c | 63 | * } |
sgrove | 1:e835875b325c | 64 | * } |
sgrove | 1:e835875b325c | 65 | * } |
sgrove | 1:e835875b325c | 66 | * @endcode |
sgrove | 1:e835875b325c | 67 | */ |
sgrove | 1:e835875b325c | 68 | /** Create a servo object connected to the specified PwmOut pin |
sgrove | 1:e835875b325c | 69 | * |
sgrove | 1:e835875b325c | 70 | * @param pin PwmOut pin to connect to |
sgrove | 1:e835875b325c | 71 | */ |
sgrove | 1:e835875b325c | 72 | |
sgrove | 1:e835875b325c | 73 | /** A brief description of the function foo |
sgrove | 1:e835875b325c | 74 | * |
sgrove | 1:e835875b325c | 75 | * More details about the function goes here |
sgrove | 1:e835875b325c | 76 | * and here |
sgrove | 1:e835875b325c | 77 | * |
sgrove | 1:e835875b325c | 78 | * @param x a variable used by foo |
sgrove | 1:e835875b325c | 79 | * @returns something magical done with x |
sgrove | 1:e835875b325c | 80 | */ |
sgrove | 1:e835875b325c | 81 | int foo(int x) {...} |
sgrove | 1:e835875b325c | 82 | |
sgrove | 0:116ff1f909ba | 83 | int main(){ |
sgrove | 0:116ff1f909ba | 84 | |
sgrove | 1:e835875b325c | 85 | //! change clk to 4MHz - see below |
sgrove | 0:116ff1f909ba | 86 | DisconnectPLL0(); |
sgrove | 1:e835875b325c | 87 | //! stop all ISRs |
sgrove | 0:116ff1f909ba | 88 | __disable_irq(); |
sgrove | 1:e835875b325c | 89 | //!make IAP call |
sgrove | 0:116ff1f909ba | 90 | command[0] = 57; |
sgrove | 0:116ff1f909ba | 91 | iap_entry(command, result); |
sgrove | 0:116ff1f909ba | 92 | |
sgrove | 1:e835875b325c | 93 | //! This should never get executed |
sgrove | 0:116ff1f909ba | 94 | while(1) { |
sgrove | 0:116ff1f909ba | 95 | myled = 1; |
sgrove | 0:116ff1f909ba | 96 | wait(0.2); |
sgrove | 0:116ff1f909ba | 97 | myled = 0; |
sgrove | 0:116ff1f909ba | 98 | wait(0.2); |
sgrove | 0:116ff1f909ba | 99 | } |
sgrove | 0:116ff1f909ba | 100 | } |