diff options
Diffstat (limited to 'cores/arduino')
-rw-r--r-- | cores/arduino/Tone.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/cores/arduino/Tone.cpp b/cores/arduino/Tone.cpp index 9bb6fe7..7216219 100644 --- a/cores/arduino/Tone.cpp +++ b/cores/arduino/Tone.cpp @@ -30,6 +30,8 @@ Version Modified By Date Comments 0006 D Mellis 09/12/29 Replaced objects with functions 0007 M Sproul 10/08/29 Changed #ifdefs from cpu to register 0008 S Kanemoto 12/06/22 Fixed for Leonardo by @maris_HY +0009 J Reucker 15/04/10 Issue #292 Fixed problems with ATmega8 (thanks to Pete62) +0010 jipp 15/04/13 added additional define check #2923 *************************************************/ #include <avr/interrupt.h> @@ -151,7 +153,7 @@ static int8_t toneBegin(uint8_t _pin) // whereas 16 bit timers are set to either ck/1 or ck/64 prescalar switch (_timer) { - #if defined(TCCR0A) && defined(TCCR0B) + #if defined(TCCR0A) && defined(TCCR0B) && defined(WGM01) case 0: // 8 bit timer TCCR0A = 0; @@ -296,13 +298,13 @@ void tone(uint8_t _pin, unsigned int frequency, unsigned long duration) #if defined(TCCR0B) if (_timer == 0) { - TCCR0B = prescalarbits; + TCCR0B = (TCCR0B & 0b11111000) | prescalarbits; } else #endif #if defined(TCCR2B) { - TCCR2B = prescalarbits; + TCCR2B = (TCCR2B & 0b11111000) | prescalarbits; } #else { @@ -389,7 +391,7 @@ void tone(uint8_t _pin, unsigned int frequency, unsigned long duration) break; #endif -#if defined(TIMSK3) +#if defined(OCR3A) && defined(TIMSK3) && defined(OCIE3A) case 3: OCR3A = ocr; timer3_toggle_count = toggle_count; @@ -397,7 +399,7 @@ void tone(uint8_t _pin, unsigned int frequency, unsigned long duration) break; #endif -#if defined(TIMSK4) +#if defined(OCR4A) && defined(TIMSK4) && defined(OCIE4A) case 4: OCR4A = ocr; timer4_toggle_count = toggle_count; @@ -454,21 +456,21 @@ void disableTimer(uint8_t _timer) #endif break; -#if defined(TIMSK3) +#if defined(TIMSK3) && defined(OCIE3A) case 3: - TIMSK3 = 0; + bitWrite(TIMSK3, OCIE3A, 0); break; #endif -#if defined(TIMSK4) +#if defined(TIMSK4) && defined(OCIE4A) case 4: - TIMSK4 = 0; + bitWrite(TIMSK4, OCIE4A, 0); break; #endif -#if defined(TIMSK5) +#if defined(TIMSK5) && defined(OCIE5A) case 5: - TIMSK5 = 0; + bitWrite(TIMSK5, OCIE5A, 0); break; #endif } |