blackbox/lowlevel.c

changeset 3
1a0ef40ef458
parent 2
6c59b4293fa9
child 4
58529e14c45c
equal deleted inserted replaced
2:6c59b4293fa9 3:1a0ef40ef458
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) {

mercurial