diff --git a/cpu/atmega_common/periph/timer.c b/cpu/atmega_common/periph/timer.c index 4a0065fde3b5392dac5903b4a37b24bb883d922d..cc420fd85153b122829520a3d1b117439907466d 100644 --- a/cpu/atmega_common/periph/timer.c +++ b/cpu/atmega_common/periph/timer.c @@ -83,6 +83,21 @@ static ctx_t ctx[] = { */ int timer_init(tim_t tim, unsigned long freq, timer_cb_t cb, void *arg) { +/* + * A debug pin can be used to probe timer interrupts with an oscilloscope or + * other time measurement equipment. Thus, determine when an interrupt occurs + * and how long the timer ISR takes. + * The pin should be defined in the makefile as follows: + * CFLAGS += -DDEBUG_TIMER_PORT=PORTF -DDEBUG_TIMER_DDR=DDRF \ + * -DDEBUG_TIMER_PIN=PORTF4 + */ +#if defined(DEBUG_TIMER_PORT) + DEBUG_TIMER_DDR |= (1 << DEBUG_TIMER_PIN); + DEBUG_TIMER_PORT &= ~(1 << DEBUG_TIMER_PIN); + DEBUG("Debug Pin: DDR 0x%02x Port 0x%02x Pin 0x%02x\n", + &DEBUG_TIMER_DDR , &DEBUG_TIMER_PORT,(1<<DEBUG_TIMER_PIN)); +#endif + DEBUG("timer.c: freq = %ld\n", freq); uint8_t pre = 0; @@ -162,11 +177,19 @@ void timer_start(tim_t tim) #ifdef TIMER_NUMOF static inline void _isr(tim_t tim, int chan) { +#if defined(DEBUG_TIMER_PORT) + DEBUG_TIMER_PORT |= (1 << DEBUG_TIMER_PIN); +#endif + __enter_isr(); *ctx[tim].mask &= ~(1 << (chan + OCIE1A)); ctx[tim].cb(ctx[tim].arg, chan); +#if defined(DEBUG_TIMER_PORT) + DEBUG_TIMER_PORT &= ~(1 << DEBUG_TIMER_PIN); +#endif + __exit_isr(); } #endif