]> cloudbase.mooo.com Git - irmp.git/blame - irsndmain.c
Version 1.1.1: converted newlines
[irmp.git] / irsndmain.c
CommitLineData
4225a882 1/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
2 * irsndmain.c - demo main module to test irmp decoder\r
3 *\r
4 * Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de\r
5 *\r
6 * ATMEGA88 @ 8 MHz\r
7 *\r
8 * Fuses: lfuse: 0xE2 hfuse: 0xDC efuse: 0xF9\r
9 *\r
10 * This program is free software; you can redistribute it and/or modify\r
11 * it under the terms of the GNU General Public License as published by\r
12 * the Free Software Foundation; either version 2 of the License, or\r
13 * (at your option) any later version.\r
14 *---------------------------------------------------------------------------------------------------------------------------------------------------\r
15 */\r
16\r
17/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
18 * uncomment this for codevision compiler:\r
19 *---------------------------------------------------------------------------------------------------------------------------------------------------\r
20 */\r
21// #define CODEVISION // to use Codevision Compiler instead of gcc\r
22\r
23#ifdef CODEVISION\r
24#include <mega88.h>\r
25#include <stdio.h>\r
26#define uint8_t unsigned char\r
27#define uint16_t unsigned int\r
28#define F_CPU 8000000 // change for Codevision here, if you use WinAVR, use Project -> Configuration Options instead\r
29\r
30// register values from datasheet for ATMega88\r
31#define OCIE1A 1\r
32#define WGM12 3\r
33#define CS10 0\r
34#define UDRE0 5\r
35#define TXEN0 3\r
36\r
37#include "irmp.h"\r
38#include "isnd.h"\r
39#include "irmp.c"\r
40#include "isnd.c"\r
41\r
42#else // gcc compiler\r
43\r
44#include <inttypes.h>\r
45#include <avr/io.h>\r
46#include <util/delay.h>\r
47#include <avr/pgmspace.h>\r
48#include <avr/interrupt.h>\r
49#include "irmp.h"\r
50#include "irsnd.h"\r
51\r
52#endif // CODEVISION\r
53\r
54#ifndef F_CPU\r
55#error F_CPU unkown\r
56#endif\r
57\r
58void\r
59timer_init (void)\r
60{\r
61#ifdef CODEVISION\r
62 OCR1AH = ((F_CPU / F_INTERRUPTS) >> 8) & 0xFF; // compare value: 1/10000 of CPU frequency (upper byte)\r
63 OCR1AL = ((F_CPU / F_INTERRUPTS) - 1) & 0xFF; // compare value: 1/10000 of CPU frequency (lower byte)\r
64#else // gcc\r
65 OCR1A = (F_CPU / F_INTERRUPTS) - 1; // compare value: 1/10000 of CPU frequency\r
66#endif // CODEVISION\r
67 TCCR1B = (1 << WGM12) | (1 << CS10); // switch CTC Mode on, set prescaler to 1\r
68\r
69#if defined (__AVR_ATmega8__) || defined (__AVR_ATmega16__) || defined (__AVR_ATmega32__) || defined (__AVR_ATmega64__) || defined (__AVR_ATmega162__)\r
70 TIMSK = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare (use TIMSK for ATMEGA162)\r
71#else\r
72 TIMSK1 = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare (use TIMSK for ATMEGA162)\r
73#endif // __AVR...\r
74}\r
75\r
76/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
77 * timer 1 compare handler, called every 1/10000 sec\r
78 *---------------------------------------------------------------------------------------------------------------------------------------------------\r
79 */\r
80// Timer 1 output compare A interrupt service routine\r
81#ifdef CODEVISION\r
82interrupt [TIM1_COMPA] void timer1_compa_isr(void)\r
83#else // CODEVISION\r
84ISR(TIMER1_COMPA_vect)\r
85#endif // CODEVISION\r
86{\r
87 (void) irsnd_ISR(); // call irsnd ISR\r
88 // call other timer interrupt routines...\r
89}\r
90\r
91/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
92 * MAIN: main routine\r
93 *---------------------------------------------------------------------------------------------------------------------------------------------------\r
94 */\r
95#ifdef CODEVISION\r
96// This is the main routine if you use Codevision C Compiler\r
97void\r
98main (void)\r
99{\r
100 IRMP_DATA irmp_data;\r
101\r
102 #pragma optsize-\r
103 // crystal oscillator division factor: 1\r
104 CLKPR=0x80;\r
105 CLKPR=0x00;\r
106 #ifdef _OPTIMIZE_SIZE_\r
107 #pragma optsize+\r
108 #endif\r
109\r
110 irsnd_init(); // initialize irsnd\r
111 timer_init(); // initialize timer\r
112 #asm("sei"); // enable interrupts\r
113\r
114 for (;;)\r
115 {\r
116 irmp_data.protocol = IRMP_NEC_PROTOCOL;\r
117 irmp_data.address = 0x00FF;\r
118 irmp_data.command = 0x0001;\r
119\r
120 irsnd_send_data (&irmp_data);\r
121 _delay_ms (1000);\r
122 }\r
123}\r
124\r
125#else // gcc\r
126\r
127// This is the main routine if you use GCC Compiler\r
128int\r
129main (void)\r
130{\r
131 IRMP_DATA irmp_data;\r
132\r
133 irsnd_init(); // initialize irsnd\r
134 timer_init(); // initialize timer\r
135 sei (); // enable interrupts\r
136\r
137 for (;;)\r
138 {\r
139 irmp_data.protocol = IRMP_NEC_PROTOCOL;\r
140 irmp_data.address = 0x00FF;\r
141 irmp_data.command = 0x0001;\r
142\r
143 irsnd_send_data (&irmp_data);\r
144 _delay_ms (1000);\r
145 }\r
146}\r
147\r
148#endif // CODEVISION / gcc\r