diff options
author | Martino Facchin <facchinm@users.noreply.github.com> | 2015-04-14 08:36:12 +0100 |
---|---|---|
committer | Martino Facchin <facchinm@users.noreply.github.com> | 2015-04-14 08:36:12 +0100 |
commit | 2dada5abb839d7ec994b21aeed1b2242471eb902 (patch) | |
tree | 8561f281a7a8697775bf14cf4528064858679bf5 | |
parent | 0d3ba46b486cacbaa060a4010d0e2552288ccf63 (diff) | |
parent | d27eb7e1c1697715e8a800d4eca48ba1c1e6e867 (diff) |
Merge pull request #2961 from jan-r/issue292-fix
Tone: fix for ATmega8
-rw-r--r-- | cores/arduino/Tone.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/cores/arduino/Tone.cpp b/cores/arduino/Tone.cpp index 9bb6fe7..ad09573 100644 --- a/cores/arduino/Tone.cpp +++ b/cores/arduino/Tone.cpp @@ -30,6 +30,7 @@ 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) *************************************************/ #include <avr/interrupt.h> @@ -296,13 +297,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 +390,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 +398,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 +455,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 } |