Files
@ e2403547a6c7
Branch filter:
Location: seniordesign-firmware/slave/slave/modules.c
e2403547a6c7
2.6 KiB
text/plain
merge
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | /*
* modules.c
*
* Created: 11/9/2012 11:44:22 AM
* Author: kripperger
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "config.h"
#include <util/delay.h>
#include "modules.h"
#include "lib/spi.h"
#include "lib/i2c.h"
#include "lib/sensors.h"
void modules_setup(uint8_t id)
{
switch(id)
{
case 0:
modules_generic_setup();
break;
case 1:
modules_sensors_setup();
break;
case 2:
modules_geiger_setup();
break;
case 3:
modules_cameras_setup();
break;
default:
modules_generic_setup();
break;
}
}
void modules_run(uint8_t id)
{
switch(id)
{
case 0:
modules_generic();
break;
case 1:
modules_sensors();
break;
case 2:
modules_geiger();
break;
case 3:
modules_cameras();
break;
default:
modules_generic();
break;
}
}
void modules_generic_setup()
{
}
void modules_sensors_setup()
{
DESELECT_TEMP;
setup_spi();
sensors_setupPressure();
}
void modules_geiger_setup()
{
// Pin setup
DDRA &= ~(1 << DDA0); // PA0 is an input
// Setup for interrupt input on PA0 (PCINT0)
PCMSK0 |= (1 << PCINT0); // Enable interrupt for PA0
PCICR |= (1 << PCIE0); // Enable ioc section PCIF0
// Setup for interrupt from Timer2
ASSR &= ~(1 << EXCLK); // Disable external clock input (enabling crystal use)
ASSR |= (1 << AS2); // Enable timer2 async mode with an external crystal
_delay_ms(250); // Let external 32KHz crystal stabilize
TCCR2B = 0x05; // Set the prescaler to 128: 32.768kHz / 128 = 1Hz overflow
TIFR2 = 0x01; // Reset timer2 overflow interrupt flag
TIMSK2 = 0x01; // Enable interrupt on overflow
sei(); // Enable all interrupts
}
void modules_cameras_setup()
{
}
void modules_generic()
{
// Gathers data and performs functions for generic daughter board
}
void modules_sensors()
{
// Gathers data and performs functions for sensor daughter board
sensors_readBoardTemp(); //Data Read
sensors_readSpiTemp(); //Data Read
sensors_readPressure(); //Data Read
//sensors_readHumid(); //Data Read
sensors_readLux(); //Data Read
}
void modules_geiger()
{
// No data gatering function needed for geiger daughter board
// This is taken care of in interrupt (See geiger.c)
}
void modules_cameras()
{
// Gathers data and performs functions for cameras daughter board
cameras_readAccelXYZ();
}
|