1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
/* timer test programm for timer1: 16bit with normal mode, use input capture interrupt */
#include <avr/interrupt.h>
volatile int timer_ticks;
volatile int input_capture;
ISR(TIMER1_OVF_vect) {
timer_ticks++;
}
ISR(TIMER1_CAPT_vect) {
input_capture = ICR1L + (ICR1H << 8);
}
int main(void) {
volatile int tmp;
TCNT1H = 0; /* Timer 1 by CLK/1 */
TCNT1L = 0;
#ifdef POS_EDGE_NO_C
TCCR1B = 0x41; /* 16,384ms on 4MHz, normal mode, input capture on pos edge, no noise canceler */
#endif
#ifdef POS_EDGE_WITH_C
TCCR1B = 0xc1; /* 16,384ms on 4MHz, normal mode, input capture on pos edge, no noise canceler */
#endif
#ifdef NEG_EDGE_NO_C
TCCR1B = 0x01; /* 16,384ms on 4MHz, normal mode, input capture on pos edge, no noise canceler */
#endif
#ifdef NEG_EDGE_WITH_C
TCCR1B = 0x81; /* 16,384ms on 4MHz, normal mode, input capture on pos edge, no noise canceler */
#endif
TIMSK = _BV(TOIE1) + _BV(ICF1);
sei();
input_capture = 0;
tmp = timer_ticks;
while(1) {
if(tmp != timer_ticks) {
tmp = timer_ticks;
}
}
return 0;
}
/* EOF */
|