]> cloudbase.mooo.com Git - irmp.git/blame_incremental - irmp-main-avr.c
Version 3.0.2
[irmp.git] / irmp-main-avr.c
... / ...
CommitLineData
1/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
2 * irmp-main-avr.c - demo main module to test IRMP decoder on AVR\r
3 *\r
4 * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
5 *\r
6 * $Id: irmp-main-avr.c,v 1.2 2016/01/12 21:15:16 fm Exp $\r
7 *\r
8 * This demo module is runnable on AVRs\r
9 *\r
10 * ATMEGA88 @ 8 MHz internal RC Osc with BODLEVEL 4.3V: lfuse: 0xE2 hfuse: 0xDC efuse: 0xF9\r
11 * ATMEGA88 @ 8 MHz external Crystal Osc with BODLEVEL 4.3V: lfuse: 0xFF hfuse: 0xDC efuse: 0xF9\r
12 *\r
13 * This program is free software; you can redistribute it and/or modify\r
14 * it under the terms of the GNU General Public License as published by\r
15 * the Free Software Foundation; either version 2 of the License, or\r
16 * (at your option) any later version.\r
17 *---------------------------------------------------------------------------------------------------------------------------------------------------\r
18 */\r
19\r
20#include "irmp.h"\r
21\r
22#ifndef F_CPU\r
23#error F_CPU unknown\r
24#endif\r
25\r
26static void\r
27timer1_init (void)\r
28{\r
29#if defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45 / ATtiny85:\r
30\r
31#if F_CPU >= 16000000L\r
32 OCR1C = (F_CPU / F_INTERRUPTS / 8) - 1; // compare value: 1/15000 of CPU frequency, presc = 8\r
33 TCCR1 = (1 << CTC1) | (1 << CS12); // switch CTC Mode on, set prescaler to 8\r
34#else\r
35 OCR1C = (F_CPU / F_INTERRUPTS / 4) - 1; // compare value: 1/15000 of CPU frequency, presc = 4\r
36 TCCR1 = (1 << CTC1) | (1 << CS11) | (1 << CS10); // switch CTC Mode on, set prescaler to 4\r
37#endif\r
38\r
39#else // ATmegaXX:\r
40 OCR1A = (F_CPU / F_INTERRUPTS) - 1; // compare value: 1/15000 of CPU frequency\r
41 TCCR1B = (1 << WGM12) | (1 << CS10); // switch CTC Mode on, set prescaler to 1\r
42#endif\r
43\r
44#ifdef TIMSK1\r
45 TIMSK1 = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare\r
46#else\r
47 TIMSK = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare\r
48#endif\r
49}\r
50\r
51#ifdef TIM1_COMPA_vect // ATtiny84\r
52#define COMPA_VECT TIM1_COMPA_vect\r
53#else\r
54#define COMPA_VECT TIMER1_COMPA_vect // ATmega\r
55#endif\r
56\r
57ISR(COMPA_VECT) // Timer1 output compare A interrupt service routine, called every 1/15000 sec\r
58{\r
59 (void) irmp_ISR(); // call irmp ISR\r
60 // call other timer interrupt routines...\r
61}\r
62\r
63int\r
64main (void)\r
65{\r
66 IRMP_DATA irmp_data;\r
67\r
68 irmp_init(); // initialize IRMP\r
69 timer1_init(); // initialize timer1\r
70\r
71 sei (); // enable interrupts\r
72\r
73 for (;;)\r
74 {\r
75 if (irmp_get_data (&irmp_data))\r
76 {\r
77 ; // got an IR message, do something\r
78 }\r
79 }\r
80}\r