Martin Smith
/
ISP_Programming
Program to allow ISP programming of custom LPC1768 ICs on custom PCBs.
main.cpp@0:fab931a2c13b, 2012-02-19 (annotated)
- Committer:
- ms523
- Date:
- Sun Feb 19 10:33:26 2012 +0000
- Revision:
- 0:fab931a2c13b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ms523 | 0:fab931a2c13b | 1 | #include "mbed.h" |
ms523 | 0:fab931a2c13b | 2 | |
ms523 | 0:fab931a2c13b | 3 | DigitalOut led1(LED1); |
ms523 | 0:fab931a2c13b | 4 | DigitalOut led2(LED2); |
ms523 | 0:fab931a2c13b | 5 | |
ms523 | 0:fab931a2c13b | 6 | Serial pc (USBTX,USBRX); |
ms523 | 0:fab931a2c13b | 7 | Serial target (p28,p27); |
ms523 | 0:fab931a2c13b | 8 | |
ms523 | 0:fab931a2c13b | 9 | // We'll drive this low, and then set the as inputs |
ms523 | 0:fab931a2c13b | 10 | // this mimics an open collector style ouput |
ms523 | 0:fab931a2c13b | 11 | DigitalInOut reset (p29); |
ms523 | 0:fab931a2c13b | 12 | DigitalInOut isp (p30); |
ms523 | 0:fab931a2c13b | 13 | |
ms523 | 0:fab931a2c13b | 14 | int main() { |
ms523 | 0:fab931a2c13b | 15 | |
ms523 | 0:fab931a2c13b | 16 | pc.baud(19200); |
ms523 | 0:fab931a2c13b | 17 | target.baud(19200); |
ms523 | 0:fab931a2c13b | 18 | |
ms523 | 0:fab931a2c13b | 19 | // ISP Input with pullup |
ms523 | 0:fab931a2c13b | 20 | isp.input(); |
ms523 | 0:fab931a2c13b | 21 | isp.mode(PullUp); |
ms523 | 0:fab931a2c13b | 22 | |
ms523 | 0:fab931a2c13b | 23 | // pulse reset low |
ms523 | 0:fab931a2c13b | 24 | reset.output(); |
ms523 | 0:fab931a2c13b | 25 | reset = 0; |
ms523 | 0:fab931a2c13b | 26 | wait (0.01); |
ms523 | 0:fab931a2c13b | 27 | |
ms523 | 0:fab931a2c13b | 28 | // reset input, with pullup |
ms523 | 0:fab931a2c13b | 29 | reset.input(); |
ms523 | 0:fab931a2c13b | 30 | reset.mode(PullUp); |
ms523 | 0:fab931a2c13b | 31 | |
ms523 | 0:fab931a2c13b | 32 | while (!pc.readable()) {} |
ms523 | 0:fab931a2c13b | 33 | |
ms523 | 0:fab931a2c13b | 34 | // pull ISP and nReset low |
ms523 | 0:fab931a2c13b | 35 | reset.output(); |
ms523 | 0:fab931a2c13b | 36 | isp.output(); |
ms523 | 0:fab931a2c13b | 37 | reset = 0; |
ms523 | 0:fab931a2c13b | 38 | isp = 0; |
ms523 | 0:fab931a2c13b | 39 | |
ms523 | 0:fab931a2c13b | 40 | wait (0.1); |
ms523 | 0:fab931a2c13b | 41 | |
ms523 | 0:fab931a2c13b | 42 | // Bring target out of reset |
ms523 | 0:fab931a2c13b | 43 | reset.input(); |
ms523 | 0:fab931a2c13b | 44 | reset.mode(PullUp); |
ms523 | 0:fab931a2c13b | 45 | |
ms523 | 0:fab931a2c13b | 46 | wait (0.1); |
ms523 | 0:fab931a2c13b | 47 | |
ms523 | 0:fab931a2c13b | 48 | while (1) { |
ms523 | 0:fab931a2c13b | 49 | |
ms523 | 0:fab931a2c13b | 50 | if (pc.readable()) { |
ms523 | 0:fab931a2c13b | 51 | target.putc(pc.getc()); |
ms523 | 0:fab931a2c13b | 52 | led1 = !led1; |
ms523 | 0:fab931a2c13b | 53 | } |
ms523 | 0:fab931a2c13b | 54 | |
ms523 | 0:fab931a2c13b | 55 | if (target.readable()) { |
ms523 | 0:fab931a2c13b | 56 | pc.putc(target.getc()); |
ms523 | 0:fab931a2c13b | 57 | led2 = !led2; |
ms523 | 0:fab931a2c13b | 58 | } |
ms523 | 0:fab931a2c13b | 59 | |
ms523 | 0:fab931a2c13b | 60 | } |
ms523 | 0:fab931a2c13b | 61 | } |