Fix timer1 and timer3 for ATMega1281 (untested).
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 15 Jan 2009 18:02:08 +0000 (18:02 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 15 Jan 2009 18:02:08 +0000 (18:02 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@2175 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/avr/drv/timer_avr.c

index 291f205d9115b27ad72e9152ab3de713c725cb46..4920934756467a5b271be1c04610ce0cb80060b4 100644 (file)
 
 #if CPU_AVR_ATMEGA1281 || CPU_AVR_ATMEGA168
        #define REG_TIFR0 TIFR0
+       #define REG_TIFR1 TIFR1
        #define REG_TIFR2 TIFR2
+       #if CPU_AVR_ATMEGA1281
+               #define REG_TIFR3 TIFR3
+       #endif
 
        #define REG_TIMSK0 TIMSK0
+       #define REG_TIMSK1 TIMSK1
        #define REG_TIMSK2 TIMSK2
+       #if CPU_AVR_ATMEGA1281
+               #define REG_TIMSK3 TIMSK3
+       #endif
 
        #define REG_TCCR0A TCCR0A
        #define REG_TCCR0B TCCR0B
        #define BIT_OCIE2A OCIE2A
 #else
        #define REG_TIFR0 TIFR
+       #define REG_TIFR1 TIFR
        #define REG_TIFR2 TIFR
 
        #define REG_TIMSK0 TIMSK
+       #define REG_TIMSK1 TIMSK
        #define REG_TIMSK2 TIMSK
+       #define REG_TIMSK3 ETIMSK
 
        #define REG_TCCR0A TCCR0
        #define REG_TCCR0B TCCR0
                IRQ_SAVE_DISABLE(flags);
 
                /* Reset Timer overflow flag */
-               REG_TIFR0 |= BV(TOV1);
+               REG_TIFR1 |= BV(TOV1);
 
                /* Fast PWM mode, 9 bit, 24 kHz, no prescaling. */
                #if (TIMER_PRESCALER == 1) && (TIMER_HW_BITS == 9)
                TCNT1 = 0x00;         /* initialization of Timer/Counter */
 
                /* Enable timer interrupt: Timer/Counter1 Overflow */
-               REG_TIMSK0 |= BV(TOIE1);
+               REG_TIMSK1 |= BV(TOIE1);
 
                IRQ_RESTORE(flags);
        }
                IRQ_SAVE_DISABLE(flags);
 
                /* Reset Timer overflow flag */
-               TIFR |= BV(TOV3);
+               REG_TIFR3 |= BV(TOV3);
 
                /* Fast PWM mode, 9 bit, 24 kHz, no prescaling. */
                #if (TIMER_PRESCALER == 1) && (TIMER_HW_BITS == 9)
                        #error Unsupported value of TIMER_PRESCALER or TIMER_HW_BITS
                #endif
 
-               TCNT3 = 0x00;         /* initialization of Timer/Counter */
+               /* initialization of Timer/Counter */
+               TCNT3 = 0x00;
 
                /* Enable timer interrupt: Timer/Counter3 Overflow */
-               /* ATTENTION! TOIE3 is only on ETIMSK, not TIMSK */
-               ETIMSK |= BV(TOIE3);
+               REG_TIMSK3 = |= BV(TOIE3);
 
                IRQ_RESTORE(flags);
        }