a1eaa6fce86c62aa68e88c2143119fe3ccfa37de
[dmxpainter.git] / src / main.c
1 // http://www.nongnu.org/avr-libc/user-manual/modules.html
2
3 #include "mcu.h"
4
5 #include "dmx.h"
6 #include "tlc.h"
7
8 #include "buffer.h"
9
10
11 // We require GCC 4.x for inlining and stuff.
12 // http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
13 #if __GNUC__ < 4
14 #error GCC 4.x.x required!
15 #endif
16
17 //////////////////////////////////////////
18 // Interrupts
19
20 // INT0:  External int, DMX sync
21 mcu_isr(INT0);
22 // TIMER0:  8-Bit: 4 us for DMX, timeouts
23 mcu_isr(TIMER0_OVF);
24 // USART:  RXD
25 mcu_isr(USART_RXC);
26
27 // TIMER1: 16-Bit: GSCLK
28 mcu_isr(TIMER1_COMPA);
29 // TIMER2:  8-Bit: GS-Refresh-Timer
30 mcu_isr(TIMER2_COMP);
31
32
33 //////////////////////////////////////////
34
35 /**
36  * 
37  */
38 void main_init(void)
39 {
40   // Disable interrupts while initializing.
41   cli();
42   mcu_init();
43
44   // Initialize buffer.
45   buffer_init();
46
47   // Initialize peripherals.
48   dmx_init();
49   tlc_init();
50
51   // Enable interrupts again.
52   sei();
53 }
54
55 /**
56  *
57  */
58 void main_start(void)
59 {
60   // Signal that we're running.
61   pin_on(PIN_LED_ON);
62 }
63
64 /**
65  *
66  */
67 void main_loop(void)
68 {
69   // Forever...
70   while (1) {
71     // FIXME
72     tlc_set_data_done();
73     tlc_wait_for_data();
74   }
75 }
76
77 int main(void)
78 {
79   // Initialize modules.
80   main_init();
81   // Start modules if necessary.
82   main_start();
83   // Gogogo!
84   main_loop();
85   // Never reached.
86   return 0;
87 }