From 4caca675ff2d3763273c238a11d16496155d415e Mon Sep 17 00:00:00 2001 From: jan-r Date: Sat, 4 Apr 2015 11:02:53 +0200 Subject: [PATCH] Fixed problem with interrupt enable/disable on ATmega8 Previously, when enabling or disabling interrupts on the ATmega8, the whole TIMSK register was overwritten. This disables all other timer interrupts (for Timer0 and Timer2). The fix takes care of that by selectively enabling/disabling the required OCIE1A flag. --- IRremoteInt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRremoteInt.h b/IRremoteInt.h index 674ee8d..32281f8 100644 --- a/IRremoteInt.h +++ b/IRremoteInt.h @@ -303,8 +303,8 @@ extern volatile irparams_t irparams; #define TIMER_ENABLE_PWM (TCCR1A |= _BV(COM1A1)) #define TIMER_DISABLE_PWM (TCCR1A &= ~(_BV(COM1A1))) #if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__) - #define TIMER_ENABLE_INTR (TIMSK = _BV(OCIE1A)) - #define TIMER_DISABLE_INTR (TIMSK = 0) + #define TIMER_ENABLE_INTR (TIMSK |= _BV(OCIE1A)) + #define TIMER_DISABLE_INTR (TIMSK &= ~_BV(OCIE1A)) #else #define TIMER_ENABLE_INTR (TIMSK1 = _BV(OCIE1A)) #define TIMER_DISABLE_INTR (TIMSK1 = 0)