aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/Tone.cpp
diff options
context:
space:
mode:
authorMartino Facchin <facchinm@users.noreply.github.com>2015-04-14 08:36:12 +0100
committerMartino Facchin <facchinm@users.noreply.github.com>2015-04-14 08:36:12 +0100
commit2dada5abb839d7ec994b21aeed1b2242471eb902 (patch)
tree8561f281a7a8697775bf14cf4528064858679bf5 /cores/arduino/Tone.cpp
parent0d3ba46b486cacbaa060a4010d0e2552288ccf63 (diff)
parentd27eb7e1c1697715e8a800d4eca48ba1c1e6e867 (diff)
Merge pull request #2961 from jan-r/issue292-fix
Tone: fix for ATmega8
Diffstat (limited to 'cores/arduino/Tone.cpp')
-rw-r--r--cores/arduino/Tone.cpp21
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
}