Gary Richardson
/
Counter
Use of two timers to implement a counter of an external signal
main.cpp@0:e619b6823668, 2014-01-28 (annotated)
- Committer:
- garyr
- Date:
- Tue Jan 28 17:01:19 2014 +0000
- Revision:
- 0:e619b6823668
First working version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
garyr | 0:e619b6823668 | 1 | |
garyr | 0:e619b6823668 | 2 | #include "mbed.h" |
garyr | 0:e619b6823668 | 3 | #include "Timer2.h" |
garyr | 0:e619b6823668 | 4 | #include "Timer3.h" |
garyr | 0:e619b6823668 | 5 | /* |
garyr | 0:e619b6823668 | 6 | Connect P8 (MAT2.0) to P16 (CAP3.1) |
garyr | 0:e619b6823668 | 7 | Connect external input on P15 (CAP3.0) to PWM output on P26 |
garyr | 0:e619b6823668 | 8 | */ |
garyr | 0:e619b6823668 | 9 | Serial pc(USBTX, USBRX); // tx, rx |
garyr | 0:e619b6823668 | 10 | DigitalOut out1(p5), out2(p6); |
garyr | 0:e619b6823668 | 11 | PwmOut pw(p26); |
garyr | 0:e619b6823668 | 12 | |
garyr | 0:e619b6823668 | 13 | int done; |
garyr | 0:e619b6823668 | 14 | void Timer3Isr(int count) |
garyr | 0:e619b6823668 | 15 | { |
garyr | 0:e619b6823668 | 16 | pc.printf("count=%d\n\r", count); |
garyr | 0:e619b6823668 | 17 | LPC_TIM2->TCR = 2; // Disable Timer2 |
garyr | 0:e619b6823668 | 18 | done = 1; |
garyr | 0:e619b6823668 | 19 | } |
garyr | 0:e619b6823668 | 20 | |
garyr | 0:e619b6823668 | 21 | void Timer2Isr(void) |
garyr | 0:e619b6823668 | 22 | { |
garyr | 0:e619b6823668 | 23 | out1 = !out1; |
garyr | 0:e619b6823668 | 24 | } |
garyr | 0:e619b6823668 | 25 | |
garyr | 0:e619b6823668 | 26 | int main(void) |
garyr | 0:e619b6823668 | 27 | { |
garyr | 0:e619b6823668 | 28 | int prescale; // Units are 0.1 second. |
garyr | 0:e619b6823668 | 29 | |
garyr | 0:e619b6823668 | 30 | out1 = 0; |
garyr | 0:e619b6823668 | 31 | out2 = 0; |
garyr | 0:e619b6823668 | 32 | pw.period_us(10); |
garyr | 0:e619b6823668 | 33 | pw.write(0.5); |
garyr | 0:e619b6823668 | 34 | Timer3_init(Timer3Isr); |
garyr | 0:e619b6823668 | 35 | Timer2_init(Timer2Isr); |
garyr | 0:e619b6823668 | 36 | while(1) |
garyr | 0:e619b6823668 | 37 | { |
garyr | 0:e619b6823668 | 38 | pc.printf("PS: "); |
garyr | 0:e619b6823668 | 39 | pc.scanf("%d", &prescale); // Interval is <prescale>+1 * 0.1 second. |
garyr | 0:e619b6823668 | 40 | pc.printf("%d\n\r", prescale); |
garyr | 0:e619b6823668 | 41 | done = 0; |
garyr | 0:e619b6823668 | 42 | Timer2_start(prescale); |
garyr | 0:e619b6823668 | 43 | while (!done) |
garyr | 0:e619b6823668 | 44 | out2 = !out2; |
garyr | 0:e619b6823668 | 45 | } |
garyr | 0:e619b6823668 | 46 | } |
garyr | 0:e619b6823668 | 47 | |
garyr | 0:e619b6823668 | 48 |