From e9601a5adada7e6abe80f5d711a8adefc894dfeb Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Tue, 29 Apr 2014 16:38:43 +0200 Subject: speaker: Initial implementation --- speaker.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 speaker.c (limited to 'speaker.c') diff --git a/speaker.c b/speaker.c new file mode 100644 index 0000000..d903c57 --- /dev/null +++ b/speaker.c @@ -0,0 +1,49 @@ +/* speaker control, uses timer2 + */ + +#include +#include +#include + +#include "speaker.h" + +static bool value = false; + +static void speakerSet () { + if (value) { + PORTD = PORTD | (1 << PD6); + } else { + PORTD = PORTD & ~(1 << PD6); + } +} + +ISR(TIMER2_OVF_vect) { + value = !value; + speakerSet (); +} + +void speakerInit () { + /* set PD6 to output */ + DDRD |= (1 << PD6); + /* value is false */ + speakerSet (); +} + +void speakerStart () { + /* reset timer value */ + TCNT2 = 0; + /* set normal mode timer0 */ + TCCR2A = 0; + /* enable overflow interrupt */ + TIMSK2 = (1 << TOIE2); + /* io clock with 1024 prescaler */ + TCCR2B = (TCCR2B & ~((1 << CS21)) | (1 << CS22) | (1 << CS20)); +} + +void speakerStop () { + /* zero clock source */ + TCCR2B = 0; + value = false; + speakerSet (); +} + -- cgit v1.2.3