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 /cores | |
| parent | 0d3ba46b486cacbaa060a4010d0e2552288ccf63 (diff) | |
| parent | d27eb7e1c1697715e8a800d4eca48ba1c1e6e867 (diff) | |
Merge pull request #2961 from jan-r/issue292-fix
Tone: fix for ATmega8
Diffstat (limited to 'cores')
| -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    } | 
