1 #include <avr/interrupt.h> |
1 #include <avr/interrupt.h> |
2 #include <avr/pgmspace.h> |
2 #include <avr/pgmspace.h> |
3 #include <util/delay.h> |
3 #include <util/delay.h> |
4 #include "stdint.h" |
4 #include "stdint.h" |
5 #include "main.h" |
5 #include "main.h" |
|
6 #include "driver/adc.h" |
6 #include "driver/rs232.h" |
7 #include "driver/rs232.h" |
|
8 #include "lowlevel.h" |
7 |
9 |
8 void LED(uint8_t num, uint8_t state) { |
10 void LED(uint8_t num, uint8_t state) { |
9 switch (num) { |
11 switch (num) { |
10 case 1: switch (state) { |
12 case 1: switch (state) { |
11 case 0: LED1_PORT &= ~_BV(LED1); break; |
13 case 0: LED1_PORT &= ~_BV(LED1); break; |
37 case 2: LED5_PORT ^= _BV(LED5); break; |
39 case 2: LED5_PORT ^= _BV(LED5); break; |
38 } break; |
40 } break; |
39 } |
41 } |
40 } |
42 } |
41 |
43 |
|
44 void init_hardware(void) { |
|
45 RS232_init(); // initialize RS485 interface |
|
46 RS232_puts_p(PSTR("CARRERA beta loading\n")); |
|
47 |
|
48 initADC(); |
|
49 |
|
50 // set LED output |
|
51 DDR(LED1_PORT) |= _BV(LED1); |
|
52 DDR(LED2_PORT) |= _BV(LED2); |
|
53 DDR(LED3_PORT) |= _BV(LED3); |
|
54 DDR(LED4_PORT) |= _BV(LED4); |
|
55 DDR(LED5_PORT) |= _BV(LED5); |
|
56 |
|
57 // set Controller Input Pull-UPs |
|
58 CONTROLLER_PORT |= (_BV(CONTROLLER1_SW) | _BV(CONTROLLER2_SW) | _BV(CONTROLLER3_SW) | _BV(CONTROLLER4_SW)); |
|
59 |
|
60 // switch pull-ups |
|
61 SW_FUEL_PORT |= _BV(SW_FUEL); |
|
62 |
|
63 //RAIL_DETECT_PORT |= _BV(RAIL_DETECT); // enable internal pull-up |
|
64 DDR(RAIL_POWER_PORT) |= _BV(RAIL_POWER); |
|
65 |
|
66 |
|
67 LED(1, 1); _delay_ms(50); |
|
68 LED(2, 1); _delay_ms(50); |
|
69 LED(3, 1); _delay_ms(50); |
|
70 LED(4, 1); _delay_ms(50); |
|
71 LED(5, 1); _delay_ms(50); |
|
72 LED(1, 0); _delay_ms(50); |
|
73 LED(2, 0); _delay_ms(50); |
|
74 LED(3, 0); _delay_ms(50); |
|
75 LED(4, 0); _delay_ms(50); |
|
76 LED(5, 0); _delay_ms(50); |
|
77 |
|
78 //TCCR0 = (1<<CS01); //divide by 8 |
|
79 |
|
80 |
|
81 // setup data bit timer |
|
82 TCCR2 = (1<<CS21); //divide by 8 |
|
83 TCCR2 |= (1<<WGM21); // set compare match |
|
84 OCR2 = TIMER2_50US; |
|
85 TIMSK |= 1<<OCIE2; //enable timer2 interrupt |
|
86 |
|
87 // setup data packet timer |
|
88 //TCCR1A = (1<<COM1A1); |
|
89 TCCR1B = (1<<CS11); //divide by 8 |
|
90 TCCR1B |= (1<<WGM12); // set compare match |
|
91 //TCCR1B = (1<<CS11) | (1<<CS10); //divide by 64 |
|
92 //TCNT1 = TIMER_7500NS; |
|
93 OCR1A = TIMER1_7500NS; |
|
94 TIMSK |= 1<<OCIE1A; //enable timer1 interrupt |
|
95 |
|
96 RS232_puts_p(PSTR("INIT OK\n")); |
|
97 |
|
98 } |
|
99 |
|
100 |
|
101 |
42 void check_rails_shortcut(void) { |
102 void check_rails_shortcut(void) { |
43 // check for short circuit on the rails |
103 // check for short circuit on the rails |
44 if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) { |
104 if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) { |
45 _delay_ms(1); |
105 _delay_ms(1); |
46 if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) { |
106 if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) { |