X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Favr%2Fdrv%2Ftimer_avr.c;h=f20c913554712286e515a092f043abc1f0a16b39;hb=de804c94d5c897a2d93584a852a91df531dac07e;hp=4fd82f53e9b888b06a03ea58c38b840592fae312;hpb=345f93de1963f49bdb194d2b06c8c5d7ba0a3e5f;p=bertos.git diff --git a/bertos/cpu/avr/drv/timer_avr.c b/bertos/cpu/avr/drv/timer_avr.c index 4fd82f53..f20c9135 100644 --- a/bertos/cpu/avr/drv/timer_avr.c +++ b/bertos/cpu/avr/drv/timer_avr.c @@ -32,10 +32,14 @@ * * \version $Id$ * - * \author Bernardo Innocenti + * \author Bernie Innocenti * \author Francesco Sacchi * * \brief Low-level timer module for AVR (implementation). + * + * This module is automatically included so no need to include + * in test list. + * notest: avr */ #include @@ -83,13 +87,21 @@ #define BIT_OCIE2A OCIE2 #endif +#if CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA103 + /* These ATMega have different prescaler options. */ + #define TIMER0_PRESCALER_64 BV(CS02) + #define TIMER2_PRESCALER_64 (BV(CS21) | BV(CS20)) +#else + #define TIMER0_PRESCALER_64 (BV(CS01) | BV(CS00)) + #define TIMER2_PRESCALER_64 BV(CS22) +#endif /** HW dependent timer initialization */ #if (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE0) static void timer_hw_init(void) { - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); /* Reset Timer flags */ @@ -99,7 +111,7 @@ ASSR = 0x00; /* Internal system clock */ TCCR0 = BV(WGM01) /* Clear on Compare match */ #if TIMER_PRESCALER == 64 - | BV(CS02) + | TIMER0_PRESCALER_64 #else #error Unsupported value of TIMER_PRESCALER #endif @@ -123,7 +135,7 @@ static void timer_hw_init(void) { - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); /* Reset Timer overflow flag */ @@ -161,7 +173,7 @@ #elif (CONFIG_TIMER == TIMER_ON_OUTPUT_COMPARE2) static void timer_hw_init(void) { - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); /* Reset Timer flags */ @@ -173,12 +185,7 @@ REG_TCCR2A = BV(WGM21); #if TIMER_PRESCALER == 64 - #if CPU_AVR_ATMEGA1281 || CPU_AVR_ATMEGA168 - // ATMega1281 & ATMega168 have undocumented differences in timer2 prescaler! - REG_TCCR2B |= BV(CS22); - #else - REG_TCCR2B |= BV(CS21) | BV(CS20); - #endif + REG_TCCR2B |= TIMER2_PRESCALER_64; #else #error Unsupported value of TIMER_PRESCALER #endif @@ -203,7 +210,7 @@ static void timer_hw_init(void) { - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); /* Reset Timer overflow flag */