--- a/blackbox/lowlevel.c Mon Nov 14 21:15:11 2011 +0100 +++ b/blackbox/lowlevel.c Mon Nov 14 21:38:00 2011 +0100 @@ -3,7 +3,9 @@ #include <util/delay.h> #include "stdint.h" #include "main.h" +#include "driver/adc.h" #include "driver/rs232.h" +#include "lowlevel.h" void LED(uint8_t num, uint8_t state) { switch (num) { @@ -39,6 +41,64 @@ } } +void init_hardware(void) { + RS232_init(); // initialize RS485 interface + RS232_puts_p(PSTR("CARRERA beta loading\n")); + + initADC(); + + // set LED output + DDR(LED1_PORT) |= _BV(LED1); + DDR(LED2_PORT) |= _BV(LED2); + DDR(LED3_PORT) |= _BV(LED3); + DDR(LED4_PORT) |= _BV(LED4); + DDR(LED5_PORT) |= _BV(LED5); + + // set Controller Input Pull-UPs + CONTROLLER_PORT |= (_BV(CONTROLLER1_SW) | _BV(CONTROLLER2_SW) | _BV(CONTROLLER3_SW) | _BV(CONTROLLER4_SW)); + + // switch pull-ups + SW_FUEL_PORT |= _BV(SW_FUEL); + + //RAIL_DETECT_PORT |= _BV(RAIL_DETECT); // enable internal pull-up + DDR(RAIL_POWER_PORT) |= _BV(RAIL_POWER); + + + LED(1, 1); _delay_ms(50); + LED(2, 1); _delay_ms(50); + LED(3, 1); _delay_ms(50); + LED(4, 1); _delay_ms(50); + LED(5, 1); _delay_ms(50); + LED(1, 0); _delay_ms(50); + LED(2, 0); _delay_ms(50); + LED(3, 0); _delay_ms(50); + LED(4, 0); _delay_ms(50); + LED(5, 0); _delay_ms(50); + + //TCCR0 = (1<<CS01); //divide by 8 + + + // setup data bit timer + TCCR2 = (1<<CS21); //divide by 8 + TCCR2 |= (1<<WGM21); // set compare match + OCR2 = TIMER2_50US; + TIMSK |= 1<<OCIE2; //enable timer2 interrupt + + // setup data packet timer + //TCCR1A = (1<<COM1A1); + TCCR1B = (1<<CS11); //divide by 8 + TCCR1B |= (1<<WGM12); // set compare match + //TCCR1B = (1<<CS11) | (1<<CS10); //divide by 64 + //TCNT1 = TIMER_7500NS; + OCR1A = TIMER1_7500NS; + TIMSK |= 1<<OCIE1A; //enable timer1 interrupt + + RS232_puts_p(PSTR("INIT OK\n")); + +} + + + void check_rails_shortcut(void) { // check for short circuit on the rails if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) {