Added OSU Mars Rover 2104 Firmware and Design Files

This commit is contained in:
2015-11-08 21:07:19 -08:00
parent 42f8c55b75
commit a4df0d921d
389 changed files with 226504 additions and 0 deletions

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "AngleRadioRover", "AngleRadioRover.cppproj", "{765D9589-720A-431F-86AA-13FF35F5F0D7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{765D9589-720A-431F-86AA-13FF35F5F0D7}.Debug|AVR.ActiveCfg = Debug|AVR
{765D9589-720A-431F-86AA-13FF35F5F0D7}.Debug|AVR.Build.0 = Debug|AVR
{765D9589-720A-431F-86AA-13FF35F5F0D7}.Release|AVR.ActiveCfg = Release|AVR
{765D9589-720A-431F-86AA-13FF35F5F0D7}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,17 @@
/*
* AngleRadioRover.cpp
*
* Created: 4/23/2014 2:39:18 AM
* Author: corwin
*/
#include <avr/io.h>
int main(void)
{
while(1)
{
//TODO:: Please write your application code
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.2</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC8.CPP</ToolchainName>
<ProjectGuid>{765d9589-720a-431f-86aa-13ff35f5f0d7}</ProjectGuid>
<avrdevice>ATxmega32D4</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>CPP</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>AngleRadioRover</AssemblyName>
<Name>AngleRadioRover</Name>
<RootNamespace>AngleRadioRover</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress />
<UncachedRange />
<OverrideVtorValue />
<BootSegment>2</BootSegment>
<eraseonlaunchrule>1</eraseonlaunchrule>
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.15.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize (-O1)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.optimization.DebugLevel>Default (-g2)</avrgcccpp.compiler.optimization.DebugLevel>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
<avrgcccpp.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcccpp.assembler.debugging.DebugLevel>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="AngleRadioRover.cpp">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@@ -0,0 +1,3 @@
Firmware for all final boards should go here.
All firmware developed using Atmel Studio 6.2.

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "ArmControl", "ArmControl.cppproj", "{1FC16D6E-A0D0-480A-BA3E-D179A1655ABB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1FC16D6E-A0D0-480A-BA3E-D179A1655ABB}.Debug|AVR.ActiveCfg = Debug|AVR
{1FC16D6E-A0D0-480A-BA3E-D179A1655ABB}.Debug|AVR.Build.0 = Debug|AVR
{1FC16D6E-A0D0-480A-BA3E-D179A1655ABB}.Release|AVR.ActiveCfg = Release|AVR
{1FC16D6E-A0D0-480A-BA3E-D179A1655ABB}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,476 @@
/*
* ArmControl.cpp
*
* Created: 4/22/2014 8:54:20 PM
<<<<<<< HEAD
* Author: NICK!
* PA0 is Step2POT
* PA1 is Step1POT
=======
PB3 = Limit 1 = Grip Limit
PA3 = Limit 2 = Grip Close
PA2 = Limit 3 = Rotation Calibration
* Author: Nick
>>>>>>> 034fb4b9ec9e5b3ad4812938ac8725fedd57e6b0
*/
#define F_CPU 32000000UL
#define MAXTIMEOUT 20
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
extern "C" {
#include "avr_compiler.h"
#include "usart_driver.h"
};
#include "Sabertooth.h"
#include "XMegaMacros.h"
#include "adc.h" //Include the ADC functions
#include "motorInfo.h" //Include the motor information
#include "stepperInfo.h"
#include "rotateStepper.h"
#include "Misc.h"
int swap = 0;
USART_data_t USART_PC_Data;
motorInfo lowerAct;
motorInfo upperAct;
stepperInfo gripStepper;
rotateStepper baseStepper;
#define LOWER 0
#define UPPER 1
#define GRIP 0
#define RELEASE 1
#define GRIP_BM_SERIAL (1 << 1)
volatile bool canAcceptPackets = true;
volatile bool IsPacketToParse = false;
volatile unsigned char ARM_Dock_State = 0;
unsigned char ARM_Dock_State_Prev = 0;
volatile bool ShouldRECAL = 0;
volatile unsigned char bufferIndex = 0;
volatile long unsigned int TimeSinceInit = 0;
long unsigned int TimePrevious = 0;
volatile int v = 0;
#define PACKETSIZE 10
volatile char recieveBuffer[PACKETSIZE];
volatile char SendBuffer[100];
enum { HEADER, COMMAND, BASEROTVAL1, BASEROTVAL2, ACT1VAL1, ACT1VAL2, ACT2VAL1, ACT2VAL2, CHECKSUM, TAIL};
enum XMegaStates{
WaitForHost,
ARMControl
} CurrentState = WaitForHost;
void SetupResetTimer(){
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
TCD0.CTRLB = TC_WGMODE_NORMAL_gc;
TCD0.PER = 31250;
TCD0.INTCTRLA = TC_OVFINTLVL_LO_gc;
}
void FlushSerialBuffer(USART_data_t *UsartBuffer){
while(USART_RXBufferData_Available(UsartBuffer)){
USART_RXBuffer_GetByte(UsartBuffer);
}
}
ISR(USARTC0_RXC_vect){
USART_RXComplete(&USART_PC_Data);
if(USART_RXBufferData_Available(&USART_PC_Data)){
recieveBuffer[bufferIndex] = USART_RXBuffer_GetByte(&USART_PC_Data);
bufferIndex++;
}
if((bufferIndex == PACKETSIZE)){
FlushSerialBuffer(&USART_PC_Data);
if(recieveBuffer[8] == (recieveBuffer[1] ^ recieveBuffer[2] ^ recieveBuffer[3] ^ recieveBuffer[4] ^ recieveBuffer[5] ^ recieveBuffer[6] ^ recieveBuffer[7])){
ShouldRECAL = recieveBuffer[1] & 0b00001000;
ARM_Dock_State = recieveBuffer[1] & 0b00000100;
gripStepper.desiredGripState = !(recieveBuffer[1] & GRIP_BM_SERIAL); //0b00000010
baseStepper.desiredPos = (recieveBuffer[3]+recieveBuffer[2]);
lowerAct.setDesired((double(recieveBuffer[5]+recieveBuffer[4]) / double(100)));
upperAct.setDesired((double(recieveBuffer[7]+recieveBuffer[6]) / double(100)));
IsPacketToParse = true;
}else{
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, 255);
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0,0); //Checksum failed
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0,255);
bufferIndex = 0;
}
}
}
ISR(USARTC0_DRE_vect){
USART_DataRegEmpty(&USART_PC_Data);
}
void SetXMEGA32MhzCalibrated(){
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
OSC.CTRL = OSC_RC32MEN_bm; //Enable 32MHz oscillator
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); //Wait for oscillator to be ready
CCP = CCP_IOREG_gc; //Disable register security for clock update
CLK.CTRL = CLK_SCLKSEL_RC32M_gc; //Switch to 32MHz clock
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
OSC.CTRL |= OSC_RC32KEN_bm; //Enable 32Khz oscillator
while(!(OSC.STATUS & OSC_RC32KRDY_bm)); //Wait for oscillator to be ready
OSC.DFLLCTRL &= ~OSC_RC32MCREF_bm; //Set up calibration source to be 32Khz crystal
DFLLRC32M.CTRL |= DFLL_ENABLE_bm; //Enable calibration of 32Mhz oscillator
}
void SetupPCComms(){
PORTC.DIRSET = PIN3_bm; //Sets TX Pin as output
PORTC.DIRCLR = PIN2_bm; //Sets RX pin as input
USART_InterruptDriver_Initialize(&USART_PC_Data, &USARTC0, USART_DREINTLVL_LO_gc); //Initialize USARTC0 as interrupt driven serial and clear it's buffers
USART_Format_Set(USART_PC_Data.usart, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Set the data format of 8 bits, no parity, 1 stop bit
USART_RxdInterruptLevel_Set(USART_PC_Data.usart, USART_RXCINTLVL_LO_gc); //Enable the receive interrupt
USART_Baudrate_Set(&USARTC0, 207 , 0); //Set baudrate to 9600 with 32Mhz system clock
USART_Rx_Enable(USART_PC_Data.usart); //Enable receiving over serial
USART_Tx_Enable(USART_PC_Data.usart); //Enable transmitting over serial
PMIC.CTRL |= PMIC_LOLVLEX_bm; //Enable PMIC interrupt level low (No idea what this does, but is necessary)
}
//Motor 1 is Gripper
//Motor 2 is Base Stepper
void DemInitThingsYouBeenDoing(){
SetXMEGA32MhzCalibrated();
SetupPCComms();
SetupResetTimer();
//Setup Status and Error LEDS
PORTC.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm);
//Setup Outputs
PORTD.DIRSET = (PIN0_bm | PIN1_bm | PIN2_bm | PIN3_bm | PIN4_bm | PIN5_bm | PIN6_bm | PIN7_bm);
PORTA.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm); //First set of M settings
PORTB.DIRSET = (PIN0_bm | PIN1_bm | PIN2_bm); //Second set of M settings
//Setup Inputs
PORTA.DIRCLR = (PIN2_bm); //Rotation Calibration
PORTA.DIRCLR = (PIN3_bm); //Grip Close
PORTB.DIRCLR = (PIN3_bm); //Grip Limit
PORTA.DIRCLR = (PIN4_bm); //'IsRoving' check
PORTA.PIN3CTRL = PORT_OPC_PULLUP_gc;
PORTB.PIN3CTRL = PORT_OPC_PULLUP_gc;
//GRIP STEPPER is MD1
//SETUP "UPPER" DRIVER
MD1_ENABLE();
//Setup Microstepping
MD1_M0_CLR();
MD1_M1_CLR();
MD1_M2_SET();
MD1_DIR_CLR();
MD1_STEP_CLR();
//BASE STEPPER is MD2
//Motor Driver 2 setup
MD2_ENABLE();
//Setup Microstepping
MD2_M0_SET(); //Small amount of micro stepping is sufficient
MD2_M1_SET();
MD2_M2_CLR();
MD2_DIR_CLR();
MD2_STEP_CLR();
sei();
}
void SendStringPC(char *stufftosend){
for(int i = 0 ; stufftosend[i] != '\0' ; i++){
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, stufftosend[i]);
}
}
//DOCUMENTATION NEEDED :D
double abs(double input){
if(input > 0)
return input;
else
return input * -1;
}
//PA1 is lower act
//If a 0 is passed in, then the lower act is read
//0 = LOWER ACT
//1 = UPPER ACT
int smoothADC(int act){
const int smoothFactor = 7;
int count = 0;
for(int i = 0; i < smoothFactor; ++i){
if(act == LOWER){
count += ReadADC(1,1);
}
else if(act == UPPER) {
count += ReadADC(0,1);
}
_delay_ms(1);
}
return count/smoothFactor;
}
//lowerAct upperAct
void checkActPosition(){
if (abs(lowerAct.currentPos - lowerAct.desiredPos) < lowerAct.acceptableError){
++lowerAct.acceptableCount;
}
else{
lowerAct.acceptableCount = 0;
}
if (abs(upperAct.currentPos - upperAct.desiredPos) < upperAct.acceptableError){
++upperAct.acceptableCount;
}
else{
upperAct.acceptableCount = 0;
}
if(upperAct.acceptableCount >= upperAct.acceptableCountMax){
upperAct.disable();
}
if(lowerAct.acceptableCount >= upperAct.acceptableCountMax){
lowerAct.disable();
}
lowerAct.currentPos = smoothADC(LOWER)/58.13 -.41;
upperAct.currentPos = smoothADC(UPPER)/58.13 -.41;
}
int getMotorSpeed(int act){
if(act == LOWER){
if(abs(lowerAct.currentPos - lowerAct.desiredPos) < lowerAct.slowRange/2)
return lowerAct.speed / 3;
else if(abs(lowerAct.currentPos - lowerAct.desiredPos) < lowerAct.slowRange)
return lowerAct.speed / 2;
else
return lowerAct.speed;
}
else if (act == UPPER){
if(abs(upperAct.currentPos - upperAct.desiredPos) < upperAct.slowRange/2)
return upperAct.speed / 3;
else if(abs(upperAct.currentPos - upperAct.desiredPos) < upperAct.slowRange)
return upperAct.speed / 2;
else
return upperAct.speed;
}
////////
return 0;
}
/*Returns a 1 or a -1, depending on whether the actuator needs to retract
or extend
*/
int getMotorDir(int act){
if(act == LOWER){
if(!lowerAct.enabled)
return 0;
if(lowerAct.currentPos > lowerAct.desiredPos)
return -1;
else
return 1;
}
else if(act == UPPER){
if(!upperAct.enabled)
return 0;
if(upperAct.currentPos > upperAct.desiredPos)
return -1;
else
return 1;
}
/////////
return 0;
}
int main(void)
{
DemInitThingsYouBeenDoing(); //All init moved to nicer spot
_delay_ms(1000);
Sabertooth DriveSaber(&USARTD0, &PORTD);
upperAct.desiredPos = 3.0;
lowerAct.desiredPos = 3.5;
//Wait until rover is unpaused
while(!CHECK_ISROVING());
lowerAct.enable();
upperAct.enable();
/////////////Initial Calibration and Default Positions//////////////////////
while((lowerAct.enabled || upperAct.enabled)){
checkActPosition();
DriveSaber.ParsePacket(127+getMotorSpeed(LOWER)*getMotorDir(LOWER), 127+getMotorSpeed(UPPER)*getMotorDir(UPPER));
while(!CHECK_ISROVING()){
DriveSaber.ParsePacket(127,127);
}
}
baseStepper.calibrateBase();
MD2_DIR_CLR();
baseStepper.rotateBase(0); //Note that this function takes an angle relative
gripStepper.enable(); //to the absolute 0 on the robot
gripStepper.processCommand(RELEASE);
/*
_delay_ms(5000);
gripStepper.enable();
gripStepper.processCommand(GRIP);
*/
///////////////// DEBUG (and not wasting power) purposes!
//MD2_DISABLE();
/////////////////
/////////////Initial Calibration and Default Positions//////////////////////
// sprintf(SendBuffer, "Multiplier: %d \r\n \r\n", (int) baseStepper.multiplier);
// SendStringPC(SendBuffer); //Send Dem Strings
while(1){
if(CurrentState == WaitForHost){
SendStringPC("ID: ArmControl\r\n");
_delay_ms(500);
if(recieveBuffer[0] == 'r'){
CurrentState = ARMControl;
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, 'r');
TimePrevious = TimeSinceInit;
}
bufferIndex = 0;
}else if(CurrentState == ARMControl){
if(IsPacketToParse){
if(ShouldRECAL == true){
upperAct.desiredPos = 3.0;
lowerAct.desiredPos = 3.5;
lowerAct.enable();
upperAct.enable();
/////////////Initial Calibration and Default Positions//////////////////////
while((lowerAct.enabled || upperAct.enabled)){
checkActPosition();
DriveSaber.ParsePacket(127+getMotorSpeed(LOWER)*getMotorDir(LOWER), 127+getMotorSpeed(UPPER)*getMotorDir(UPPER));
while(!CHECK_ISROVING()){
DriveSaber.ParsePacket(127,127);
}
}
baseStepper.calibrateBase();
MD2_DIR_CLR();
baseStepper.rotateBase(0); //Note that this function takes an angle relative
if(gripStepper.desiredGripState){
gripStepper.enable(); //to the absolute 0 on the robot
gripStepper.processCommand(RELEASE);
}
ShouldRECAL = false;
}else{
ERROR_SET(); //Show light when done with actuators
lowerAct.enable(); //Re-enable lower actuator
upperAct.enable(); //Re-enabled lower actuator
baseStepper.rotateBase(baseStepper.desiredPos); //Move base to position
checkActPosition(); //Check once to avoid loop is possible
while(lowerAct.enabled || upperAct.enabled){ //If a motor needs to move, do below
checkActPosition(); //Check positions
DriveSaber.ParsePacket(127+getMotorSpeed(LOWER)*getMotorDir(LOWER), 127+getMotorSpeed(LOWER)*getMotorDir(UPPER)); //Move to position
while(!CHECK_ISROVING()){
DriveSaber.ParsePacket(127,127);
} //e-stop check
} //Exit when done moving
DriveSaber.ParsePacket(127,127); //Stop actuators from moving any more
if((gripStepper.desiredGripState == GRIP)){
gripStepper.enable();
gripStepper.processCommand(GRIP);
}else if(gripStepper.desiredGripState == RELEASE){
gripStepper.enable();
gripStepper.processCommand(RELEASE);
}
}
IsPacketToParse = false;
ERROR_CLR();
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, 255);
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, 0b00000010 | CHECK_GRIP_CLOSE());
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0,255);
bufferIndex = 0;
TimePrevious = TimeSinceInit;
}
//if((TimePrevious - TimeSinceInit) > MAXTIMEOUT){
// CurrentState = WaitForHost;
// bufferIndex = 0;
//}
}
}
}
ISR(TCD0_OVF_vect){
TimeSinceInit++;
}

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.2</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC8.CPP</ToolchainName>
<ProjectGuid>{1fc16d6e-a0d0-480a-ba3e-d179a1655abb}</ProjectGuid>
<avrdevice>ATxmega32D4</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>CPP</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>ArmControl</AssemblyName>
<Name>ArmControl</Name>
<RootNamespace>ArmControl</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress />
<UncachedRange />
<OverrideVtorValue />
<BootSegment>2</BootSegment>
<eraseonlaunchrule>1</eraseonlaunchrule>
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.15.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -Wl,-7u,vfprintf -lprintf_flt -lm</avrgcc.compiler.miscellaneous.OtherFlags>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize (-O1)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.optimization.DebugLevel>Default (-g2)</avrgcccpp.compiler.optimization.DebugLevel>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.miscellaneous.OtherFlags>-Wl,-u,vfprintf -lprintf_flt -lm</avrgcccpp.compiler.miscellaneous.OtherFlags>
<avrgcccpp.compiler.miscellaneous.Verbose>True</avrgcccpp.compiler.miscellaneous.Verbose>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
<avrgcccpp.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcccpp.assembler.debugging.DebugLevel>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="adc.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="adc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="ArmControl.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="avr_compiler.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Misc.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Misc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="motorInfo.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="motorInfo.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="rotateStepper.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="rotateStepper.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Sabertooth.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Sabertooth.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="stepperInfo.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="stepperInfo.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="usart_driver.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="usart_driver.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="XMegaMacros.h">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@@ -0,0 +1,91 @@
ArmControl.d ArmControl.o: .././ArmControl.cpp \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
.././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
.././usart_driver.h .././Sabertooth.h .././XMegaMacros.h .././adc.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\ctype.h \
.././motorInfo.h .././stepperInfo.h .././rotateStepper.h .././Misc.h
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
.././usart_driver.h:
.././Sabertooth.h:
.././XMegaMacros.h:
.././adc.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\ctype.h:
.././motorInfo.h:
.././stepperInfo.h:
.././rotateStepper.h:
.././Misc.h:

View File

@@ -0,0 +1,409 @@
:100000000C94B8000C94E0000C94E0000C94E00018
:100010000C94E0000C94E0000C94E0000C94E000E0
:100020000C94E0000C94E0000C94E0000C94E000D0
:100030000C94E0000C94E0000C94E0000C94E000C0
:100040000C94E0000C94E0000C94E0000C94E000B0
:100050000C94E0000C94E0000C94E0000C94E000A0
:100060000C94E0000C944D010C9419020C94E000E7
:100070000C94E0000C94E0000C94E0000C94E00080
:100080000C94E0000C94E0000C94E0000C94E00070
:100090000C94E0000C94E0000C94E0000C94E00060
:1000A0000C94E0000C94E0000C94E0000C94E00050
:1000B0000C94E0000C94E0000C94E0000C94E00040
:1000C0000C94E0000C94E0000C94E0000C94E00030
:1000D0000C94E0000C94E0000C94E0000C94E00020
:1000E0000C94E0000C94E0000C94E0000C94E00010
:1000F0000C94E0000C94E0000C94E0000C94E00000
:100100000C94E0000C94E0000C94E0000C94E000EF
:100110000C94E0000C94E0000C94E0000C94E000DF
:100120000C94E0000C94E0000C94E0000C94E000CF
:100130000C94E0000C944F070C94E0000C94E00049
:100140000C94E0000C94E0000C94E0000C94E000AF
:100150000C94E0000C94E0000C94E0000C94E0009F
:100160000C94E0000C94E0000C94E0007407850708
:1001700011241FBECFEFCDBFDFE2DEBF10E2A0E053
:10018000B0E2EAE5F9E102C005900D92A231B107B3
:10019000D9F720E2A2E1B0E201C01D92AB37B2076D
:1001A000E1F711E0CEE6D1E004C02297FE010E9403
:1001B0009C0CCC36D107C9F70E9436050C94A00CD4
:1001C0000C940000AAECB1E022E02C93FC01849195
:1001D0001C9208950F931F93CF93DF93182F062F30
:1001E0008091000280FD1BC0C0E0D2E081E08883E6
:1001F00084E0898380E18A831B8286E08C8380E2AD
:1002000090E00E94E2008C8781E290E00E94E20090
:100210008D878FE79CE00197F1F700C00000E0E0D8
:10022000F2E000A3110F110F110F11A312A280A170
:10023000806880A386818823E9F3E0E0F2E086818C
:10024000868380A1806880A386818823E9F3E0E02B
:10025000F2E08681868380899189DF91CF911F9119
:100260000F910895E0E0F9E087E08083118282E158
:100270009AE786A397A381E086830895CF93DF93BF
:10028000EC0103C0CE010E94200ACE010E94180A90
:100290008111F8CFDF91CF9108951F920F920FB681
:1002A0000F9211242F933F934F935F936F937F93FC
:1002B0008F939F93AF93BF93CF93DF93EF93FF936E
:1002C0008CE690E20E942C0A8CE690E20E94180ACA
:1002D000882379F0C0912520D0E08CE690E20E943E
:1002E000200ACD5EDF4D8883809125208F5F80932B
:1002F0002520809125208A3009F088C08CE690E284
:100300000E943E0190911B20809114207091152035
:10031000609116205091172040911820309119209B
:1003200020911A20872786278527842783278227DD
:10033000981353C0E4E1F0E2808183FB882780F9C1
:100340008093262080818470809327208081C1E063
:10035000869581708C2780933B2020911620809178
:10036000152090E0820F911D8093332090933420CC
:10037000809118206091172070E0680F711D882708
:1003800077FD8095982F0E945B0B20E030E048ECD1
:1003900052E40E94C00AAB01BC0184E590E20E94D5
:1003A000BF0780911A206091192070E0680F711DBD
:1003B000882777FD8095982F0E945B0B20E030E026
:1003C00048EC52E40E94C00AAB01BC018CE390E20D
:1003D0000E94BF07C093282019C0E0EAF8E081819D
:1003E00085FFFDCF8FEF8093A008E0EAF8E08181E0
:1003F00085FFFDCF1092A008E0EAF8E0818185FF3B
:10040000FDCF8FEF8093A00810922520FF91EF91F0
:10041000DF91CF91BF91AF919F918F917F916F911C
:100420005F914F913F912F910F900FBE0F901F90B2
:1004300018951F920F920FB60F9211242F933F938E
:100440004F935F936F937F938F939F93AF93BF93DC
:10045000EF93FF938CE690E20E94410AFF91EF91A7
:10046000BF91AF919F918F917F916F915F914F91CC
:100470003F912F910F900FBE0F901F90189588ED10
:1004800084BF82E080935000E0E5F0E0818181FF4D
:10049000FDCF88ED84BF91E09093400084BFE0E5FC
:1004A000F0E0808184608083818182FFFDCFE0E580
:1004B000F0E086818D7F8683E0E6F0E080818160D8
:1004C00080830895E0E4F6E088E0818384E082831D
:1004D00041E060EA78E08CE690E20E940F0AE09149
:1004E0006C20F0916D2083E0858383818F7C806117
:1004F0008383A0EAB8E08FEC16968C931697179634
:100500001C92848180618483848188608483E0EA92
:10051000F0E08281816082830895CF93DF930E940F
:100520003F020E9462020E94320180EEE0E4F6E0A7
:100530008183A0E6B6E09FEF11969C931197E0E0CF
:10054000F6E08183C0E2D6E087E0898384E082839D
:1005500098E092839A8320E1228398E1938B9B8B8E
:1005600030E416963C93169790E29683368330E8F3
:10057000358316962C93169716969C931697169677
:100580008C93169721E02D8392E09D838E8316969F
:100590002C93169716969C937894DF91CF9108959B
:1005A000FC012081222359F0DC011196E0EAF8E0F9
:1005B000818185FFFDCF20832D912111F9CF0895F1
:1005C000EF92FF920F931F93CF93DF938C01C7E0BD
:1005D000D0E0E12CF12C0115110539F461E081E046
:1005E0000E94EA00E80EF91E09C00130110531F43D
:1005F00061E080E00E94EA00E80EF91E8FE39FE1CF
:100600000197F1F700C000002197209721F7C7015B
:1006100067E070E00E94720CCB01DF91CF911F91D7
:100620000F91FF90EF900895CF92DF92EF92FF929B
:10063000209168203091692040916A2050916B2070
:100640006091642070916520809166209091672070
:100650000E945B0A6B017C0120E030E0A9010E944E
:10066000E70B181624F0F7FAF094F7F8F094A701C6
:100670009601609158207091592080915A20909154
:100680005B200E94E70B181644F4E6E5F0E2808157
:10069000918101968083918304C01092562010921C
:1006A000572020915020309151204091522050915C
:1006B000532060914C2070914D2080914E2090915C
:1006C0004F200E945B0A6B017C0120E030E0A90111
:1006D0000E94E70B181624F0F7FAF094F7F8F0945C
:1006E000A7019601609140207091412080914220A5
:1006F000909143200E94E70B181644F4EEE3F0E2D9
:100700008081918101968083918304C010923E2064
:1007100010923F2020913E2030913F2080913C203C
:1007200090913D202817390724F08CE390E20E9435
:10073000BB07209156203091572080913C2090910A
:100740003D202817390724F084E590E20E94BB077A
:1007500080E090E00E94E002BC01882777FD809550
:10076000982F0E945B0B2FE135E848E652E40E9487
:10077000C00A25E83BEE41ED5EE30E945B0A609310
:10078000642070936520809366209093672081E0B9
:1007900090E00E94E002BC01882777FD8095982FA9
:1007A0000E945B0B2FE135E848E652E40E94C00A44
:1007B00025E83BEE41ED5EE30E945B0A60934C202E
:1007C00070934D2080934E2090934F20FF90EF9098
:1007D000DF90CF9008954F925F926F927F928F92A9
:1007E0009F92AF92BF92CF92DF92EF92FF920097CB
:1007F00009F071C0409064205090652060906620A0
:1008000070906720209168203091692040916A2083
:1008100050916B20C301B2010E945B0A6B017C0105
:1008200020E030E0A9010E94E70B181624F0F7FA47
:10083000F094F7F8F09480905C2090905D20A09068
:100840005E20B0905F2020E030E040E05FE3C50133
:10085000B4010E94EB0BA70196010E94E70B18164A
:1008600054F4809160209091612063E070E00E94D8
:10087000720CCB01A6C02091682030916920409174
:100880006A2050916B20C301B2010E945B0A6B0188
:100890007C0120E030E0A9010E94E70B181624F04B
:1008A000F7FAF094F7F8F094A7019601C501B401A6
:1008B0000E94E70B181654F48091602090916120FB
:1008C00099230CF40196959587957BC080916020C3
:1008D0009091612076C0019709F071C040904C2042
:1008E00050904D2060904E2070904F2020915020CD
:1008F000309151204091522050915320C301B201B8
:100900000E945B0A6B017C0120E030E0A9010E949B
:10091000E70B181624F0F7FAF094F7F8F0948090AB
:10092000442090904520A0904620B090472020E0A1
:1009300030E040E05FE3C501B4010E94EB0BA7018A
:1009400096010E94E70B181654F48091482090916C
:10095000492063E070E00E94720CCB0132C020910C
:100960005020309151204091522050915320C3018A
:10097000B2010E945B0A6B017C0120E030E0A9011A
:100980000E94E70B181624F0F7FAF094F7F8F094A9
:10099000A7019601C501B4010E94E70B181654F493
:1009A000809148209091492099230CF401969595C7
:1009B000879507C0809148209091492002C080E02F
:1009C00090E0FF90EF90DF90CF90BF90AF909F901E
:1009D0008F907F906F905F904F9008950097F1F403
:1009E0008091622090916320009709F43EC020918D
:1009F00068203091692040916A2050916B2060916D
:100A000064207091652080916620909167200E94FB
:100A1000E70B181614F58FEF9FEF0895019701F576
:100A200080914A2090914B200097F9F0209150201E
:100A300030915120409152205091532060914C2090
:100A400070914D2080914E2090914F200E94E70B95
:100A500018164CF48FEF9FEF089581E090E0089511
:100A600080E090E0089581E090E00895CF93DF93D7
:100A700000D000D0CDB7DEB70E948D022FEF87EAFD
:100A800091E6215080409040E1F700C0000040E630
:100A900056E060EA79E0CE0101960E94280980E0E4
:100AA00090E0A0E4B0E48093502090935120A09374
:100AB0005220B093532080E090E0A0E6B0E4809311
:100AC000682090936920A0936A20B0936B20E0E0A7
:100AD000F6E0808584FFFDCF84E590E20E94B507B3
:100AE0008CE390E20E94B5070F2EF2E6CF2EF0E2E3
:100AF000DF2EF02D0F2EFAE4EF2EF0E2FF2EF02D78
:100B000000E016E031C00E94140381E090E00E94F2
:100B1000EB03A82E81E090E00E94EE04982E80E086
:100B200090E00E94EB03B82E80E090E00E94EE047B
:100B30009A9C402D112441588B9D802D11246FE7E4
:100B4000680FCE0101960E94E008D80118968C919A
:100B500084FD0AC04FE76FE7CE0101960E94E008CE
:100B6000F801808584FFF6CFD6018D919C91892B69
:100B700051F6F70180819181892B29F689E290E273
:100B80000E94DA0781E0E0E6F6E0868360E070E04C
:100B900089E290E20E94980885E390E20E94090AA7
:100BA00061E070E085E390E20E9467090F2EF0EAB1
:100BB000EF2EF8E0FF2EF02D00E016E00F2EF2E60B
:100BC000CF2EF0E2DF2EF02D0F2EFAE4AF2EF0E262
:100BD000BF2EF02D412C512C6894662466F8762C9B
:100BE0008091122081112FC080E090E20E94D002FB
:100BF000FFEF23ED80E3F15020408040E1F700C09B
:100C00000000809113208237D9F481E08093122074
:100C1000D70111968C91119785FFFACF82E78C93BB
:100C20008091212090912220A0912320B091242016
:100C300080931D2090931E20A0931F20B09320200E
:100C400010922520CDCF813059F68091282088231D
:100C500039F280912620882309F477C040925020F1
:100C600050925120609252207092532080E090E088
:100C7000A0E6B0E48093682090936920A0936A2056
:100C8000B0936B2084E590E20E94B5078CE390E27C
:100C90000E94B50731C00E94140381E090E00E94D9
:100CA000EB03882E81E090E00E94EE04382E80E075
:100CB00090E00E94EB03982E80E090E00E94EE040A
:100CC000389C402D11244158899D802D11246FE7B7
:100CD000680FCE0101960E94E008D80118968C9109
:100CE00084FD0AC04FE76FE7CE0101960E94E0083D
:100CF000F801808584FFF6CFD6018D919C91892BD8
:100D000051F6F50180819181892B29F689E290E2E3
:100D10000E94DA0781E0E0E6F6E0868360E070E0BA
:100D200089E290E20E94980880913B20882351F04C
:100D300085E390E20E94090A61E070E085E390E2B9
:100D40000E9467091092262074C080E880934506AF
:100D500084E590E20E94B5078CE390E20E94B5071B
:100D6000609133207091342089E290E20E949808CB
:100D70000E94140331C00E94140380E090E00E949E
:100D8000EB03882E81E090E00E94EE04382E80E094
:100D900090E00E94EB03982E80E090E00E94EE0429
:100DA000389C402D11244158899D802D11246FE7D6
:100DB000680FCE0101960E94E008D80118968C9128
:100DC00084FD0AC04FE76FE7CE0101960E94E0085C
:100DD000F801808584FFF6CFD6018D919C91892BF7
:100DE00051F6F50180819181892B29F64FE76FE754
:100DF000CE0101960E94E00880913B2081110BC03A
:100E000085E390E20E94090A60E070E085E390E2E9
:100E10000E9467090EC080913B20813051F485E328
:100E200090E20E94090A61E070E085E390E20E948E
:100E300067091092282080E880934606D701119612
:100E40008C91119785FFFACF8FEF8C93F7018181F9
:100E500085FFFCCFD80118968C9183FD02C083E0FA
:100E600001C082E0F7018083D70111968C91119720
:100E700085FFFACF8FEF8C9310922520809121204F
:100E800090912220A0912320B091242080931D20B6
:100E900090931E20A0931F20B0932020A1CE1F92DC
:100EA0000F920FB60F9211248F939F93AF93BF931E
:100EB0008091212090912220A0912320B091242084
:100EC0000196A11DB11D8093212090932220A09313
:100ED0002320B0932420BF91AF919F918F910F90C9
:100EE0000FBE0F901F90189584E590E20E94960720
:100EF0008CE390E20E94960785E390E20E945A09F3
:100F000089E290E20E94C507089589E290E20E947A
:100F1000D90785E390E20E9466098CE390E20E9483
:100F2000B40784E590E20E94B4070895FC011282A0
:100F3000138285E090E0808391834DEC5CEC6CE45F
:100F40007EE3448355836683778340E050E060E42A
:100F50007FE3408751876287738784E690E08487C8
:100F60009587168617860895089521E030E0FC01E4
:100F7000268737870895FC01168617860895FC0199
:100F8000448B558B668B778B0895FC0140E050E0D5
:100F90006FE773E4448355836683778340E050E0D2
:100FA00060E87FEB408351836283738310861186F0
:100FB00008950895CF93DF93EC0181E0E0E6F6E039
:100FC000868360E070E020E0E0E0F6E0A0E6B6E0D6
:100FD00031E052E0808584FFFDCF808582FF10C024
:100FE000211110C015963C9315972FEF4FE285E71E
:100FF000215040408040E1F700C00000232F02C094
:10100000222341F06F5F7F4F673971051CF08085A7
:1010100082FD13C016965C9316978FEB92E10197B1
:10102000F1F700C0000015965C9315978FEB92E1E5
:101030000197F1F700C00000CDCF82E0E0E6F6E0D6
:1010400086838FEB92E10197F1F700C0000082E008
:1010500085838FEB92E10197F1F700C000001886BD
:101060001986882777FD8095982F0E945B0B2C812D
:101070003D814E815F810E94C00A688379838A83A3
:101080009B839FEF2FE245E7915020404040E1F7DE
:1010900000C00000DF91CF910895CF93DF93EC0162
:1010A000CB01181619062CF421E0E0E6F6E02683C1
:1010B00004C021E0E0E6F6E02583BC01992324F496
:1010C00066277727681B790B882777FD8095982FEF
:1010D0000E945B0B288139814A815B810E94EB0B66
:1010E0000E94280B1616170604F580E090E0E0E059
:1010F000F6E0A0E6B6E032E0208524FFFDCF1696AC
:101100003C931697CFE7DCE02197F1F700C0000091
:1011100015963C931597CFE9DFE02197F1F700C0D2
:10112000000001968617970739F7DF91CF91089550
:10113000CF92DF92EF92FF92CF93DF93EC0188275B
:1011400077FD8095982F0E945B0B29E23CE540E1FA
:1011500052E40E945C0A0E94280B6B017C01888586
:101160009985B601681B790BCE010E944D08C8868F
:10117000D986DF91CF91FF90EF90DF90CF900895C7
:10118000DC01ED91FC911197818185FFFDCF80E815
:101190008083ED91FC911197818185FFFDCF608364
:1011A000ED91FC911197818185FFFDCF4083ED91F9
:1011B000FC91818185FFFDCF640F6F776083089577
:1011C0000F931F93CF93DF93EC01842F6F3761F060
:1011D0006F3720F44FE7461B61E00BC066233CF4F9
:1011E00041E8460F60E005C040E060E002C040E03A
:1011F00060E08F3761F08F3720F40FE7081B15E0B0
:101200000BC088233CF401E8080F14E005C000E09F
:1012100014E002C000E014E0CE010E94C008402F9C
:10122000612FCE010E94C008DF91CF911F910F91D5
:101230000895CF93DF93EC0140E060E00E94C00886
:1012400040E064E0CE010E94C008DF91CF91089594
:10125000CF93DF93EC01688379834A835B8388E0D3
:10126000FA018183E881F98183E08583E881F9814E
:101270008FEC8683E881F9811782E881F981848186
:1012800088608483FFEF23EC89E0F15020408040A8
:10129000E1F700C00000E881F9818AEA808344E137
:1012A0006EE0CE010E94C008CE010E941909DF91B4
:1012B000CF910895FC01108211828FEF9FEF8283FE
:1012C000938381E090E08483958308950895CF937C
:1012D000DF93EC0128813981232B09F497C0623018
:1012E000710508F093C02A813B812617370709F45E
:1012F0008DC06A837B836115710529F420E1E0E6E6
:10130000F6E0258307C06130710521F420E1E0E6B5
:10131000F6E02683FC0124813581232B11F520E1A1
:1013200037E2E0E0F6E0A0E6B6E050E2408544FFB8
:10133000FDCF15965C931597CFE8D1E02197F1F793
:1013400000C0000016965C931697CFE9DFE0219766
:10135000F1F700C00000215031092115310531F7A6
:1013600003C0FC01148215826115710531F548EA4C
:1013700052ED62E070E0E0E0F6E0A0E6B6E030E2D8
:10138000208524FFFDCF15963C93159725ED2A95D2
:10139000F1F7000016963C931697CFE3D1E0219722
:1013A000F1F700C000004150510961097109411570
:1013B00051056105710521F726C06130710519F5E8
:1013C000E0E2F6E0208523FD1EC0E0E0F6E0A0E6C6
:1013D000B6E050E260E276E0408544FFFDCF15962E
:1013E0005C931597D5EDDA95F1F7000016965C93AE
:1013F0001697CFE3D1E02197F1F700C00000EB0191
:10140000488543FFE9CFFC0110821182DF91CF9123
:10141000089521E030E0FC01208331830895FC0130
:101420006083718342831486138616861586089519
:10143000FC012385948581E0291301C080E0089593
:10144000FC018485DF01A80FB11D13968C91948552
:101450009F5F937094870895FC0183858F5F8370ED
:101460009485A081B1812C91891749F09385DF0182
:10147000A90FB11D13962C93838781E0089580E016
:101480000895FC0186859585981307C00190F08129
:10149000E02D83818C7F838308958685DF01A80FEB
:1014A000B11D17968C91A081B1818C9386858F5F39
:1014B0008370868708955058BB27AA270ED04DC148
:1014C0003ED130F043D120F031F49F3F11F41EF4AF
:1014D00033C10EF4E095E7FB29C1E92F4FD180F32A
:1014E000BA17620773078407950718F071F49EF521
:1014F00067C10EF4E0950B2EBA2FA02D0B01B90198
:1015000090010C01CA01A0011124FF27591B99F079
:10151000593F50F4503E68F11A16F040A22F232F85
:10152000342F4427585FF3CF469537952795A795D5
:10153000F0405395C9F77EF41F16BA0B620B730B7C
:10154000840BBAF09150A1F0FF0FBB1F661F771FED
:10155000881FC2F70EC0BA0F621F731F841F48F4A2
:10156000879577956795B795F7959E3F08F0B3CF28
:101570009395880F08F09927EE0F97958795089512
:101580000CD0EBC0E3D040F0DAD030F021F45F3F74
:1015900019F0CCC0511115C1CFC0F0D098F39923E8
:1015A000C9F35523B1F3951B550BBB27AA27621727
:1015B0007307840738F09F5F5F4F220F331F441F6C
:1015C000AA1FA9F333D00E2E3AF0E0E830D09150A4
:1015D0005040E695001CCAF729D0FE2F27D0660F91
:1015E000771F881FBB1F261737074807AB07B0E8D0
:1015F00009F0BB0B802DBF01FF2793585F4F2AF0E6
:101600009E3F510568F092C0DCC05F3FECF3983E0E
:10161000DCF3869577956795B795F7959F5FC9F742
:10162000880F911D9695879597F90895E1E0660FCB
:10163000771F881FBB1F621773078407BA0720F044
:10164000621B730B840BBA0BEE1F88F7E0950895AD
:1016500004D06894B111B5C0089598D088F09F5710
:1016600090F0B92F9927B751A0F0D1F0660F771FEE
:10167000881F991F1AF0BA95C9F712C0B13081F0CE
:101680009FD0B1E008959CC0672F782F8827B85F5E
:1016900039F0B93FCCF3869577956795B395D9F72F
:1016A0003EF490958095709561957F4F8F4F9F4F39
:1016B0000895E89409C097FB3EF490958095709545
:1016C00061957F4F8F4F9F4F9923A9F0F92F96E98E
:1016D000BB279395F695879577956795B795F11103
:1016E000F8CFFAF4BB0F11F460FF1BC06F5F7F4FA0
:1016F0008F4F9F4F16C0882311F096E911C07723B2
:1017000021F09EE8872F762F05C0662371F096E8BA
:10171000862F70E060E02AF09A95660F771F881F89
:10172000DAF7880F9695879597F9089597F99F6747
:1017300080E870E060E008959FEF80EC0895002459
:101740000A941616170618060906089500240A9426
:1017500012161306140605060895092E0394000CAC
:1017600011F4882352F0BB0F40F4BF2B11F460FF3B
:1017700004C06F5F7F4F8F4F9F4F089557FD905864
:10178000440F551F59F05F3F71F04795880F97FB45
:10179000991F61F09F3F79F08795089512161306FF
:1017A0001406551FF2CF4695F1DF08C0161617062E
:1017B0001806991FF1CF8695710561050894089563
:1017C000E894BB2766277727CB0197F9089566D061
:1017D00008F48FEF08950BD0C0CFB1DF28F0B6DF4B
:1017E00018F0952309F0A2CFA7CF1124EACFC6DFC6
:1017F000A0F3959FD1F3950F50E0551F629FF00124
:10180000729FBB27F00DB11D639FAA27F00DB11D7C
:10181000AA1F649F6627B00DA11D661F829F222705
:10182000B00DA11D621F739FB00DA11D621F839F8C
:10183000A00D611D221F749F3327A00D611D231F62
:10184000849F600D211D822F762F6A2F11249F57B0
:1018500050408AF0E1F088234AF0EE0FFF1FBB1FD3
:10186000661F771F881F91505040A9F79E3F510572
:1018700070F05CCFA6CF5F3FECF3983EDCF386952B
:1018800077956795B795F795E7959F5FC1F7FE2B1D
:10189000880F911D9695879597F90895990F0008DF
:1018A000550FAA0BE0E8FEEF16161706E807F90732
:1018B000C0F012161306E407F50798F0621B730BCD
:1018C000840B950B39F40A2661F0232B242B252B4E
:1018D00021F408950A2609F4A140A6958FEF811DF1
:1018E000811D089597FB072E16F4009407D077FD0D
:1018F00009D00E94860C07FC05D03EF49095819596
:101900009F4F0895709561957F4F0895AA1BBB1B4B
:1019100051E107C0AA1FBB1FA617B70710F0A61BEF
:10192000B70B881F991F5A95A9F780959095BC0110
:10193000CD010895EE0FFF1F0590F491E02D09945D
:1019400011E0CEE6D1E004C0FE010E949C0C22967C
:0A195000C037D107C9F7F894FFCFA4
:10195A0049443A2041726D436F6E74726F6C0D0A7E
:02196A0000007B
:00000001FF

View File

@@ -0,0 +1,410 @@
S012000041726D436F6E74726F6C2E7372656311
S11300000C94B8000C94E0000C94E0000C94E00014
S11300100C94E0000C94E0000C94E0000C94E000DC
S11300200C94E0000C94E0000C94E0000C94E000CC
S11300300C94E0000C94E0000C94E0000C94E000BC
S11300400C94E0000C94E0000C94E0000C94E000AC
S11300500C94E0000C94E0000C94E0000C94E0009C
S11300600C94E0000C944D010C9419020C94E000E3
S11300700C94E0000C94E0000C94E0000C94E0007C
S11300800C94E0000C94E0000C94E0000C94E0006C
S11300900C94E0000C94E0000C94E0000C94E0005C
S11300A00C94E0000C94E0000C94E0000C94E0004C
S11300B00C94E0000C94E0000C94E0000C94E0003C
S11300C00C94E0000C94E0000C94E0000C94E0002C
S11300D00C94E0000C94E0000C94E0000C94E0001C
S11300E00C94E0000C94E0000C94E0000C94E0000C
S11300F00C94E0000C94E0000C94E0000C94E000FC
S11301000C94E0000C94E0000C94E0000C94E000EB
S11301100C94E0000C94E0000C94E0000C94E000DB
S11301200C94E0000C94E0000C94E0000C94E000CB
S11301300C94E0000C944F070C94E0000C94E00045
S11301400C94E0000C94E0000C94E0000C94E000AB
S11301500C94E0000C94E0000C94E0000C94E0009B
S11301600C94E0000C94E0000C94E0007407850704
S113017011241FBECFEFCDBFDFE2DEBF10E2A0E04F
S1130180B0E2EAE5F9E102C005900D92A231B107AF
S1130190D9F720E2A2E1B0E201C01D92AB37B20769
S11301A0E1F711E0CEE6D1E004C02297FE010E94FF
S11301B09C0CCC36D107C9F70E9436050C94A00CD0
S11301C00C940000AAECB1E022E02C93FC01849191
S11301D01C9208950F931F93CF93DF93182F062F2C
S11301E08091000280FD1BC0C0E0D2E081E08883E2
S11301F084E0898380E18A831B8286E08C8380E2A9
S113020090E00E94E2008C8781E290E00E94E2008C
S11302108D878FE79CE00197F1F700C00000E0E0D4
S1130220F2E000A3110F110F110F11A312A280A16C
S1130230806880A386818823E9F3E0E0F2E0868188
S1130240868380A1806880A386818823E9F3E0E027
S1130250F2E08681868380899189DF91CF911F9115
S11302600F910895E0E0F9E087E08083118282E154
S11302709AE786A397A381E086830895CF93DF93BB
S1130280EC0103C0CE010E94200ACE010E94180A8C
S11302908111F8CFDF91CF9108951F920F920FB67D
S11302A00F9211242F933F934F935F936F937F93F8
S11302B08F939F93AF93BF93CF93DF93EF93FF936A
S11302C08CE690E20E942C0A8CE690E20E94180AC6
S11302D0882379F0C0912520D0E08CE690E20E943A
S11302E0200ACD5EDF4D8883809125208F5F809327
S11302F02520809125208A3009F088C08CE690E280
S11303000E943E0190911B20809114207091152031
S11303106091162050911720409118203091192097
S113032020911A20872786278527842783278227D9
S1130330981353C0E4E1F0E2808183FB882780F9BD
S11303408093262080818470809327208081C1E05F
S1130350869581708C2780933B2020911620809174
S1130360152090E0820F911D8093332090933420C8
S1130370809118206091172070E0680F711D882704
S113038077FD8095982F0E945B0B20E030E048ECCD
S113039052E40E94C00AAB01BC0184E590E20E94D1
S11303A0BF0780911A206091192070E0680F711DB9
S11303B0882777FD8095982F0E945B0B20E030E022
S11303C048EC52E40E94C00AAB01BC018CE390E209
S11303D00E94BF07C093282019C0E0EAF8E0818199
S11303E085FFFDCF8FEF8093A008E0EAF8E08181DC
S11303F085FFFDCF1092A008E0EAF8E0818185FF37
S1130400FDCF8FEF8093A00810922520FF91EF91EC
S1130410DF91CF91BF91AF919F918F917F916F9118
S11304205F914F913F912F910F900FBE0F901F90AE
S113043018951F920F920FB60F9211242F933F938A
S11304404F935F936F937F938F939F93AF93BF93D8
S1130450EF93FF938CE690E20E94410AFF91EF91A3
S1130460BF91AF919F918F917F916F915F914F91C8
S11304703F912F910F900FBE0F901F90189588ED0C
S113048084BF82E080935000E0E5F0E0818181FF49
S1130490FDCF88ED84BF91E09093400084BFE0E5F8
S11304A0F0E0808184608083818182FFFDCFE0E57C
S11304B0F0E086818D7F8683E0E6F0E080818160D4
S11304C080830895E0E4F6E088E0818384E0828319
S11304D041E060EA78E08CE690E20E940F0AE09145
S11304E06C20F0916D2083E0858383818F7C806113
S11304F08383A0EAB8E08FEC16968C931697179630
S11305001C92848180618483848188608483E0EA8E
S1130510F0E08281816082830895CF93DF930E940B
S11305203F020E9462020E94320180EEE0E4F6E0A3
S11305308183A0E6B6E09FEF11969C931197E0E0CB
S1130540F6E08183C0E2D6E087E0898384E0828399
S113055098E092839A8320E1228398E1938B9B8B8A
S113056030E416963C93169790E29683368330E8EF
S1130570358316962C93169716969C931697169673
S11305808C93169721E02D8392E09D838E8316969B
S11305902C93169716969C937894DF91CF91089597
S11305A0FC012081222359F0DC011196E0EAF8E0F5
S11305B0818185FFFDCF20832D912111F9CF0895ED
S11305C0EF92FF920F931F93CF93DF938C01C7E0B9
S11305D0D0E0E12CF12C0115110539F461E081E042
S11305E00E94EA00E80EF91E09C00130110531F439
S11305F061E080E00E94EA00E80EF91E8FE39FE1CB
S11306000197F1F700C000002197209721F7C70157
S113061067E070E00E94720CCB01DF91CF911F91D3
S11306200F91FF90EF900895CF92DF92EF92FF9297
S1130630209168203091692040916A2050916B206C
S1130640609164207091652080916620909167206C
S11306500E945B0A6B017C0120E030E0A9010E944A
S1130660E70B181624F0F7FAF094F7F8F094A701C2
S11306709601609158207091592080915A20909150
S11306805B200E94E70B181644F4E6E5F0E2808153
S1130690918101968083918304C010925620109218
S11306A05720209150203091512040915220509158
S11306B0532060914C2070914D2080914E20909158
S11306C04F200E945B0A6B017C0120E030E0A9010D
S11306D00E94E70B181624F0F7FAF094F7F8F09458
S11306E0A7019601609140207091412080914220A1
S11306F0909143200E94E70B181644F4EEE3F0E2D5
S11307008081918101968083918304C010923E2060
S113071010923F2020913E2030913F2080913C2038
S113072090913D202817390724F08CE390E20E9431
S1130730BB07209156203091572080913C20909106
S11307403D202817390724F084E590E20E94BB0776
S113075080E090E00E94E002BC01882777FD80954C
S1130760982F0E945B0B2FE135E848E652E40E9483
S1130770C00A25E83BEE41ED5EE30E945B0A60930C
S1130780642070936520809366209093672081E0B5
S113079090E00E94E002BC01882777FD8095982FA5
S11307A00E945B0B2FE135E848E652E40E94C00A40
S11307B025E83BEE41ED5EE30E945B0A60934C202A
S11307C070934D2080934E2090934F20FF90EF9094
S11307D0DF90CF9008954F925F926F927F928F92A5
S11307E09F92AF92BF92CF92DF92EF92FF920097C7
S11307F009F071C04090642050906520609066209C
S113080070906720209168203091692040916A207F
S113081050916B20C301B2010E945B0A6B017C0101
S113082020E030E0A9010E94E70B181624F0F7FA43
S1130830F094F7F8F09480905C2090905D20A09064
S11308405E20B0905F2020E030E040E05FE3C5012F
S1130850B4010E94EB0BA70196010E94E70B181646
S113086054F4809160209091612063E070E00E94D4
S1130870720CCB01A6C02091682030916920409170
S11308806A2050916B20C301B2010E945B0A6B0184
S11308907C0120E030E0A9010E94E70B181624F047
S11308A0F7FAF094F7F8F094A7019601C501B401A2
S11308B00E94E70B181654F48091602090916120F7
S11308C099230CF40196959587957BC080916020BF
S11308D09091612076C0019709F071C040904C203E
S11308E050904D2060904E2070904F2020915020C9
S11308F0309151204091522050915320C301B201B4
S11309000E945B0A6B017C0120E030E0A9010E9497
S1130910E70B181624F0F7FAF094F7F8F0948090A7
S1130920442090904520A0904620B090472020E09D
S113093030E040E05FE3C501B4010E94EB0BA70186
S113094096010E94E70B181654F480914820909168
S1130950492063E070E00E94720CCB0132C0209108
S11309605020309151204091522050915320C30186
S1130970B2010E945B0A6B017C0120E030E0A90116
S11309800E94E70B181624F0F7FAF094F7F8F094A5
S1130990A7019601C501B4010E94E70B181654F48F
S11309A0809148209091492099230CF401969595C3
S11309B0879507C0809148209091492002C080E02B
S11309C090E0FF90EF90DF90CF90BF90AF909F901A
S11309D08F907F906F905F904F9008950097F1F4FF
S11309E08091622090916320009709F43EC0209189
S11309F068203091692040916A2050916B20609169
S1130A0064207091652080916620909167200E94F7
S1130A10E70B181614F58FEF9FEF0895019701F572
S1130A2080914A2090914B200097F9F0209150201A
S1130A3030915120409152205091532060914C208C
S1130A4070914D2080914E2090914F200E94E70B91
S1130A5018164CF48FEF9FEF089581E090E008950D
S1130A6080E090E0089581E090E00895CF93DF93D3
S1130A7000D000D0CDB7DEB70E948D022FEF87EAF9
S1130A8091E6215080409040E1F700C0000040E62C
S1130A9056E060EA79E0CE0101960E94280980E0E0
S1130AA090E0A0E4B0E48093502090935120A09370
S1130AB05220B093532080E090E0A0E6B0E480930D
S1130AC0682090936920A0936A20B0936B20E0E0A3
S1130AD0F6E0808584FFFDCF84E590E20E94B507AF
S1130AE08CE390E20E94B5070F2EF2E6CF2EF0E2DF
S1130AF0DF2EF02D0F2EFAE4EF2EF0E2FF2EF02D74
S1130B0000E016E031C00E94140381E090E00E94EE
S1130B10EB03A82E81E090E00E94EE04982E80E082
S1130B2090E00E94EB03B82E80E090E00E94EE0477
S1130B309A9C402D112441588B9D802D11246FE7E0
S1130B40680FCE0101960E94E008D80118968C9196
S1130B5084FD0AC04FE76FE7CE0101960E94E008CA
S1130B60F801808584FFF6CFD6018D919C91892B65
S1130B7051F6F70180819181892B29F689E290E26F
S1130B800E94DA0781E0E0E6F6E0868360E070E048
S1130B9089E290E20E94980885E390E20E94090AA3
S1130BA061E070E085E390E20E9467090F2EF0EAAD
S1130BB0EF2EF8E0FF2EF02D00E016E00F2EF2E607
S1130BC0CF2EF0E2DF2EF02D0F2EFAE4AF2EF0E25E
S1130BD0BF2EF02D412C512C6894662466F8762C97
S1130BE08091122081112FC080E090E20E94D002F7
S1130BF0FFEF23ED80E3F15020408040E1F700C097
S1130C000000809113208237D9F481E08093122070
S1130C10D70111968C91119785FFFACF82E78C93B7
S1130C208091212090912220A0912320B091242012
S1130C3080931D2090931E20A0931F20B09320200A
S1130C4010922520CDCF813059F680912820882319
S1130C5039F280912620882309F477C040925020ED
S1130C6050925120609252207092532080E090E084
S1130C70A0E6B0E48093682090936920A0936A2052
S1130C80B0936B2084E590E20E94B5078CE390E278
S1130C900E94B50731C00E94140381E090E00E94D5
S1130CA0EB03882E81E090E00E94EE04382E80E071
S1130CB090E00E94EB03982E80E090E00E94EE0406
S1130CC0389C402D11244158899D802D11246FE7B3
S1130CD0680FCE0101960E94E008D80118968C9105
S1130CE084FD0AC04FE76FE7CE0101960E94E00839
S1130CF0F801808584FFF6CFD6018D919C91892BD4
S1130D0051F6F50180819181892B29F689E290E2DF
S1130D100E94DA0781E0E0E6F6E0868360E070E0B6
S1130D2089E290E20E94980880913B20882351F048
S1130D3085E390E20E94090A61E070E085E390E2B5
S1130D400E9467091092262074C080E880934506AB
S1130D5084E590E20E94B5078CE390E20E94B50717
S1130D60609133207091342089E290E20E949808C7
S1130D700E94140331C00E94140380E090E00E949A
S1130D80EB03882E81E090E00E94EE04382E80E090
S1130D9090E00E94EB03982E80E090E00E94EE0425
S1130DA0389C402D11244158899D802D11246FE7D2
S1130DB0680FCE0101960E94E008D80118968C9124
S1130DC084FD0AC04FE76FE7CE0101960E94E00858
S1130DD0F801808584FFF6CFD6018D919C91892BF3
S1130DE051F6F50180819181892B29F64FE76FE750
S1130DF0CE0101960E94E00880913B2081110BC036
S1130E0085E390E20E94090A60E070E085E390E2E5
S1130E100E9467090EC080913B20813051F485E324
S1130E2090E20E94090A61E070E085E390E20E948A
S1130E3067091092282080E880934606D70111960E
S1130E408C91119785FFFACF8FEF8C93F7018181F5
S1130E5085FFFCCFD80118968C9183FD02C083E0F6
S1130E6001C082E0F7018083D70111968C9111971C
S1130E7085FFFACF8FEF8C9310922520809121204B
S1130E8090912220A0912320B091242080931D20B2
S1130E9090931E20A0931F20B0932020A1CE1F92D8
S1130EA00F920FB60F9211248F939F93AF93BF931A
S1130EB08091212090912220A0912320B091242080
S1130EC00196A11DB11D8093212090932220A0930F
S1130ED02320B0932420BF91AF919F918F910F90C5
S1130EE00FBE0F901F90189584E590E20E9496071C
S1130EF08CE390E20E94960785E390E20E945A09EF
S1130F0089E290E20E94C507089589E290E20E9476
S1130F10D90785E390E20E9466098CE390E20E947F
S1130F20B40784E590E20E94B4070895FC0112829C
S1130F30138285E090E0808391834DEC5CEC6CE45B
S1130F407EE3448355836683778340E050E060E426
S1130F507FE3408751876287738784E690E08487C4
S1130F609587168617860895089521E030E0FC01E0
S1130F70268737870895FC01168617860895FC0195
S1130F80448B558B668B778B0895FC0140E050E0D1
S1130F906FE773E4448355836683778340E050E0CE
S1130FA060E87FEB408351836283738310861186EC
S1130FB008950895CF93DF93EC0181E0E0E6F6E035
S1130FC0868360E070E020E0E0E0F6E0A0E6B6E0D2
S1130FD031E052E0808584FFFDCF808582FF10C020
S1130FE0211110C015963C9315972FEF4FE285E71A
S1130FF0215040408040E1F700C00000232F02C090
S1131000222341F06F5F7F4F673971051CF08085A3
S113101082FD13C016965C9316978FEB92E10197AD
S1131020F1F700C0000015965C9315978FEB92E1E1
S11310300197F1F700C00000CDCF82E0E0E6F6E0D2
S113104086838FEB92E10197F1F700C0000082E004
S113105085838FEB92E10197F1F700C000001886B9
S11310601986882777FD8095982F0E945B0B2C8129
S11310703D814E815F810E94C00A688379838A839F
S11310809B839FEF2FE245E7915020404040E1F7DA
S113109000C00000DF91CF910895CF93DF93EC015E
S11310A0CB01181619062CF421E0E0E6F6E02683BD
S11310B004C021E0E0E6F6E02583BC01992324F492
S11310C066277727681B790B882777FD8095982FEB
S11310D00E945B0B288139814A815B810E94EB0B62
S11310E00E94280B1616170604F580E090E0E0E055
S11310F0F6E0A0E6B6E032E0208524FFFDCF1696A8
S11311003C931697CFE7DCE02197F1F700C000008D
S113111015963C931597CFE9DFE02197F1F700C0CE
S1131120000001968617970739F7DF91CF9108954C
S1131130CF92DF92EF92FF92CF93DF93EC01882757
S113114077FD8095982F0E945B0B29E23CE540E1F6
S113115052E40E945C0A0E94280B6B017C01888582
S11311609985B601681B790BCE010E944D08C8868B
S1131170D986DF91CF91FF90EF90DF90CF900895C3
S1131180DC01ED91FC911197818185FFFDCF80E811
S11311908083ED91FC911197818185FFFDCF608360
S11311A0ED91FC911197818185FFFDCF4083ED91F5
S11311B0FC91818185FFFDCF640F6F776083089573
S11311C00F931F93CF93DF93EC01842F6F3761F05C
S11311D06F3720F44FE7461B61E00BC066233CF4F5
S11311E041E8460F60E005C040E060E002C040E036
S11311F060E08F3761F08F3720F40FE7081B15E0AC
S11312000BC088233CF401E8080F14E005C000E09B
S113121014E002C000E014E0CE010E94C008402F98
S1131220612FCE010E94C008DF91CF911F910F91D1
S11312300895CF93DF93EC0140E060E00E94C00882
S113124040E064E0CE010E94C008DF91CF91089590
S1131250CF93DF93EC01688379834A835B8388E0CF
S1131260FA018183E881F98183E08583E881F9814A
S11312708FEC8683E881F9811782E881F981848182
S113128088608483FFEF23EC89E0F15020408040A4
S1131290E1F700C00000E881F9818AEA808344E133
S11312A06EE0CE010E94C008CE010E941909DF91B0
S11312B0CF910895FC01108211828FEF9FEF8283FA
S11312C0938381E090E08483958308950895CF9378
S11312D0DF93EC0128813981232B09F497C0623014
S11312E0710508F093C02A813B812617370709F45A
S11312F08DC06A837B836115710529F420E1E0E6E2
S1131300F6E0258307C06130710521F420E1E0E6B1
S1131310F6E02683FC0124813581232B11F520E19D
S113132037E2E0E0F6E0A0E6B6E050E2408544FFB4
S1131330FDCF15965C931597CFE8D1E02197F1F78F
S113134000C0000016965C931697CFE9DFE0219762
S1131350F1F700C00000215031092115310531F7A2
S113136003C0FC01148215826115710531F548EA48
S113137052ED62E070E0E0E0F6E0A0E6B6E030E2D4
S1131380208524FFFDCF15963C93159725ED2A95CE
S1131390F1F7000016963C931697CFE3D1E021971E
S11313A0F1F700C00000415051096109710941156C
S11313B051056105710521F726C06130710519F5E4
S11313C0E0E2F6E0208523FD1EC0E0E0F6E0A0E6C2
S11313D0B6E050E260E276E0408544FFFDCF15962A
S11313E05C931597D5EDDA95F1F7000016965C93AA
S11313F01697CFE3D1E02197F1F700C00000EB018D
S1131400488543FFE9CFFC0110821182DF91CF911F
S1131410089521E030E0FC01208331830895FC012C
S11314206083718342831486138616861586089515
S1131430FC012385948581E0291301C080E008958F
S1131440FC018485DF01A80FB11D13968C9194854E
S11314509F5F937094870895FC0183858F5F8370E9
S11314609485A081B1812C91891749F09385DF017E
S1131470A90FB11D13962C93838781E0089580E012
S11314800895FC0186859585981307C00190F08125
S1131490E02D83818C7F838308958685DF01A80FE7
S11314A0B11D17968C91A081B1818C9386858F5F35
S11314B08370868708955058BB27AA270ED04DC144
S11314C03ED130F043D120F031F49F3F11F41EF4AB
S11314D033C10EF4E095E7FB29C1E92F4FD180F326
S11314E0BA17620773078407950718F071F49EF51D
S11314F067C10EF4E0950B2EBA2FA02D0B01B90194
S113150090010C01CA01A0011124FF27591B99F075
S1131510593F50F4503E68F11A16F040A22F232F81
S1131520342F4427585FF3CF469537952795A795D1
S1131530F0405395C9F77EF41F16BA0B620B730B78
S1131540840BBAF09150A1F0FF0FBB1F661F771FE9
S1131550881FC2F70EC0BA0F621F731F841F48F49E
S1131560879577956795B795F7959E3F08F0B3CF24
S11315709395880F08F09927EE0F9795879508950E
S11315800CD0EBC0E3D040F0DAD030F021F45F3F70
S113159019F0CCC0511115C1CFC0F0D098F39923E4
S11315A0C9F35523B1F3951B550BBB27AA27621723
S11315B07307840738F09F5F5F4F220F331F441F68
S11315C0AA1FA9F333D00E2E3AF0E0E830D09150A0
S11315D05040E695001CCAF729D0FE2F27D0660F8D
S11315E0771F881FBB1F261737074807AB07B0E8CC
S11315F009F0BB0B802DBF01FF2793585F4F2AF0E2
S11316009E3F510568F092C0DCC05F3FECF3983E0A
S1131610DCF3869577956795B795F7959F5FC9F73E
S1131620880F911D9695879597F90895E1E0660FC7
S1131630771F881FBB1F621773078407BA0720F040
S1131640621B730B840BBA0BEE1F88F7E0950895A9
S113165004D06894B111B5C0089598D088F09F570C
S113166090F0B92F9927B751A0F0D1F0660F771FEA
S1131670881F991F1AF0BA95C9F712C0B13081F0CA
S11316809FD0B1E008959CC0672F782F8827B85F5A
S113169039F0B93FCCF3869577956795B395D9F72B
S11316A03EF490958095709561957F4F8F4F9F4F35
S11316B00895E89409C097FB3EF490958095709541
S11316C061957F4F8F4F9F4F9923A9F0F92F96E98A
S11316D0BB279395F695879577956795B795F111FF
S11316E0F8CFFAF4BB0F11F460FF1BC06F5F7F4F9C
S11316F08F4F9F4F16C0882311F096E911C07723AE
S113170021F09EE8872F762F05C0662371F096E8B6
S1131710862F70E060E02AF09A95660F771F881F85
S1131720DAF7880F9695879597F9089597F99F6743
S113173080E870E060E008959FEF80EC0895002455
S11317400A941616170618060906089500240A9422
S113175012161306140605060895092E0394000CA8
S113176011F4882352F0BB0F40F4BF2B11F460FF37
S113177004C06F5F7F4F8F4F9F4F089557FD905860
S1131780440F551F59F05F3F71F04795880F97FB41
S1131790991F61F09F3F79F08795089512161306FB
S11317A01406551FF2CF4695F1DF08C0161617062A
S11317B01806991FF1CF869571056105089408955F
S11317C0E894BB2766277727CB0197F9089566D05D
S11317D008F48FEF08950BD0C0CFB1DF28F0B6DF47
S11317E018F0952309F0A2CFA7CF1124EACFC6DFC2
S11317F0A0F3959FD1F3950F50E0551F629FF00120
S1131800729FBB27F00DB11D639FAA27F00DB11D78
S1131810AA1F649F6627B00DA11D661F829F222701
S1131820B00DA11D621F739FB00DA11D621F839F88
S1131830A00D611D221F749F3327A00D611D231F5E
S1131840849F600D211D822F762F6A2F11249F57AC
S113185050408AF0E1F088234AF0EE0FFF1FBB1FCF
S1131860661F771F881F91505040A9F79E3F51056E
S113187070F05CCFA6CF5F3FECF3983EDCF3869527
S113188077956795B795F795E7959F5FC1F7FE2B19
S1131890880F911D9695879597F90895990F0008DB
S11318A0550FAA0BE0E8FEEF16161706E807F9072E
S11318B0C0F012161306E407F50798F0621B730BC9
S11318C0840B950B39F40A2661F0232B242B252B4A
S11318D021F408950A2609F4A140A6958FEF811DED
S11318E0811D089597FB072E16F4009407D077FD09
S11318F009D00E94860C07FC05D03EF49095819592
S11319009F4F0895709561957F4F0895AA1BBB1B47
S113191051E107C0AA1FBB1FA617B70710F0A61BEB
S1131920B70B881F991F5A95A9F780959095BC010C
S1131930CD010895EE0FFF1F0590F491E02D099459
S113194011E0CEE6D1E004C0FE010E949C0C229678
S10D1950C037D107C9F7F894FFCFA0
S113195A49443A2041726D436F6E74726F6C0D0A7A
S105196A000077
S9030000FC

View File

@@ -0,0 +1,181 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../adc.cpp \
../ArmControl.cpp \
../Misc.cpp \
../motorInfo.cpp \
../rotateStepper.cpp \
../Sabertooth.cpp \
../stepperInfo.cpp \
../usart_driver.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
adc.o \
ArmControl.o \
Misc.o \
motorInfo.o \
rotateStepper.o \
Sabertooth.o \
stepperInfo.o \
usart_driver.o
OBJS_AS_ARGS += \
adc.o \
ArmControl.o \
Misc.o \
motorInfo.o \
rotateStepper.o \
Sabertooth.o \
stepperInfo.o \
usart_driver.o
C_DEPS += \
adc.d \
ArmControl.d \
Misc.d \
motorInfo.d \
rotateStepper.d \
Sabertooth.d \
stepperInfo.d \
usart_driver.d
C_DEPS_AS_ARGS += \
adc.d \
ArmControl.d \
Misc.d \
motorInfo.d \
rotateStepper.d \
Sabertooth.d \
stepperInfo.d \
usart_driver.d
OUTPUT_FILE_PATH +=ArmControl.elf
OUTPUT_FILE_PATH_AS_ARGS +=ArmControl.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -std=gnu99 -Wl,-7u,vfprintf -lprintf_flt -lm -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
./%.o: .././%.cpp
@echo Building file: $<
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -Wl,-u,vfprintf -lprintf_flt -lm -v -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP)
@echo Building target: $@
@echo Invoking: AVR8/GNU Linker : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="ArmControl.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega32d4
@echo Finished building target: $@
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "ArmControl.elf" "ArmControl.hex"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "ArmControl.elf" "ArmControl.eep" || exit 0
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "ArmControl.elf" > "ArmControl.lss"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "ArmControl.elf" "ArmControl.srec"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-size.exe" "ArmControl.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "ArmControl.elf" "ArmControl.a" "ArmControl.hex" "ArmControl.lss" "ArmControl.eep" "ArmControl.map" "ArmControl.srec" "ArmControl.usersignatures"

View File

@@ -0,0 +1,42 @@
Misc.d Misc.o: .././Misc.cpp .././Misc.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
.././XMegaMacros.h
.././Misc.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
.././XMegaMacros.h:

View File

@@ -0,0 +1,68 @@
Sabertooth.d Sabertooth.o: .././Sabertooth.cpp .././Sabertooth.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
.././usart_driver.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h
.././Sabertooth.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:

View File

@@ -0,0 +1,71 @@
adc.d adc.o: .././adc.cpp .././adc.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\ctype.h \
.././usart_driver.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h
.././adc.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\ctype.h:
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:

View File

@@ -0,0 +1,20 @@
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
adc.cpp
ArmControl.cpp
Misc.cpp
motorInfo.cpp
rotateStepper.cpp
Sabertooth.cpp
stepperInfo.cpp
usart_driver.c

View File

@@ -0,0 +1,3 @@
motorInfo.d motorInfo.o: .././motorInfo.cpp .././motorInfo.h
.././motorInfo.h:

View File

@@ -0,0 +1,80 @@
rotateStepper.d rotateStepper.o: .././rotateStepper.cpp \
.././rotateStepper.h .././XMegaMacros.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
.././stepperInfo.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
.././usart_driver.h
.././rotateStepper.h:
.././XMegaMacros.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
.././stepperInfo.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
.././usart_driver.h:

View File

@@ -0,0 +1,77 @@
stepperInfo.d stepperInfo.o: .././stepperInfo.cpp \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
.././stepperInfo.h .././XMegaMacros.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
.././usart_driver.h
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
.././stepperInfo.h:
.././XMegaMacros.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
.././usart_driver.h:

View File

@@ -0,0 +1,66 @@
usart_driver.d usart_driver.o: .././usart_driver.c .././usart_driver.h \
.././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:

View File

@@ -0,0 +1,17 @@
/*
* CPPFile1.cpp
*
* Created: 5/27/2014 10:19:21 PM
* Author: Corwin
*/
#include "Misc.h"
#include <avr/io.h>
#include "XMegaMacros.h"
void DockArm(unsigned char dockState){
if(dockState == DOCK_ARM){
ERROR_SET();
}else if(dockState == UNDOCK_ARM){
}
}

View File

@@ -0,0 +1,19 @@
/*
* Misc.h
*
* Created: 5/27/2014 10:19:12 PM
* Author: Corwin
*/
#ifndef MISC_H_
#define MISC_H_
#define DOCK_ARM 1
#define UNDOCK_ARM 0
#include <avr/io.h>
void DockArm(unsigned char dockState);
#endif /* MISC_H_ */

View File

@@ -0,0 +1,114 @@
/*
* Sabertooth.cpp
*
* Created: 4/30/2014 1:08:16 PM
* Author: Corwin
*/
#include "Sabertooth.h"
#include <avr/io.h>
#include <util/delay.h>
Sabertooth::Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT)
{
Sabertooth_USART = USART_SaberUsart; //Sets the private variable to the USART being used
Sabertooth_PORT = SaberPORT; //Sets the private variable for the PORT the USART is on
Sabertooth_PORT->DIRSET = PIN3_bm; //Sets the TX pin for the USART to an output
USART_Format_Set(Sabertooth_USART, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Sets the Sabertooth USART to run in 8 bit data, no parity, and 1 stop bit,
USART_Baudrate_Set(Sabertooth_USART, 207 , 0); //Sets the Sabertooth baud rate to 9600 when running at 32Mhz system clock
USART_Tx_Enable(Sabertooth_USART); //Enable the USART transmit capabilities
_delay_ms(100); //Delay to let things settle
USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
SendDriveCmd(14, 20); //Sets the communication watchdog on the sabertooth to (x*100ms) It's currently set to two seconds.
StopAll(); //Everything is now initialized, stop all motor movement to account for random noise or failed startups
}
void Sabertooth::DriveTest(){
int i;
for(i = 0; i < 64 ; i++){
SendDriveCmd(LEFT_FORWARD, i);
SendDriveCmd(RIGHT_FORWARD, i);
_delay_ms(10);
}
for( ; i > 0 ; i--){
SendDriveCmd(LEFT_FORWARD, i);
SendDriveCmd(RIGHT_FORWARD, i);
_delay_ms(10);
}
for(i = 0; i < 64 ; i++){
SendDriveCmd(LEFT_BACK, i);
SendDriveCmd(RIGHT_BACK, i);
_delay_ms(10);
}
for( ; i > 0 ; i--){
SendDriveCmd(LEFT_BACK, i);
SendDriveCmd(RIGHT_BACK, i);
_delay_ms(10);
}
}
//Left = lower act
//Right = upper act
void Sabertooth::ParsePacket(unsigned char left, unsigned char right){
unsigned char command_left = LEFT_FORWARD;
unsigned char value_left = 0;
unsigned char command_right = RIGHT_FORWARD;
unsigned char value_right = 0;
if(left == 127){
command_left = LEFT_FORWARD;
value_left = 0;
}else if(left < 127){
command_left = LEFT_BACK;
value_left = (127-left);
}else if(left > 127){
command_left = LEFT_FORWARD;
value_left = (left-127);
}
if(right == 127){
command_right = RIGHT_FORWARD;
value_right = 0;
}else if(right < 127){
command_right = RIGHT_BACK;
value_right = (127-right);
}else if(right > 127){
command_right = RIGHT_FORWARD;
value_right = (right-127);
}
SendDriveCmd(command_left, value_left);
SendDriveCmd(command_right, value_right);
}
void Sabertooth::StopAll(){
SendDriveCmd(LEFT_FORWARD, 0);
SendDriveCmd(RIGHT_FORWARD, 0);
}
unsigned char Sabertooth::SaberChecksum(unsigned char command, unsigned char value){
return ((SABERTOOTHADDRESS+command+value) & 127);
}
void Sabertooth::SendDriveCmd(char command, char value){
////////////////////////////////Testing.....
//while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
//USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
////////////////////////////////
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
USART_PutChar(Sabertooth_USART, SABERTOOTHADDRESS); //Sends the address to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, command); //Sends the command to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, value); //Sends the value or speed to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, SaberChecksum(command, value)); //Send the checksum of all these values to the sabertooth
}

View File

@@ -0,0 +1,54 @@
/*
* Sabertooth.h
*
* Created: 4/30/2014 1:08:16 PM
* Author: Corwin
*/
#ifndef __SABERTOOTH_H__
#define __SABERTOOTH_H__
#define F_CPU 32000000UL
#define SABERTOOTHADDRESS 128
#define AUTOBAUD_BYTE 170
#define LEFT_FORWARD 0
#define LEFT_BACK 1
#define RIGHT_FORWARD 4
#define RIGHT_BACK 5
#include <avr/io.h>
#include <util/delay.h>
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
class Sabertooth
{
//variables
public:
protected:
private:
//functions
public:
Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT);
void DriveTest();
void StopAll();
unsigned char SaberChecksum(unsigned char command, unsigned char value);
void ParsePacket(unsigned char left, unsigned char right);
protected:
private:
void SendDriveCmd(char command, char value);
Sabertooth( const Sabertooth &c );
Sabertooth& operator=( const Sabertooth &c );
USART_t *Sabertooth_USART;
PORT_t *Sabertooth_PORT;
}; //Sabertooth
#endif //__SABERTOOTH_H__

View File

@@ -0,0 +1,73 @@
/*
* XMegaMacros.h
*
* Created: 4/25/2014 5:51:17 AM
* Author: Nick
*/
#ifndef XMEGAMACROS_H_
#define XMEGAMACROS_H_
//Custom Defined Macros
#define STATUS1_SET(void) (PORTC.OUTSET = PIN6_bm)
#define STATUS1_CLR(void) (PORTC.OUTCLR = PIN6_bm)
#define STATUS2_SET(void) (PORTC.OUTSET = PIN5_bm)
#define STATUS2_CLR(void) (PORTC.OUTCLR = PIN5_bm)
#define ERROR_SET(void) (PORTC.OUTSET = PIN7_bm)
#define ERROR_CLR(void) (PORTC.OUTCLR = PIN7_bm)
//Motor 1 enable/disables
#define MD1_ENABLE(void) (PORTD.OUTCLR = PIN6_bm)
#define MD1_DISABLE(void) (PORTD.OUTSET = PIN6_bm)
#define MD2_ENABLE(void) (PORTD.OUTCLR = PIN2_bm)
#define MD2_DISABLE(void) (PORTD.OUTSET = PIN2_bm)
//Motor 1 M enable/disables
#define MD1_M0_SET(void) (PORTA.OUTSET = PIN5_bm)
#define MD1_M1_SET(void) (PORTA.OUTSET = PIN6_bm)
#define MD1_M2_SET(void) (PORTA.OUTSET = PIN7_bm)
#define MD1_M0_CLR(void) (PORTA.OUTCLR = PIN5_bm)
#define MD1_M1_CLR(void) (PORTA.OUTCLR = PIN6_bm)
#define MD1_M2_CLR(void) (PORTA.OUTCLR = PIN7_bm)
#define MD2_M0_SET(void) (PORTB.OUTSET = PIN0_bm)
#define MD2_M1_SET(void) (PORTB.OUTSET = PIN1_bm)
#define MD2_M2_SET(void) (PORTB.OUTSET = PIN2_bm)
#define MD2_M0_CLR(void) (PORTB.OUTCLR = PIN0_bm)
#define MD2_M1_CLR(void) (PORTB.OUTCLR = PIN1_bm)
#define MD2_M2_CLR(void) (PORTB.OUTCLR = PIN2_bm)
//Set direction macros
#define MD1_DIR_SET(void) (PORTD.OUTSET = PIN4_bm)
#define MD1_DIR_CLR(void) (PORTD.OUTCLR = PIN4_bm)
#define MD2_DIR_SET(void) (PORTD.OUTSET = PIN0_bm)
#define MD2_DIR_CLR(void) (PORTD.OUTCLR = PIN0_bm)
//Set step macros
#define MD1_STEP_SET(void) (PORTD.OUTSET = PIN5_bm)
#define MD1_STEP_CLR(void) (PORTD.OUTCLR = PIN5_bm)
#define MD2_STEP_SET(void) (PORTD.OUTSET = PIN1_bm)
#define MD2_STEP_CLR(void) (PORTD.OUTCLR = PIN1_bm)
//Limit switch macros
#define CHECK_GRIP_CLOSE(void) (!(PORTA.IN & PIN3_bm)) //Returns true if grip close
#define CHECK_GRIP_LIMIT(void) (PORTB.IN & PIN3_bm) //Returns true if a limit switch has been pressed
#define CHECK_CAL(void) (PORTA.IN & PIN2_bm) //Returns true if cal limit switch has been pressed
#define CHECK_ISROVING(void) (PORTA.IN & PIN4_bm) //Returns true if rover's status is 'roving
//Implied to be false during e-stop condition
//#define BASE_ROT_LIMIT
#endif /* XMEGAMACROS_H_ */

View File

@@ -0,0 +1,43 @@
/*
* adc.cpp
*
* Created: 5/6/2014 6:39:20 PM
* Author: Nick
*/
#include "adc.h"
uint8_t ReadSignatureByte(uint16_t Address)
{
NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
uint8_t Result;
__asm__ ("lpm %0, Z\n" : "=r" (Result) : "z" (Address));
NVM_CMD = NVM_CMD_NO_OPERATION_gc;
return Result;
}
uint16_t ReadADC(uint8_t Channel, uint8_t ADCMode) // Mode = 1 for single ended, 0 for internal
{
if ((ADCA.CTRLA & ADC_ENABLE_bm) == 0)
{
ADCA.CTRLA = ADC_ENABLE_bm ; // Enable the ADC
ADCA.CTRLB = ADC_RESOLUTION_8BIT_gc; // Signed Mode
ADCA.REFCTRL = ADC_REFSEL_VCC_gc; // Internal 1v ref
ADCA.EVCTRL = 0; // no events
ADCA.PRESCALER = ADC_PRESCALER_DIV256_gc ;
ADCA.CALL = ReadSignatureByte(0x20) ; //ADC Calibration Byte 0
ADCA.CALH = ReadSignatureByte(0x21) ; //ADC Calibration Byte 1
_delay_us(400); // Wait at least 25 clocks
}
ADCA.CH0.CTRL = ADC_CH_GAIN_1X_gc | ADCMode ; // Gain = 1, Single Ended
ADCA.CH0.MUXCTRL = (Channel<<3);
ADCA.CH0.INTCTRL = 0 ; // No interrupt
for(uint8_t Waste = 0; Waste<2; Waste++)
{
ADCA.CH0.CTRL |= ADC_CH_START_bm; // Start conversion
while (ADCA.INTFLAGS==0) ; // Wait for complete
ADCA.INTFLAGS = ADCA.INTFLAGS ;
}
return ADCA.CH0RES ;
}

View File

@@ -0,0 +1,28 @@
/*
* adc.h
*
* Contains headers for ADC
*
* Created: 5/6/2014 6:36:17 PM
* Author: Nick
*/
#ifndef ADC_H_
#define ADC_H_
#define F_CPU 32000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <ctype.h>
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
uint8_t ReadSignatureByte(uint16_t Address);
uint16_t ReadADC(uint8_t Channel, uint8_t ADCMode); // Mode = 1 for single ended, 0 for internal
#endif /* ADC_H_ */

View File

@@ -0,0 +1,154 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief This file implements some macros that makes the IAR C-compiler and
* avr-gcc work with the same code base for the AVR architecture.
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
#ifndef COMPILER_AVR_H
#define COMPILER_AVR_H
#ifndef F_CPU
/*! \brief Define default CPU frequency, if this is not already defined. */
#define F_CPU 2000000UL
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
/*! \brief This macro will protect the following code from interrupts. */
#define AVR_ENTER_CRITICAL_REGION( ) uint8_t volatile saved_sreg = SREG; \
cli();
/*! \brief This macro must always be used in conjunction with AVR_ENTER_CRITICAL_REGION
* so the interrupts are enabled again.
*/
#define AVR_LEAVE_CRITICAL_REGION( ) SREG = saved_sreg;
#if defined( __ICCAVR__ )
#include <inavr.h>
#include <ioavr.h>
#include <intrinsics.h>
#include <pgmspace.h>
#ifndef __HAS_ELPM__
#define _MEMATTR __flash
#else /* __HAS_ELPM__ */
#define _MEMATTR __farflash
#endif /* __HAS_ELPM__ */
/*! \brief Perform a delay of \c us microseconds.
*
* The macro F_CPU is supposed to be defined to a constant defining the CPU
* clock frequency (in Hertz).
*
* The maximal possible delay is 262.14 ms / F_CPU in MHz.
*
* \note For the IAR compiler, currently F_CPU must be a
* multiple of 1000000UL (1 MHz).
*/
#define delay_us( us ) ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
/*! \brief Preprocessor magic.
*
* Some preprocessor magic to allow for a header file abstraction of
* interrupt service routine declarations for the IAR compiler. This
* requires the use of the C99 _Pragma() directive (rather than the
* old #pragma one that could not be used as a macro replacement), as
* well as two different levels of preprocessor concetanations in
* order to do both, assign the correct interrupt vector name, as well
* as construct a unique function name for the ISR.
*
* \note Do *NOT* try to reorder the macros below, as this will only
* work in the given order.
*/
#define PRAGMA(x) _Pragma( #x )
#define ISR(vec) PRAGMA( vector=vec ) __interrupt void handler_##vec(void)
#define sei( ) (__enable_interrupt( ))
#define cli( ) (__disable_interrupt( ))
/*! \brief Define the no operation macro. */
#define nop( ) (__no_operation())
/*! \brief Define the watchdog reset macro. */
#define watchdog_reset( ) (__watchdog_reset( ))
#define INLINE PRAGMA( inline=forced ) static
#define FLASH_DECLARE(x) _MEMATTR x
#define FLASH_STRING(x) ((_MEMATTR const char *)(x))
#define FLASH_STRING_T char const _MEMATTR *
#define FLASH_BYTE_ARRAY_T uint8_t const _MEMATTR *
#define PGM_READ_BYTE(x) *(x)
#define PGM_READ_WORD(x) *(x)
#define SHORTENUM /**/
#elif defined( __GNUC__ )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
/*! \brief Define the delay_us macro for GCC. */
#define delay_us( us ) (_delay_us( us ))
#define INLINE static inline
/*! \brief Define the no operation macro. */
#define nop() do { __asm__ __volatile__ ("nop"); } while (0)
#define MAIN_TASK_PROLOGUE int
#define MAIN_TASK_EPILOGUE() return -1;
#define SHORTENUM __attribute__ ((packed))
#else
#error Compiler not supported.
#endif
#endif

View File

@@ -0,0 +1,43 @@
/*
* motorInfo.cpp
*
* Created: 5/7/2014 3:17:28 AM
* Author: Nick
*/
//LINEAR ACTUATOR REFERENCE DIRECTION
//- retract outer, retract inner
#include "motorInfo.h"
// default constructor
motorInfo::motorInfo() {
acceptableCount = 0;
acceptableCountMax = 5;
acceptableError = .2; //Needs calibration
slowRange = .75;
speed = 100;
enabled = 0;
//currentPos = 0;
} //motorInfo
// default destructor
motorInfo::~motorInfo() {
} //~motorInfo
void motorInfo::enable(){
enabled = 1;
}
void motorInfo::disable(){
enabled = 0;
}
void motorInfo::setDesired(float desired){
desiredPos = desired; //Mutate desiredPos
}

View File

@@ -0,0 +1,44 @@
/*
* motorInfo.h
*
* Created: 5/7/2014 3:17:28 AM
* Author: Nick
*/
#ifndef __MOTORINFO_H__
#define __MOTORINFO_H__
class motorInfo
{
//variables
public:
int acceptableCountMax;
int acceptableCount;
double acceptableError;
double slowRange;
int speed;
int enabled;
double currentPos; //Current pos in inches
volatile double desiredPos; //Desired pos in inches
protected:
private:
//functions
public:
motorInfo();
~motorInfo();
void enable();
void disable();
void setDesired(float desired);
protected:
private:
motorInfo( const motorInfo &c );
motorInfo& operator=( const motorInfo &c );
}; //motorInfo
#endif //__MOTORINFO_H__

View File

@@ -0,0 +1,114 @@
/*
* rotateStepper.cpp
*
* Created: 5/7/2014 7:12:28 AM
* Author: Nick
*/
#define F_CPU 32000000UL
#include "rotateStepper.h"
#include "XMegaMacros.h"
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "stepperInfo.h"
extern "C" {
#include "avr_compiler.h"
#include "usart_driver.h"
};
// default constructor
rotateStepper::rotateStepper() {
calSpan = 255; //TODO: Set to actual value
multiplier = -1; //Invalid (not set) state
currentAngle = 0; //It will have its reference based off of the 2nd limit switch,
//but the interface function will minus the amount to make 0 forward
} //rotateStepper
// default destructor
rotateStepper::~rotateStepper()
{
} //~rotateStepper
void rotateStepper::rotateBase(int desiredAngle){
//NEED INPUT CHEKCING
int zeroedAngle = desiredAngle + 36.09;
moveBase(zeroedAngle - currentAngle);
currentAngle = currentAngle + (zeroedAngle - currentAngle);
}
void rotateStepper::calibrateBase(){
bool calInProgress = true;
bool calFirstPress = false;
//bool calSecondPress = false;
int calButtonState;
int stepCount = 0;
MD2_DIR_CLR(); //Set arm to turn counter-clockwise
while (calInProgress){
while(!CHECK_ISROVING());
calButtonState = CHECK_CAL();
if(calButtonState && !calFirstPress){
calFirstPress = true;
MD2_DIR_SET(); //Sets arm to clockwise
_delay_ms(1200); //For gracefulness
}
if(calFirstPress == true)
++stepCount;
if(calFirstPress && stepCount > 150 && CHECK_CAL()){
calInProgress = false;
}
MD2_STEP_CLR();
_delay_us(600);
MD2_STEP_SET();
_delay_us(600);
}
currentAngle = 0;
multiplier = stepCount / calSpan;
_delay_ms(1200); //For gracefulness
}
//Multiplier is steps per degree
//Helper function
void rotateStepper::moveBase(int degreesToMove){
if (degreesToMove > 0)
MD2_DIR_CLR(); //Counter Clockwise
else
MD2_DIR_SET(); //Clockwise
int stepsToMove = abs(degreesToMove) * multiplier;
for(int i = 0; i < stepsToMove; ++i){
while(!CHECK_ISROVING()); //e-stop check
MD2_STEP_CLR();
_delay_us(400);
MD2_STEP_SET();
_delay_us(500);
}
}

View File

@@ -0,0 +1,43 @@
/*
* rotateStepper.h
*
* Created: 5/7/2014 7:12:28 AM
* Author: Nick
*/
#ifndef __ROTATESTEPPER_H__
#define __ROTATESTEPPER_H__
class rotateStepper
{
//variables
public:
double multiplier;
double calSpan;
int currentAngle;
volatile int desiredPos;
protected:
private:
//functions
public:
rotateStepper();
~rotateStepper();
void rotateBase(int desiredAngle);
void calibrateBase();
void moveBase(int degreesToMove); //Helper function
protected:
private:
rotateStepper( const rotateStepper &c );
rotateStepper& operator=( const rotateStepper &c );
}; //rotateStepper
#endif //__ROTATESTEPPER_H__

View File

@@ -0,0 +1,107 @@
/*
* stepperInfo.cpp
*
* Created: 5/7/2014 6:19:00 AM
* Author: Nick
*/
#define F_CPU 32000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "stepperInfo.h"
extern "C" {
#include "avr_compiler.h"
#include "usart_driver.h"
};
extern void SendStringPC(char *stufftosend);
// default constructor
stepperInfo::stepperInfo() {
enabled = 0;
currentState = -1;
init = 1; //Init state (ignore first push)
} //stepperInfo
// default destructor
stepperInfo::~stepperInfo()
{
} //~stepperInfo
//Used for the gripping stepper
void stepperInfo::processCommand(int cmd){
if(!enabled)
return; //TODO: MAKE BETTER
if(cmd != GRIP && cmd != RELEASE)
return;
if(cmd == currentState)
return;
currentState = cmd;
//char sendBuffer[200];
//sprintf(sendBuffer, "Reached process command");
//SendStringPC(sendBuffer);
//GET DIRECTION
//CLR IS OUT
//SET is grip
//CLR is release
if(cmd == GRIP)
MD1_DIR_SET();
else if (cmd == RELEASE)
MD1_DIR_CLR();
if(!init){
for(int i = 0; i < 10000; ++i){
while(!CHECK_ISROVING()); //e-stop check
MD1_STEP_SET();
_delay_us(50);
MD1_STEP_CLR();
_delay_us(500);
}
}
else {
init = 0;
}
//MOVE UNTIL LIMIT OR GRIP
if(cmd == GRIP){
for(long i = 0; i < 185000; ++i){
while(!CHECK_ISROVING()); //e-stop check
MD1_STEP_SET();
_delay_us(20);
MD1_STEP_CLR();
_delay_us(40);
}
}else if(cmd == RELEASE){
while(!CHECK_GRIP_LIMIT()){
while(!CHECK_ISROVING()); //e-stop check
MD1_STEP_SET();
_delay_us(20);
MD1_STEP_CLR();
_delay_us(40);
}
}
enabled = 0;
}
void stepperInfo::enable(){
enabled = 1;
}

View File

@@ -0,0 +1,40 @@
/*
* stepperInfo.h
*
* Created: 5/7/2014 6:19:00 AM
* Author: Nick
*/
#include "XMegaMacros.h"
#ifndef __STEPPERINFO_H__
#define __STEPPERINFO_H__
#define GRIP 0
#define RELEASE 1
class stepperInfo
{
//variables
public:
int enabled;
int currentState;
int init;
volatile unsigned char desiredGripState;
protected:
private:
//functions
public:
stepperInfo();
~stepperInfo();
void processCommand(int cmd);
void enable();
protected:
private:
stepperInfo( const stepperInfo &c );
stepperInfo& operator=( const stepperInfo &c );
}; //stepperInfo
#endif //__STEPPERINFO_H__

View File

@@ -0,0 +1,320 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief
* XMEGA USART driver source file.
*
* This file contains the function implementations the XMEGA interrupt
* and polled USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* Some functions use the following construct:
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
* in some occasions the operator makes it possible to write pretty clean and
* neat code. In this driver, the construct is used to set or not set a
* configuration bit based on a boolean input parameter, such as
* the "some_parameter" in the example above.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include "usart_driver.h"
/*! \brief Initializes buffer and selects what USART module to use.
*
* Initializes receive and transmit buffer and selects what USART module to use,
* and stores the data register empty interrupt level.
*
* \param usart_data The USART_data_t struct instance.
* \param usart The USART module.
* \param dreIntLevel Data register empty interrupt level.
*/
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->usart = usart;
usart_data->dreIntLevel = dreIntLevel;
usart_data->buffer.RX_Tail = 0;
usart_data->buffer.RX_Head = 0;
usart_data->buffer.TX_Tail = 0;
usart_data->buffer.TX_Head = 0;
}
/*! \brief Set USART DRE interrupt level.
*
* Set the interrupt level on Data Register interrupt.
*
* \note Changing the DRE interrupt level in the interrupt driver while it is
* running will not change the DRE interrupt level in the USART before the
* DRE interrupt have been disabled and enabled again.
*
* \param usart_data The USART_data_t struct instance
* \param dreIntLevel Interrupt level of the DRE interrupt.
*/
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->dreIntLevel = dreIntLevel;
}
/*! \brief Test if there is data in the transmitter software buffer.
*
* This function can be used to test if there is free space in the transmitter
* software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = (usart_data->buffer.TX_Head + 1) & USART_TX_BUFFER_MASK;
uint8_t tempTail = usart_data->buffer.TX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Put data (5-8 bit character).
*
* Stores data byte in TX software buffer and enables DRE interrupt if there
* is free space in the TX software buffer.
*
* \param usart_data The USART_data_t struct instance.
* \param data The data to send.
*/
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
{
uint8_t tempCTRLA;
uint8_t tempTX_Head;
bool TXBuffer_FreeSpace;
USART_Buffer_t * TXbufPtr;
TXbufPtr = &usart_data->buffer;
TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);
if(TXBuffer_FreeSpace)
{
tempTX_Head = TXbufPtr->TX_Head;
TXbufPtr->TX[tempTX_Head]= data;
/* Advance buffer head. */
TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;
/* Enable DRE interrupt. */
tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
usart_data->usart->CTRLA = tempCTRLA;
}
return TXBuffer_FreeSpace;
}
/*! \brief Test if there is data in the receive software buffer.
*
* This function can be used to test if there is data in the receive software
* buffer.
*
* \param usart_data The USART_data_t struct instance
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_RXBufferData_Available(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = usart_data->buffer.RX_Head;
uint8_t tempTail = usart_data->buffer.RX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Get received data (5-8 bit character).
*
* The function USART_RXBufferData_Available should be used before this
* function is used to ensure that data is available.
*
* Returns data from RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \return Received data.
*/
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
uint8_t ans;
bufPtr = &usart_data->buffer;
ans = (bufPtr->RX[bufPtr->RX_Tail]);
/* Advance buffer tail. */
bufPtr->RX_Tail = (bufPtr->RX_Tail + 1) & USART_RX_BUFFER_MASK;
return ans;
}
/*! \brief RX Complete Interrupt Service Routine.
*
* RX Complete Interrupt Service Routine.
* Stores received data in RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*/
bool USART_RXComplete(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bool ans;
bufPtr = &usart_data->buffer;
/* Advance buffer head. */
uint8_t tempRX_Head = (bufPtr->RX_Head + 1) & USART_RX_BUFFER_MASK;
/* Check for overflow. */
uint8_t tempRX_Tail = bufPtr->RX_Tail;
uint8_t data = usart_data->usart->DATA;
if (tempRX_Head == tempRX_Tail) {
ans = false;
}else{
ans = true;
usart_data->buffer.RX[usart_data->buffer.RX_Head] = data;
usart_data->buffer.RX_Head = tempRX_Head;
}
return ans;
}
/*! \brief Data Register Empty Interrupt Service Routine.
*
* Data Register Empty Interrupt Service Routine.
* Transmits one byte from TX software buffer. Disables DRE interrupt if buffer
* is empty. Argument is pointer to USART (USART_data_t).
*
* \param usart_data The USART_data_t struct instance.
*/
void USART_DataRegEmpty(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bufPtr = &usart_data->buffer;
/* Check if all data is transmitted. */
uint8_t tempTX_Tail = usart_data->buffer.TX_Tail;
if (bufPtr->TX_Head == tempTX_Tail){
/* Disable DRE interrupts. */
uint8_t tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc;
usart_data->usart->CTRLA = tempCTRLA;
}else{
/* Start transmitting. */
uint8_t data = bufPtr->TX[usart_data->buffer.TX_Tail];
usart_data->usart->DATA = data;
/* Advance buffer tail. */
bufPtr->TX_Tail = (bufPtr->TX_Tail + 1) & USART_TX_BUFFER_MASK;
}
}
/*! \brief Put data (9 bit character).
*
* Use the function USART_IsTXDataRegisterEmpty before using this function to
* put 9 bit character to the TX register.
*
* \param usart The USART module.
* \param data The data to send.
*/
void USART_NineBits_PutChar(USART_t * usart, uint16_t data)
{
if(data & 0x0100) {
usart->CTRLB |= USART_TXB8_bm;
}else {
usart->CTRLB &= ~USART_TXB8_bm;
}
usart->DATA = (data & 0x00FF);
}
/*! \brief Get received data (9 bit character).
*
* This function reads out the received 9 bit character (uint16_t).
* Use the function USART_IsRXComplete to check if anything is received.
*
* \param usart The USART module.
*
* \retval Received data.
*/
uint16_t USART_NineBits_GetChar(USART_t * usart)
{
if(usart->CTRLB & USART_RXB8_bm) {
return(0x0100 | usart->DATA);
}else {
return(usart->DATA);
}
}

View File

@@ -0,0 +1,306 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief XMEGA USART driver header file.
*
* This file contains the function prototypes and enumerator definitions
* for various configuration parameters for the XMEGA USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef USART_DRIVER_H
#define USART_DRIVER_H
#include "avr_compiler.h"
/* USART buffer defines. */
/* \brief Receive buffer size: 2,4,8,16,32,64,128 or 256 bytes. */
#define USART_RX_BUFFER_SIZE 4
/* \brief Transmit buffer size: 2,4,8,16,32,64,128 or 256 bytes */
#define USART_TX_BUFFER_SIZE 4
/* \brief Receive buffer mask. */
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
/* \brief Transmit buffer mask. */
#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
#error RX buffer size is not a power of 2
#endif
#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )
#error TX buffer size is not a power of 2
#endif
/* \brief USART transmit and receive ring buffer. */
typedef struct USART_Buffer
{
/* \brief Receive buffer. */
volatile uint8_t RX[USART_RX_BUFFER_SIZE];
/* \brief Transmit buffer. */
volatile uint8_t TX[USART_TX_BUFFER_SIZE];
/* \brief Receive buffer head. */
volatile uint8_t RX_Head;
/* \brief Receive buffer tail. */
volatile uint8_t RX_Tail;
/* \brief Transmit buffer head. */
volatile uint8_t TX_Head;
/* \brief Transmit buffer tail. */
volatile uint8_t TX_Tail;
} USART_Buffer_t;
/*! \brief Struct used when interrupt driven driver is used.
*
* Struct containing pointer to a usart, a buffer and a location to store Data
* register interrupt level temporary.
*/
typedef struct Usart_and_buffer
{
/* \brief Pointer to USART module to use. */
USART_t * usart;
/* \brief Data register empty interrupt level. */
USART_DREINTLVL_t dreIntLevel;
/* \brief Data buffer. */
USART_Buffer_t buffer;
} USART_data_t;
/* Macros. */
/*! \brief Macro that sets the USART frame format.
*
* Sets the frame format, Frame Size, parity mode and number of stop bits.
*
* \param _usart Pointer to the USART module
* \param _charSize The character size. Use USART_CHSIZE_t type.
* \param _parityMode The parity Mode. Use USART_PMODE_t type.
* \param _twoStopBits Enable two stop bit mode. Use bool type.
*/
#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits) \
(_usart)->CTRLC = (uint8_t) _charSize | _parityMode | \
(_twoStopBits ? USART_SBMODE_bm : 0)
/*! \brief Set USART baud rate.
*
* Sets the USART's baud rate register.
*
* UBRR_Value : Value written to UBRR
* ScaleFactor : Time Base Generator Scale Factor
*
* Equation for calculation of BSEL value in asynchronous normal speed mode:
* If ScaleFactor >= 0
* BSEL = ((I/O clock frequency)/(2^(ScaleFactor)*16*Baudrate))-1
* If ScaleFactor < 0
* BSEL = (1/(2^(ScaleFactor)*16))*(((I/O clock frequency)/Baudrate)-1)
*
* \note See XMEGA manual for equations for calculation of BSEL value in other
* modes.
*
* \param _usart Pointer to the USART module.
* \param _bselValue Value to write to BSEL part of Baud control register.
* Use uint16_t type.
* \param _bScaleFactor USART baud rate scale factor.
* Use uint8_t type
*/
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor) \
(_usart)->BAUDCTRLA =(uint8_t)_bselValue; \
(_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)
/*! \brief Enable USART receiver.
*
* \param _usart Pointer to the USART module
*/
#define USART_Rx_Enable(_usart) ((_usart)->CTRLB |= USART_RXEN_bm)
/*! \brief Disable USART receiver.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Rx_Disable(_usart) ((_usart)->CTRLB &= ~USART_RXEN_bm)
/*! \brief Enable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Enable(_usart) ((_usart)->CTRLB |= USART_TXEN_bm)
/*! \brief Disable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Disable(_usart) ((_usart)->CTRLB &= ~USART_TXEN_bm)
/*! \brief Set USART RXD interrupt level.
*
* Sets the interrupt level on RX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _rxdIntLevel Interrupt level of the RXD interrupt.
* Use USART_RXCINTLVL_t type.
*/
#define USART_RxdInterruptLevel_Set(_usart, _rxdIntLevel) \
((_usart)->CTRLA = ((_usart)->CTRLA & ~USART_RXCINTLVL_gm) | _rxdIntLevel)
/*! \brief Set USART TXD interrupt level.
*
* Sets the interrupt level on TX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _txdIntLevel Interrupt level of the TXD interrupt.
* Use USART_TXCINTLVL_t type.
*/
#define USART_TxdInterruptLevel_Set(_usart, _txdIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_TXCINTLVL_gm) | _txdIntLevel
/*! \brief Set USART DRE interrupt level.
*
* Sets the interrupt level on Data Register interrupt.
*
* \param _usart Pointer to the USART module.
* \param _dreIntLevel Interrupt level of the DRE interrupt.
* Use USART_DREINTLVL_t type.
*/
#define USART_DreInterruptLevel_Set(_usart, _dreIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_DREINTLVL_gm) | _dreIntLevel
/*! \brief Set the mode the USART run in.
*
* Set the mode the USART run in. The default mode is asynchronous mode.
*
* \param _usart Pointer to the USART module register section.
* \param _usartMode Selects the USART mode. Use USART_CMODE_t type.
*
* USART modes:
* - 0x0 : Asynchronous mode.
* - 0x1 : Synchronous mode.
* - 0x2 : IrDA mode.
* - 0x3 : Master SPI mode.
*/
#define USART_SetMode(_usart, _usartMode) \
((_usart)->CTRLC = ((_usart)->CTRLC & (~USART_CMODE_gm)) | _usartMode)
/*! \brief Check if data register empty flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsTXDataRegisterEmpty(_usart) (((_usart)->STATUS & USART_DREIF_bm) != 0)
/*! \brief Put data (5-8 bit character).
*
* Use the macro USART_IsTXDataRegisterEmpty before using this function to
* put data to the TX register.
*
* \param _usart The USART module.
* \param _data The data to send.
*/
#define USART_PutChar(_usart, _data) ((_usart)->DATA = _data)
/*! \brief Checks if the RX complete interrupt flag is set.
*
* Checks if the RX complete interrupt flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsRXComplete(_usart) (((_usart)->STATUS & USART_RXCIF_bm) != 0)
/*! \brief Get received data (5-8 bit character).
*
* This macro reads out the RX register.
* Use the macro USART_RX_Complete to check if anything is received.
*
* \param _usart The USART module.
*
* \retval Received data.
*/
#define USART_GetChar(_usart) ((_usart)->DATA)
/* Functions for interrupt driven driver. */
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel );
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel);
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data);
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data);
bool USART_RXBufferData_Available(USART_data_t * usart_data);
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data);
bool USART_RXComplete(USART_data_t * usart_data);
void USART_DataRegEmpty(USART_data_t * usart_data);
/* Functions for polled driver. */
void USART_NineBits_PutChar(USART_t * usart, uint16_t data);
uint16_t USART_NineBits_GetChar(USART_t * usart);
#endif

View File

@@ -0,0 +1,3 @@
Firmware for all final boards should go here.
All firmware developed using Atmel Studio 6.2.

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "DistanceRadioRover", "DistanceRadioRover.cppproj", "{0646594B-D684-48EF-AAB5-9601FAFC53D7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0646594B-D684-48EF-AAB5-9601FAFC53D7}.Debug|AVR.ActiveCfg = Debug|AVR
{0646594B-D684-48EF-AAB5-9601FAFC53D7}.Debug|AVR.Build.0 = Debug|AVR
{0646594B-D684-48EF-AAB5-9601FAFC53D7}.Release|AVR.ActiveCfg = Release|AVR
{0646594B-D684-48EF-AAB5-9601FAFC53D7}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,17 @@
/*
* DistanceRadioRover.cpp
*
* Created: 4/23/2014 2:39:40 AM
* Author: corwin
*/
#include <avr/io.h>
int main(void)
{
while(1)
{
//TODO:: Please write your application code
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.2</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC8.CPP</ToolchainName>
<ProjectGuid>{0646594b-d684-48ef-aab5-9601fafc53d7}</ProjectGuid>
<avrdevice>ATxmega32D4</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>CPP</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>DistanceRadioRover</AssemblyName>
<Name>DistanceRadioRover</Name>
<RootNamespace>DistanceRadioRover</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress />
<UncachedRange />
<OverrideVtorValue />
<BootSegment>2</BootSegment>
<eraseonlaunchrule>1</eraseonlaunchrule>
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.15.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize (-O1)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.optimization.DebugLevel>Default (-g2)</avrgcccpp.compiler.optimization.DebugLevel>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
<avrgcccpp.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcccpp.assembler.debugging.DebugLevel>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="DistanceRadioRover.cpp">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@@ -0,0 +1,154 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief This file implements some macros that makes the IAR C-compiler and
* avr-gcc work with the same code base for the AVR architecture.
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
#ifndef COMPILER_AVR_H
#define COMPILER_AVR_H
#ifndef F_CPU
/*! \brief Define default CPU frequency, if this is not already defined. */
#define F_CPU 2000000UL
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
/*! \brief This macro will protect the following code from interrupts. */
#define AVR_ENTER_CRITICAL_REGION( ) uint8_t volatile saved_sreg = SREG; \
cli();
/*! \brief This macro must always be used in conjunction with AVR_ENTER_CRITICAL_REGION
* so the interrupts are enabled again.
*/
#define AVR_LEAVE_CRITICAL_REGION( ) SREG = saved_sreg;
#if defined( __ICCAVR__ )
#include <inavr.h>
#include <ioavr.h>
#include <intrinsics.h>
#include <pgmspace.h>
#ifndef __HAS_ELPM__
#define _MEMATTR __flash
#else /* __HAS_ELPM__ */
#define _MEMATTR __farflash
#endif /* __HAS_ELPM__ */
/*! \brief Perform a delay of \c us microseconds.
*
* The macro F_CPU is supposed to be defined to a constant defining the CPU
* clock frequency (in Hertz).
*
* The maximal possible delay is 262.14 ms / F_CPU in MHz.
*
* \note For the IAR compiler, currently F_CPU must be a
* multiple of 1000000UL (1 MHz).
*/
#define delay_us( us ) ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
/*! \brief Preprocessor magic.
*
* Some preprocessor magic to allow for a header file abstraction of
* interrupt service routine declarations for the IAR compiler. This
* requires the use of the C99 _Pragma() directive (rather than the
* old #pragma one that could not be used as a macro replacement), as
* well as two different levels of preprocessor concetanations in
* order to do both, assign the correct interrupt vector name, as well
* as construct a unique function name for the ISR.
*
* \note Do *NOT* try to reorder the macros below, as this will only
* work in the given order.
*/
#define PRAGMA(x) _Pragma( #x )
#define ISR(vec) PRAGMA( vector=vec ) __interrupt void handler_##vec(void)
#define sei( ) (__enable_interrupt( ))
#define cli( ) (__disable_interrupt( ))
/*! \brief Define the no operation macro. */
#define nop( ) (__no_operation())
/*! \brief Define the watchdog reset macro. */
#define watchdog_reset( ) (__watchdog_reset( ))
#define INLINE PRAGMA( inline=forced ) static
#define FLASH_DECLARE(x) _MEMATTR x
#define FLASH_STRING(x) ((_MEMATTR const char *)(x))
#define FLASH_STRING_T char const _MEMATTR *
#define FLASH_BYTE_ARRAY_T uint8_t const _MEMATTR *
#define PGM_READ_BYTE(x) *(x)
#define PGM_READ_WORD(x) *(x)
#define SHORTENUM /**/
#elif defined( __GNUC__ )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
/*! \brief Define the delay_us macro for GCC. */
#define delay_us( us ) (_delay_us( us ))
#define INLINE static inline
/*! \brief Define the no operation macro. */
#define nop() do { __asm__ __volatile__ ("nop"); } while (0)
#define MAIN_TASK_PROLOGUE int
#define MAIN_TASK_EPILOGUE() return -1;
#define SHORTENUM __attribute__ ((packed))
#else
#error Compiler not supported.
#endif
#endif

View File

@@ -0,0 +1,320 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief
* XMEGA USART driver source file.
*
* This file contains the function implementations the XMEGA interrupt
* and polled USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* Some functions use the following construct:
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
* in some occasions the operator makes it possible to write pretty clean and
* neat code. In this driver, the construct is used to set or not set a
* configuration bit based on a boolean input parameter, such as
* the "some_parameter" in the example above.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include "usart_driver.h"
/*! \brief Initializes buffer and selects what USART module to use.
*
* Initializes receive and transmit buffer and selects what USART module to use,
* and stores the data register empty interrupt level.
*
* \param usart_data The USART_data_t struct instance.
* \param usart The USART module.
* \param dreIntLevel Data register empty interrupt level.
*/
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->usart = usart;
usart_data->dreIntLevel = dreIntLevel;
usart_data->buffer.RX_Tail = 0;
usart_data->buffer.RX_Head = 0;
usart_data->buffer.TX_Tail = 0;
usart_data->buffer.TX_Head = 0;
}
/*! \brief Set USART DRE interrupt level.
*
* Set the interrupt level on Data Register interrupt.
*
* \note Changing the DRE interrupt level in the interrupt driver while it is
* running will not change the DRE interrupt level in the USART before the
* DRE interrupt have been disabled and enabled again.
*
* \param usart_data The USART_data_t struct instance
* \param dreIntLevel Interrupt level of the DRE interrupt.
*/
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->dreIntLevel = dreIntLevel;
}
/*! \brief Test if there is data in the transmitter software buffer.
*
* This function can be used to test if there is free space in the transmitter
* software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = (usart_data->buffer.TX_Head + 1) & USART_TX_BUFFER_MASK;
uint8_t tempTail = usart_data->buffer.TX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Put data (5-8 bit character).
*
* Stores data byte in TX software buffer and enables DRE interrupt if there
* is free space in the TX software buffer.
*
* \param usart_data The USART_data_t struct instance.
* \param data The data to send.
*/
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
{
uint8_t tempCTRLA;
uint8_t tempTX_Head;
bool TXBuffer_FreeSpace;
USART_Buffer_t * TXbufPtr;
TXbufPtr = &usart_data->buffer;
TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);
if(TXBuffer_FreeSpace)
{
tempTX_Head = TXbufPtr->TX_Head;
TXbufPtr->TX[tempTX_Head]= data;
/* Advance buffer head. */
TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;
/* Enable DRE interrupt. */
tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
usart_data->usart->CTRLA = tempCTRLA;
}
return TXBuffer_FreeSpace;
}
/*! \brief Test if there is data in the receive software buffer.
*
* This function can be used to test if there is data in the receive software
* buffer.
*
* \param usart_data The USART_data_t struct instance
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_RXBufferData_Available(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = usart_data->buffer.RX_Head;
uint8_t tempTail = usart_data->buffer.RX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Get received data (5-8 bit character).
*
* The function USART_RXBufferData_Available should be used before this
* function is used to ensure that data is available.
*
* Returns data from RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \return Received data.
*/
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
uint8_t ans;
bufPtr = &usart_data->buffer;
ans = (bufPtr->RX[bufPtr->RX_Tail]);
/* Advance buffer tail. */
bufPtr->RX_Tail = (bufPtr->RX_Tail + 1) & USART_RX_BUFFER_MASK;
return ans;
}
/*! \brief RX Complete Interrupt Service Routine.
*
* RX Complete Interrupt Service Routine.
* Stores received data in RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*/
bool USART_RXComplete(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bool ans;
bufPtr = &usart_data->buffer;
/* Advance buffer head. */
uint8_t tempRX_Head = (bufPtr->RX_Head + 1) & USART_RX_BUFFER_MASK;
/* Check for overflow. */
uint8_t tempRX_Tail = bufPtr->RX_Tail;
uint8_t data = usart_data->usart->DATA;
if (tempRX_Head == tempRX_Tail) {
ans = false;
}else{
ans = true;
usart_data->buffer.RX[usart_data->buffer.RX_Head] = data;
usart_data->buffer.RX_Head = tempRX_Head;
}
return ans;
}
/*! \brief Data Register Empty Interrupt Service Routine.
*
* Data Register Empty Interrupt Service Routine.
* Transmits one byte from TX software buffer. Disables DRE interrupt if buffer
* is empty. Argument is pointer to USART (USART_data_t).
*
* \param usart_data The USART_data_t struct instance.
*/
void USART_DataRegEmpty(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bufPtr = &usart_data->buffer;
/* Check if all data is transmitted. */
uint8_t tempTX_Tail = usart_data->buffer.TX_Tail;
if (bufPtr->TX_Head == tempTX_Tail){
/* Disable DRE interrupts. */
uint8_t tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc;
usart_data->usart->CTRLA = tempCTRLA;
}else{
/* Start transmitting. */
uint8_t data = bufPtr->TX[usart_data->buffer.TX_Tail];
usart_data->usart->DATA = data;
/* Advance buffer tail. */
bufPtr->TX_Tail = (bufPtr->TX_Tail + 1) & USART_TX_BUFFER_MASK;
}
}
/*! \brief Put data (9 bit character).
*
* Use the function USART_IsTXDataRegisterEmpty before using this function to
* put 9 bit character to the TX register.
*
* \param usart The USART module.
* \param data The data to send.
*/
void USART_NineBits_PutChar(USART_t * usart, uint16_t data)
{
if(data & 0x0100) {
usart->CTRLB |= USART_TXB8_bm;
}else {
usart->CTRLB &= ~USART_TXB8_bm;
}
usart->DATA = (data & 0x00FF);
}
/*! \brief Get received data (9 bit character).
*
* This function reads out the received 9 bit character (uint16_t).
* Use the function USART_IsRXComplete to check if anything is received.
*
* \param usart The USART module.
*
* \retval Received data.
*/
uint16_t USART_NineBits_GetChar(USART_t * usart)
{
if(usart->CTRLB & USART_RXB8_bm) {
return(0x0100 | usart->DATA);
}else {
return(usart->DATA);
}
}

View File

@@ -0,0 +1,306 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief XMEGA USART driver header file.
*
* This file contains the function prototypes and enumerator definitions
* for various configuration parameters for the XMEGA USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef USART_DRIVER_H
#define USART_DRIVER_H
#include "avr_compiler.h"
/* USART buffer defines. */
/* \brief Receive buffer size: 2,4,8,16,32,64,128 or 256 bytes. */
#define USART_RX_BUFFER_SIZE 4
/* \brief Transmit buffer size: 2,4,8,16,32,64,128 or 256 bytes */
#define USART_TX_BUFFER_SIZE 4
/* \brief Receive buffer mask. */
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
/* \brief Transmit buffer mask. */
#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
#error RX buffer size is not a power of 2
#endif
#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )
#error TX buffer size is not a power of 2
#endif
/* \brief USART transmit and receive ring buffer. */
typedef struct USART_Buffer
{
/* \brief Receive buffer. */
volatile uint8_t RX[USART_RX_BUFFER_SIZE];
/* \brief Transmit buffer. */
volatile uint8_t TX[USART_TX_BUFFER_SIZE];
/* \brief Receive buffer head. */
volatile uint8_t RX_Head;
/* \brief Receive buffer tail. */
volatile uint8_t RX_Tail;
/* \brief Transmit buffer head. */
volatile uint8_t TX_Head;
/* \brief Transmit buffer tail. */
volatile uint8_t TX_Tail;
} USART_Buffer_t;
/*! \brief Struct used when interrupt driven driver is used.
*
* Struct containing pointer to a usart, a buffer and a location to store Data
* register interrupt level temporary.
*/
typedef struct Usart_and_buffer
{
/* \brief Pointer to USART module to use. */
USART_t * usart;
/* \brief Data register empty interrupt level. */
USART_DREINTLVL_t dreIntLevel;
/* \brief Data buffer. */
USART_Buffer_t buffer;
} USART_data_t;
/* Macros. */
/*! \brief Macro that sets the USART frame format.
*
* Sets the frame format, Frame Size, parity mode and number of stop bits.
*
* \param _usart Pointer to the USART module
* \param _charSize The character size. Use USART_CHSIZE_t type.
* \param _parityMode The parity Mode. Use USART_PMODE_t type.
* \param _twoStopBits Enable two stop bit mode. Use bool type.
*/
#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits) \
(_usart)->CTRLC = (uint8_t) _charSize | _parityMode | \
(_twoStopBits ? USART_SBMODE_bm : 0)
/*! \brief Set USART baud rate.
*
* Sets the USART's baud rate register.
*
* UBRR_Value : Value written to UBRR
* ScaleFactor : Time Base Generator Scale Factor
*
* Equation for calculation of BSEL value in asynchronous normal speed mode:
* If ScaleFactor >= 0
* BSEL = ((I/O clock frequency)/(2^(ScaleFactor)*16*Baudrate))-1
* If ScaleFactor < 0
* BSEL = (1/(2^(ScaleFactor)*16))*(((I/O clock frequency)/Baudrate)-1)
*
* \note See XMEGA manual for equations for calculation of BSEL value in other
* modes.
*
* \param _usart Pointer to the USART module.
* \param _bselValue Value to write to BSEL part of Baud control register.
* Use uint16_t type.
* \param _bScaleFactor USART baud rate scale factor.
* Use uint8_t type
*/
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor) \
(_usart)->BAUDCTRLA =(uint8_t)_bselValue; \
(_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)
/*! \brief Enable USART receiver.
*
* \param _usart Pointer to the USART module
*/
#define USART_Rx_Enable(_usart) ((_usart)->CTRLB |= USART_RXEN_bm)
/*! \brief Disable USART receiver.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Rx_Disable(_usart) ((_usart)->CTRLB &= ~USART_RXEN_bm)
/*! \brief Enable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Enable(_usart) ((_usart)->CTRLB |= USART_TXEN_bm)
/*! \brief Disable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Disable(_usart) ((_usart)->CTRLB &= ~USART_TXEN_bm)
/*! \brief Set USART RXD interrupt level.
*
* Sets the interrupt level on RX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _rxdIntLevel Interrupt level of the RXD interrupt.
* Use USART_RXCINTLVL_t type.
*/
#define USART_RxdInterruptLevel_Set(_usart, _rxdIntLevel) \
((_usart)->CTRLA = ((_usart)->CTRLA & ~USART_RXCINTLVL_gm) | _rxdIntLevel)
/*! \brief Set USART TXD interrupt level.
*
* Sets the interrupt level on TX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _txdIntLevel Interrupt level of the TXD interrupt.
* Use USART_TXCINTLVL_t type.
*/
#define USART_TxdInterruptLevel_Set(_usart, _txdIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_TXCINTLVL_gm) | _txdIntLevel
/*! \brief Set USART DRE interrupt level.
*
* Sets the interrupt level on Data Register interrupt.
*
* \param _usart Pointer to the USART module.
* \param _dreIntLevel Interrupt level of the DRE interrupt.
* Use USART_DREINTLVL_t type.
*/
#define USART_DreInterruptLevel_Set(_usart, _dreIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_DREINTLVL_gm) | _dreIntLevel
/*! \brief Set the mode the USART run in.
*
* Set the mode the USART run in. The default mode is asynchronous mode.
*
* \param _usart Pointer to the USART module register section.
* \param _usartMode Selects the USART mode. Use USART_CMODE_t type.
*
* USART modes:
* - 0x0 : Asynchronous mode.
* - 0x1 : Synchronous mode.
* - 0x2 : IrDA mode.
* - 0x3 : Master SPI mode.
*/
#define USART_SetMode(_usart, _usartMode) \
((_usart)->CTRLC = ((_usart)->CTRLC & (~USART_CMODE_gm)) | _usartMode)
/*! \brief Check if data register empty flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsTXDataRegisterEmpty(_usart) (((_usart)->STATUS & USART_DREIF_bm) != 0)
/*! \brief Put data (5-8 bit character).
*
* Use the macro USART_IsTXDataRegisterEmpty before using this function to
* put data to the TX register.
*
* \param _usart The USART module.
* \param _data The data to send.
*/
#define USART_PutChar(_usart, _data) ((_usart)->DATA = _data)
/*! \brief Checks if the RX complete interrupt flag is set.
*
* Checks if the RX complete interrupt flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsRXComplete(_usart) (((_usart)->STATUS & USART_RXCIF_bm) != 0)
/*! \brief Get received data (5-8 bit character).
*
* This macro reads out the RX register.
* Use the macro USART_RX_Complete to check if anything is received.
*
* \param _usart The USART module.
*
* \retval Received data.
*/
#define USART_GetChar(_usart) ((_usart)->DATA)
/* Functions for interrupt driven driver. */
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel );
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel);
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data);
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data);
bool USART_RXBufferData_Available(USART_data_t * usart_data);
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data);
bool USART_RXComplete(USART_data_t * usart_data);
void USART_DataRegEmpty(USART_data_t * usart_data);
/* Functions for polled driver. */
void USART_NineBits_PutChar(USART_t * usart, uint16_t data);
uint16_t USART_NineBits_GetChar(USART_t * usart);
#endif

View File

@@ -0,0 +1,3 @@
Firmware for all final boards should go here.
All firmware developed using Atmel Studio 6.2.

View File

@@ -0,0 +1,71 @@
DriveControl.d DriveControl.o: .././DriveControl.cpp \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
.././Sabertooth.h .././usart_driver.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
.././Misc.h
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
.././Sabertooth.h:
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
.././Misc.h:

View File

@@ -0,0 +1,129 @@
:100000000C94B6000C94D3000C94D3000C94D30041
:100010000C94D3000C94D3000C94D3000C94D30014
:100020000C94D3000C94D3000C94D3000C94D30004
:100030000C94D3000C94D3000C9464020C94D30061
:100040000C94D3000C94D3000C94D3000C94D300E4
:100050000C94D3000C94D3000C94D3000C94D300D4
:100060000C94D3000C9418020C943E020C94D30010
:100070000C94D3000C94D3000C94D3000C94D300B4
:100080000C94D3000C94D3000C94D3000C94D300A4
:100090000C94D3000C94D3000C94D3000C94D30094
:1000A0000C94D3000C94D3000C94D3000C94D30084
:1000B0000C94D3000C94D3000C94D3000C94D30074
:1000C0000C94D3000C94D3000C94D3000C94D30064
:1000D0000C94D3000C94D3000C94D3000C94D30054
:1000E0000C94D3000C94D3000C94D3000C94D30044
:1000F0000C94D3000C94D3000C94D3000C94D30034
:100100000C94D3000C94D3000C94D3000C94D30023
:100110000C94D3000C94D3000C94D3000C94D30013
:100120000C94D3000C94D3000C94D3000C94D30003
:100130000C94D3000C9481020C94D3000C94D30043
:100140000C94D3000C94D3000C94D3000C94D300E3
:100150000C94D3000C94D3000C94D3000C94D300D3
:100160000C94D3000C94D3000C94D30011241FBE24
:10017000CFEFCDBFDFE2DEBF10E2A0E0B0E2E0EF04
:10018000F7E002C005900D92A031B107D9F720E247
:10019000A0E1B0E201C01D92AE32B207E1F70E94C9
:1001A000D5000C94F6030C940000CF93DF93CDB7E9
:1001B000DEB76497CDBFDEBF0E94AE02E0E4F6E09A
:1001C00088EE818384E0828380E2E0E0F6E082834F
:1001D00088E0E0E8F6E081830E94D1022FEF83ED12
:1001E00090E3215080409040E1F700C0000040E6DD
:1001F00056E060EA79E0CE0141960E947803E0E0A3
:10020000F8E037E03083118289E09DE386A397A36D
:1002100021E02683E0E0F9E03083118282E19AE771
:1002200086A397A32683789480E1E0E0F0E2DE01E4
:10023000119601900D928A95E1F7B12C912C00EA6C
:1002400018E00F2EF2E78F2EF02D0F2EFBE22F2E4F
:10025000F0E23F2EF02D0F2EFAE24F2EF0E25F2E4D
:10026000F02D0F2EF9E26F2EF0E27F2EF02D0F2EE3
:10027000E12CF6E0FF2EF02D0F2EF0E4CF2EF6E06D
:10028000DF2EF02D6894AA24A7F8BB2021F0A1E06E
:10029000BA16F1F1B8C09981992361F0FE01329646
:1002A000D80111968C91119785FFFACF9C9391916B
:1002B0009111F6CFBFEFE3EDF0E3B150E040F04035
:1002C000E1F700C0000089E190E20E94B3038823B7
:1002D00071F089E190E20E94BB03823741F489E129
:1002E00090E20E940B03D8018C92BB24B3948091BE
:1002F000142090911520A0911620B0911720809382
:10030000102090931120A0931220B09313207BC053
:1003100089E190E20E94B303882351F089E190E2E1
:100320000E94BB03E92DF0E0E85DFF4D80839394CC
:10033000B6E09B123BC089E190E20E940B038091E2
:1003400018208823B1F0ECE2F0E29080D1014C91CA
:10035000F2016081D3018C910E94F60298120FC0C5
:10036000F1014081D2016C91CE0141960E943A0385
:1003700006C04FE76FE7CE0141960E943A0340E086
:1003800060911820C8010E94F90280911420909178
:100390001520A0911620B0911720809310209093E3
:1003A0001120A0931220B0931320912C809114203F
:1003B00090911520A0911620B09117204091102007
:1003C000509111206091122070911320841B950B85
:1003D000A60BB70B4597A105B105A8F0CE01419634
:1003E0000E9473038091142090911520A0911620F3
:1003F000B09117208093102090931120A093122089
:10040000B0931320B12CF701808585FF07C0D6017A
:100410001696AC9281E08093182037CFF701808543
:1004200085FD33CFD6011596AC92109218202DCFB2
:100430001F920F920FB60F9211242F933F934F9359
:100440005F936F937F938F939F93AF93BF93EF933C
:10045000FF9389E190E20E94C703FF91EF91BF9162
:10046000AF919F918F917F916F915F914F913F914C
:100470002F910F900FBE0F901F9018951F920F9203
:100480000FB60F9211242F933F934F935F936F9367
:100490007F938F939F93AF93BF93EF93FF9389E1E4
:1004A00090E20E94DC03FF91EF91BF91AF919F9189
:1004B0008F917F916F915F914F913F912F910F900D
:1004C0000FBE0F901F9018951F920F920FB60F92AC
:1004D00011248F93EF93FF9380911820882329F0A4
:1004E00088E0E0E8F6E0878304C088E0E0E8F6E032
:1004F0008583FF91EF918F910F900FBE0F901F900A
:1005000018951F920F920FB60F9211248F939F93FD
:10051000AF93BF93EF93FF9380E2E0E4F6E087832D
:100520008091142090911520A0911620B091172051
:100530000196A11DB11D8093142090931520A093C6
:100540001620B0931720FF91EF91BF91AF919F912B
:100550008F910F900FBE0F901F90189588ED84BF5C
:1005600082E080935000E0E5F0E0818181FFFDCFE3
:1005700088ED84BF91E09093400084BFE0E5F0E017
:10058000808184608083818182FFFDCFE0E5F0E09F
:1005900086818D7F8683E0E6F0E0808181608083C4
:1005A000089541E060EA78E089E190E20E94AA03C0
:1005B000E0911920F0911A2083E0858383818F7C5C
:1005C00080618383A0EAB8E08FEC16968C9316972F
:1005D00017961C92848180618483848188608483DF
:1005E000E0EAF0E0828181608283089564278627B3
:1005F0000895FC01818185FFFDCF8FEF808381818C
:1006000085FFFDCF440F642B6083818185FFFDCF83
:100610008FEF80830895CF93DF93EC0103C0CE0169
:100620000E94BB03CE010E94B3038111F8CFDF917A
:10063000CF910895DC01ED91FC911197818185FFA7
:10064000FDCF80E88083ED91FC911197818185FF3A
:10065000FDCF6083ED91FC911197818185FFFDCFE6
:100660004083ED91FC91818185FFFDCF640F6F7711
:10067000608308950F931F93CF93DF93EC01842F32
:100680006F3761F06F3720F44FE7461B61E00BC016
:1006900066233CF441E8460F60E005C040E060E0BE
:1006A00002C040E060E08F3761F08F3720F40FE741
:1006B000081B15E00BC088233CF401E8080F14E088
:1006C00005C000E014E002C000E014E0CE010E948A
:1006D0001A03402F612FCE010E941A03DF91CF91A0
:1006E0001F910F9108954FE76FE70E943A03089515
:1006F000CF93DF93EC01688379834A835B8388E03F
:10070000FA018183E881F98183E08583E881F981B9
:100710008FEC8683E881F9811782E881F9818481F1
:1007200088608483FFEF23EC89E0F1502040804013
:10073000E1F700C00000E881F9818AEA808344E1A2
:100740006EE0CE010E941A03CE010E947303DF9176
:10075000CF910895FC0160837183428314861386D0
:10076000168615860895FC012385948581E029135A
:1007700001C080E00895FC018485DF01A80FB11D50
:1007800013968C9194859F5F937094870895FC01D4
:1007900083858F5F83709485A081B1812C918917A7
:1007A00049F09385DF01A90FB11D13962C93838720
:1007B00081E0089580E00895FC0186859585981371
:1007C00007C00190F081E02D83818C7F83830895A1
:1007D0008685DF01A80FB11D17968C91A081B1818C
:1007E0008C9386858F5F837086870895F894FFCFFA
:1007F00049443A204D61696E44726976650D0A007C
:00000001FF

View File

@@ -0,0 +1,634 @@
Archive member included because of file (symbol)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o (exit)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
DriveControl.o (__do_copy_data)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
DriveControl.o (__do_clear_bss)
Discarded input sections
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
.text 0x00000000 0x0 DriveControl.o
.bss 0x00000000 0x0 DriveControl.o
.data.sendArray
0x00000000 0x4 DriveControl.o
.text 0x00000000 0x0 Misc.o
.bss 0x00000000 0x0 Misc.o
.text 0x00000000 0x0 Sabertooth.o
.bss 0x00000000 0x0 Sabertooth.o
.text._ZN10Sabertooth13SaberChecksumEhh
0x00000000 0x8 Sabertooth.o
.text._ZN10Sabertooth9DriveTestEv
0x00000000 0xc6 Sabertooth.o
.text._ZN10Sabertooth10ResetSaberEv
0x00000000 0x14 Sabertooth.o
.text 0x00000000 0x0 usart_driver.o
.bss 0x00000000 0x0 usart_driver.o
.text.USART_InterruptDriver_DreInterruptLevel_Set
0x00000000 0x6 usart_driver.o
.text.USART_TXBuffer_FreeSpace
0x00000000 0x14 usart_driver.o
.text.USART_TXBuffer_PutByte
0x00000000 0x38 usart_driver.o
.text.USART_NineBits_PutChar
0x00000000 0x18 usart_driver.o
.text.USART_NineBits_GetChar
0x00000000 0x18 usart_driver.o
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
Memory Configuration
Name Origin Length Attributes
text 0x00000000 0x00100000 xr
data 0x00802000 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
fuse 0x00820000 0x00000400 rw !x
lock 0x00830000 0x00000400 rw !x
signature 0x00840000 0x00000400 rw !x
user_signatures 0x00850000 0x00000400 rw !x
*default* 0x00000000 0xffffffff
Linker script and memory map
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
LOAD DriveControl.o
LOAD Misc.o
LOAD Sabertooth.o
LOAD usart_driver.o
START GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
END GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
START GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a
END GROUP
.hash
*(.hash)
.dynsym
*(.dynsym)
.dynstr
*(.dynstr)
.gnu.version
*(.gnu.version)
.gnu.version_d
*(.gnu.version_d)
.gnu.version_r
*(.gnu.version_r)
.rel.init
*(.rel.init)
.rela.init
*(.rela.init)
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
.rel.fini
*(.rel.fini)
.rela.fini
*(.rela.fini)
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
.rel.ctors
*(.rel.ctors)
.rela.ctors
*(.rela.ctors)
.rel.dtors
*(.rel.dtors)
.rela.dtors
*(.rela.dtors)
.rel.got
*(.rel.got)
.rela.got
*(.rela.got)
.rel.bss
*(.rel.bss)
.rela.bss
*(.rela.bss)
.rel.plt
*(.rel.plt)
.rela.plt
*(.rela.plt)
.text 0x00000000 0x7f0
*(.vectors)
.vectors 0x00000000 0x16c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
0x00000000 __vector_default
0x00000000 __vectors
*(.vectors)
*(.progmem.gcc*)
0x0000016c . = ALIGN (0x2)
0x0000016c __trampolines_start = .
*(.trampolines)
.trampolines 0x0000016c 0x0 linker stubs
*(.trampolines*)
0x0000016c __trampolines_end = .
*(.progmem*)
0x0000016c . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x0000016c __ctors_start = .
*(.ctors)
0x0000016c __ctors_end = .
0x0000016c __dtors_start = .
*(.dtors)
0x0000016c __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x0000016c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
0x0000016c __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x0000016c 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000178 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
0x00000178 __do_copy_data
.init4 0x0000018e 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
0x0000018e __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x0000019e 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
*(.init9)
*(.text)
.text 0x000001a6 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
0x000001a6 __vector_38
0x000001a6 __vector_22
0x000001a6 __vector_63
0x000001a6 __vector_28
0x000001a6 __vector_67
0x000001a6 __vector_1
0x000001a6 __vector_32
0x000001a6 __vector_75
0x000001a6 __vector_71
0x000001a6 __vector_34
0x000001a6 __vector_62
0x000001a6 __vector_24
0x000001a6 __vector_12
0x000001a6 __vector_55
0x000001a6 __vector_69
0x000001a6 __vector_81
0x000001a6 __vector_90
0x000001a6 __vector_46
0x000001a6 __bad_interrupt
0x000001a6 __vector_72
0x000001a6 __vector_6
0x000001a6 __vector_31
0x000001a6 __vector_35
0x000001a6 __vector_78
0x000001a6 __vector_74
0x000001a6 __vector_39
0x000001a6 __vector_3
0x000001a6 __vector_23
0x000001a6 __vector_68
0x000001a6 __vector_30
0x000001a6 __vector_73
0x000001a6 __vector_45
0x000001a6 __vector_61
0x000001a6 __vector_11
0x000001a6 __vector_54
0x000001a6 __vector_13
0x000001a6 __vector_17
0x000001a6 __vector_19
0x000001a6 __vector_56
0x000001a6 __vector_7
0x000001a6 __vector_49
0x000001a6 __vector_41
0x000001a6 __vector_86
0x000001a6 __vector_64
0x000001a6 __vector_88
0x000001a6 __vector_43
0x000001a6 __vector_27
0x000001a6 __vector_5
0x000001a6 __vector_33
0x000001a6 __vector_76
0x000001a6 __vector_47
0x000001a6 __vector_52
0x000001a6 __vector_37
0x000001a6 __vector_89
0x000001a6 __vector_4
0x000001a6 __vector_44
0x000001a6 __vector_82
0x000001a6 __vector_51
0x000001a6 __vector_9
0x000001a6 __vector_2
0x000001a6 __vector_21
0x000001a6 __vector_15
0x000001a6 __vector_66
0x000001a6 __vector_36
0x000001a6 __vector_79
0x000001a6 __vector_58
0x000001a6 __vector_70
0x000001a6 __vector_83
0x000001a6 __vector_29
0x000001a6 __vector_60
0x000001a6 __vector_40
0x000001a6 __vector_85
0x000001a6 __vector_8
0x000001a6 __vector_48
0x000001a6 __vector_80
0x000001a6 __vector_84
0x000001a6 __vector_57
0x000001a6 __vector_53
0x000001a6 __vector_10
0x000001a6 __vector_50
0x000001a6 __vector_16
0x000001a6 __vector_59
0x000001a6 __vector_18
0x000001a6 __vector_20
0x000001a6 __vector_42
0x000001a6 __vector_87
0x000001a6 __vector_65
0x000001aa . = ALIGN (0x2)
*(.text.*)
.text.main 0x000001aa 0x286 DriveControl.o
0x000001aa main
.text.__vector_25
0x00000430 0x4c DriveControl.o
0x00000430 __vector_25
.text.__vector_26
0x0000047c 0x4c DriveControl.o
0x0000047c __vector_26
.text.__vector_14
0x000004c8 0x3a DriveControl.o
0x000004c8 __vector_14
.text.__vector_77
0x00000502 0x5a DriveControl.o
0x00000502 __vector_77
.text._Z23SetXMEGA32MhzCalibratedv
0x0000055c 0x46 Misc.o
0x0000055c _Z23SetXMEGA32MhzCalibratedv
.text._Z12SetupPCCommsv
0x000005a2 0x4a Misc.o
0x000005a2 _Z12SetupPCCommsv
.text._Z14PCComsChecksumhhh
0x000005ec 0x6 Misc.o
0x000005ec _Z14PCComsChecksumhhh
.text._Z22SendDriveControlStatusP12USART_structbb
0x000005f2 0x24 Misc.o
0x000005f2 _Z22SendDriveControlStatusP12USART_structbb
.text._Z17FlushSerialBufferP16Usart_and_buffer
0x00000616 0x1e Misc.o
0x00000616 _Z17FlushSerialBufferP16Usart_and_buffer
.text._ZN10Sabertooth12SendDriveCmdEcc
0x00000634 0x40 Sabertooth.o
0x00000634 _ZN10Sabertooth12SendDriveCmdEcc
.text._ZN10Sabertooth11ParsePacketEhh
0x00000674 0x72 Sabertooth.o
0x00000674 _ZN10Sabertooth11ParsePacketEhh
.text._ZN10Sabertooth7StopAllEv
0x000006e6 0xa Sabertooth.o
0x000006e6 _ZN10Sabertooth7StopAllEv
.text._ZN10SabertoothC2EP12USART_structP11PORT_struct
0x000006f0 0x64 Sabertooth.o
0x000006f0 _ZN10SabertoothC1EP12USART_structP11PORT_struct
0x000006f0 _ZN10SabertoothC2EP12USART_structP11PORT_struct
.text.USART_InterruptDriver_Initialize
0x00000754 0x12 usart_driver.o
0x00000754 USART_InterruptDriver_Initialize
.text.USART_RXBufferData_Available
0x00000766 0x10 usart_driver.o
0x00000766 USART_RXBufferData_Available
.text.USART_RXBuffer_GetByte
0x00000776 0x18 usart_driver.o
0x00000776 USART_RXBuffer_GetByte
.text.USART_RXComplete
0x0000078e 0x2a usart_driver.o
0x0000078e USART_RXComplete
.text.USART_DataRegEmpty
0x000007b8 0x34 usart_driver.o
0x000007b8 USART_DataRegEmpty
0x000007ec . = ALIGN (0x2)
*(.fini9)
.fini9 0x000007ec 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
0x000007ec _exit
0x000007ec exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x000007ec 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
*(.fini0)
0x000007f0 _etext = .
.data 0x00802000 0x10 load address 0x000007f0
0x00802000 PROVIDE (__data_start, .)
*(.data)
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
.data 0x00802000 0x0 DriveControl.o
.data 0x00802000 0x0 Misc.o
.data 0x00802000 0x0 Sabertooth.o
.data 0x00802000 0x0 usart_driver.o
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
*(.data*)
*(.rodata)
*(.rodata*)
.rodata.str1.1
0x00802000 0x10 DriveControl.o
*(.gnu.linkonce.d*)
0x00802010 . = ALIGN (0x2)
0x00802010 _edata = .
0x00802010 PROVIDE (__data_end, .)
.bss 0x00802010 0x1e
0x00802010 PROVIDE (__bss_start, .)
*(.bss)
*(.bss*)
.bss.TimePrevious
0x00802010 0x4 DriveControl.o
0x00802010 TimePrevious
.bss.TimeSinceInit
0x00802014 0x4 DriveControl.o
0x00802014 TimeSinceInit
.bss.IsRoving 0x00802018 0x1 DriveControl.o
0x00802018 IsRoving
.bss.USART_PC_Data
0x00802019 0xf DriveControl.o
0x00802019 USART_PC_Data
.bss.receiveArray
0x00802028 0x6 DriveControl.o
0x00802028 receiveArray
*(COMMON)
0x0080202e PROVIDE (__bss_end, .)
0x000007f0 __data_load_start = LOADADDR (.data)
0x00000800 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x0080202e 0x0
0x0080202e PROVIDE (__noinit_start, .)
*(.noinit*)
0x0080202e PROVIDE (__noinit_end, .)
0x0080202e _end = .
0x0080202e PROVIDE (__heap_start, .)
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
.fuse
*(.fuse)
*(.lfuse)
*(.hfuse)
*(.efuse)
.lock
*(.lock*)
.signature
*(.signature*)
.user_signatures
*(.user_signatures*)
.stab
*(.stab)
.stabstr
*(.stabstr)
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment 0x00000000 0x30
*(.comment)
.comment 0x00000000 0x30 DriveControl.o
0x31 (size before relaxing)
.comment 0x00000000 0x31 Misc.o
.comment 0x00000000 0x31 Sabertooth.o
.comment 0x00000000 0x31 usart_driver.o
.note.gnu.build-id
*(.note.gnu.build-id)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges 0x00000000 0x138
*(.debug_aranges)
.debug_aranges
0x00000000 0x40 DriveControl.o
.debug_aranges
0x00000040 0x40 Misc.o
.debug_aranges
0x00000080 0x50 Sabertooth.o
.debug_aranges
0x000000d0 0x68 usart_driver.o
.debug_pubnames
*(.debug_pubnames)
.debug_info 0x00000000 0x2608
*(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x00000000 0x1087 DriveControl.o
.debug_info 0x00001087 0x621 Misc.o
.debug_info 0x000016a8 0x9da Sabertooth.o
.debug_info 0x00002082 0x586 usart_driver.o
.debug_abbrev 0x00000000 0xa6e
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x3a9 DriveControl.o
.debug_abbrev 0x000003a9 0x1d5 Misc.o
.debug_abbrev 0x0000057e 0x2ed Sabertooth.o
.debug_abbrev 0x0000086b 0x203 usart_driver.o
.debug_line 0x00000000 0x91e
*(.debug_line .debug_line.* .debug_line_end)
.debug_line 0x00000000 0x283 DriveControl.o
.debug_line 0x00000283 0x1b1 Misc.o
.debug_line 0x00000434 0x2eb Sabertooth.o
.debug_line 0x0000071f 0x1ff usart_driver.o
.debug_frame 0x00000000 0x330
*(.debug_frame)
.debug_frame 0x00000000 0x148 DriveControl.o
.debug_frame 0x00000148 0x70 Misc.o
.debug_frame 0x000001b8 0xb4 Sabertooth.o
.debug_frame 0x0000026c 0xc4 usart_driver.o
.debug_str 0x00000000 0x10d0
*(.debug_str)
.debug_str 0x00000000 0xbb8 DriveControl.o
0xc41 (size before relaxing)
.debug_str 0x00000bb8 0x2e2 Misc.o
0x73c (size before relaxing)
.debug_str 0x00000e9a 0x9c Sabertooth.o
0x51f (size before relaxing)
.debug_str 0x00000f36 0x19a usart_driver.o
0x478 (size before relaxing)
.debug_loc 0x00000000 0xe3a
*(.debug_loc)
.debug_loc 0x00000000 0x3ca DriveControl.o
.debug_loc 0x000003ca 0x111 Misc.o
.debug_loc 0x000004db 0x570 Sabertooth.o
.debug_loc 0x00000a4b 0x3ef usart_driver.o
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
.debug_pubtypes
*(.debug_pubtypes)
.debug_ranges 0x00000000 0xf8
*(.debug_ranges)
.debug_ranges 0x00000000 0x30 DriveControl.o
.debug_ranges 0x00000030 0x30 Misc.o
.debug_ranges 0x00000060 0x40 Sabertooth.o
.debug_ranges 0x000000a0 0x58 usart_driver.o
.debug_macro
*(.debug_macro)
OUTPUT(DriveControl.elf elf32-avr)
LOAD linker stubs

View File

@@ -0,0 +1,130 @@
S01400004472697665436F6E74726F6C2E7372656335
S11300000C94B6000C94D3000C94D3000C94D3003D
S11300100C94D3000C94D3000C94D3000C94D30010
S11300200C94D3000C94D3000C94D3000C94D30000
S11300300C94D3000C94D3000C9464020C94D3005D
S11300400C94D3000C94D3000C94D3000C94D300E0
S11300500C94D3000C94D3000C94D3000C94D300D0
S11300600C94D3000C9418020C943E020C94D3000C
S11300700C94D3000C94D3000C94D3000C94D300B0
S11300800C94D3000C94D3000C94D3000C94D300A0
S11300900C94D3000C94D3000C94D3000C94D30090
S11300A00C94D3000C94D3000C94D3000C94D30080
S11300B00C94D3000C94D3000C94D3000C94D30070
S11300C00C94D3000C94D3000C94D3000C94D30060
S11300D00C94D3000C94D3000C94D3000C94D30050
S11300E00C94D3000C94D3000C94D3000C94D30040
S11300F00C94D3000C94D3000C94D3000C94D30030
S11301000C94D3000C94D3000C94D3000C94D3001F
S11301100C94D3000C94D3000C94D3000C94D3000F
S11301200C94D3000C94D3000C94D3000C94D300FF
S11301300C94D3000C9481020C94D3000C94D3003F
S11301400C94D3000C94D3000C94D3000C94D300DF
S11301500C94D3000C94D3000C94D3000C94D300CF
S11301600C94D3000C94D3000C94D30011241FBE20
S1130170CFEFCDBFDFE2DEBF10E2A0E0B0E2E0EF00
S1130180F7E002C005900D92A031B107D9F720E243
S1130190A0E1B0E201C01D92AE32B207E1F70E94C5
S11301A0D5000C94F6030C940000CF93DF93CDB7E5
S11301B0DEB76497CDBFDEBF0E94AE02E0E4F6E096
S11301C088EE818384E0828380E2E0E0F6E082834B
S11301D088E0E0E8F6E081830E94D1022FEF83ED0E
S11301E090E3215080409040E1F700C0000040E6D9
S11301F056E060EA79E0CE0141960E947803E0E09F
S1130200F8E037E03083118289E09DE386A397A369
S113021021E02683E0E0F9E03083118282E19AE76D
S113022086A397A32683789480E1E0E0F0E2DE01E0
S1130230119601900D928A95E1F7B12C912C00EA68
S113024018E00F2EF2E78F2EF02D0F2EFBE22F2E4B
S1130250F0E23F2EF02D0F2EFAE24F2EF0E25F2E49
S1130260F02D0F2EF9E26F2EF0E27F2EF02D0F2EDF
S1130270E12CF6E0FF2EF02D0F2EF0E4CF2EF6E069
S1130280DF2EF02D6894AA24A7F8BB2021F0A1E06A
S1130290BA16F1F1B8C09981992361F0FE01329642
S11302A0D80111968C91119785FFFACF9C93919167
S11302B09111F6CFBFEFE3EDF0E3B150E040F04031
S11302C0E1F700C0000089E190E20E94B3038823B3
S11302D071F089E190E20E94BB03823741F489E125
S11302E090E20E940B03D8018C92BB24B3948091BA
S11302F0142090911520A0911620B091172080937E
S1130300102090931120A0931220B09313207BC04F
S113031089E190E20E94B303882351F089E190E2DD
S11303200E94BB03E92DF0E0E85DFF4D80839394C8
S1130330B6E09B123BC089E190E20E940B038091DE
S113034018208823B1F0ECE2F0E29080D1014C91C6
S1130350F2016081D3018C910E94F60298120FC0C1
S1130360F1014081D2016C91CE0141960E943A0381
S113037006C04FE76FE7CE0141960E943A0340E082
S113038060911820C8010E94F90280911420909174
S11303901520A0911620B0911720809310209093DF
S11303A01120A0931220B0931320912C809114203B
S11303B090911520A0911620B09117204091102003
S11303C0509111206091122070911320841B950B81
S11303D0A60BB70B4597A105B105A8F0CE01419630
S11303E00E9473038091142090911520A0911620EF
S11303F0B09117208093102090931120A093122085
S1130400B0931320B12CF701808585FF07C0D60176
S11304101696AC9281E08093182037CFF70180853F
S113042085FD33CFD6011596AC92109218202DCFAE
S11304301F920F920FB60F9211242F933F934F9355
S11304405F936F937F938F939F93AF93BF93EF9338
S1130450FF9389E190E20E94C703FF91EF91BF915E
S1130460AF919F918F917F916F915F914F913F9148
S11304702F910F900FBE0F901F9018951F920F92FF
S11304800FB60F9211242F933F934F935F936F9363
S11304907F938F939F93AF93BF93EF93FF9389E1E0
S11304A090E20E94DC03FF91EF91BF91AF919F9185
S11304B08F917F916F915F914F913F912F910F9009
S11304C00FBE0F901F9018951F920F920FB60F92A8
S11304D011248F93EF93FF9380911820882329F0A0
S11304E088E0E0E8F6E0878304C088E0E0E8F6E02E
S11304F08583FF91EF918F910F900FBE0F901F9006
S113050018951F920F920FB60F9211248F939F93F9
S1130510AF93BF93EF93FF9380E2E0E4F6E0878329
S11305208091142090911520A0911620B09117204D
S11305300196A11DB11D8093142090931520A093C2
S11305401620B0931720FF91EF91BF91AF919F9127
S11305508F910F900FBE0F901F90189588ED84BF58
S113056082E080935000E0E5F0E0818181FFFDCFDF
S113057088ED84BF91E09093400084BFE0E5F0E013
S1130580808184608083818182FFFDCFE0E5F0E09B
S113059086818D7F8683E0E6F0E0808181608083C0
S11305A0089541E060EA78E089E190E20E94AA03BC
S11305B0E0911920F0911A2083E0858383818F7C58
S11305C080618383A0EAB8E08FEC16968C9316972B
S11305D017961C92848180618483848188608483DB
S11305E0E0EAF0E0828181608283089564278627AF
S11305F00895FC01818185FFFDCF8FEF8083818188
S113060085FFFDCF440F642B6083818185FFFDCF7F
S11306108FEF80830895CF93DF93EC0103C0CE0165
S11306200E94BB03CE010E94B3038111F8CFDF9176
S1130630CF910895DC01ED91FC911197818185FFA3
S1130640FDCF80E88083ED91FC911197818185FF36
S1130650FDCF6083ED91FC911197818185FFFDCFE2
S11306604083ED91FC91818185FFFDCF640F6F770D
S1130670608308950F931F93CF93DF93EC01842F2E
S11306806F3761F06F3720F44FE7461B61E00BC012
S113069066233CF441E8460F60E005C040E060E0BA
S11306A002C040E060E08F3761F08F3720F40FE73D
S11306B0081B15E00BC088233CF401E8080F14E084
S11306C005C000E014E002C000E014E0CE010E9486
S11306D01A03402F612FCE010E941A03DF91CF919C
S11306E01F910F9108954FE76FE70E943A03089511
S11306F0CF93DF93EC01688379834A835B8388E03B
S1130700FA018183E881F98183E08583E881F981B5
S11307108FEC8683E881F9811782E881F9818481ED
S113072088608483FFEF23EC89E0F150204080400F
S1130730E1F700C00000E881F9818AEA808344E19E
S11307406EE0CE010E941A03CE010E947303DF9172
S1130750CF910895FC0160837183428314861386CC
S1130760168615860895FC012385948581E0291356
S113077001C080E00895FC018485DF01A80FB11D4C
S113078013968C9194859F5F937094870895FC01D0
S113079083858F5F83709485A081B1812C918917A3
S11307A049F09385DF01A90FB11D13962C9383871C
S11307B081E0089580E00895FC018685958598136D
S11307C007C00190F081E02D83818C7F838308959D
S11307D08685DF01A80FB11D17968C91A081B18188
S11307E08C9386858F5F837086870895F894FFCFF6
S11307F049443A204D61696E44726976650D0A0078
S9030000FC

View File

@@ -0,0 +1,153 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../DriveControl.cpp \
../Misc.cpp \
../Sabertooth.cpp \
../usart_driver.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
DriveControl.o \
Misc.o \
Sabertooth.o \
usart_driver.o
OBJS_AS_ARGS += \
DriveControl.o \
Misc.o \
Sabertooth.o \
usart_driver.o
C_DEPS += \
DriveControl.d \
Misc.d \
Sabertooth.d \
usart_driver.d
C_DEPS_AS_ARGS += \
DriveControl.d \
Misc.d \
Sabertooth.d \
usart_driver.d
OUTPUT_FILE_PATH +=DriveControl.elf
OUTPUT_FILE_PATH_AS_ARGS +=DriveControl.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
./%.o: .././%.cpp
@echo Building file: $<
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP)
@echo Building target: $@
@echo Invoking: AVR8/GNU Linker : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="DriveControl.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega32d4
@echo Finished building target: $@
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveControl.elf" "DriveControl.hex"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "DriveControl.elf" "DriveControl.eep" || exit 0
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "DriveControl.elf" > "DriveControl.lss"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveControl.elf" "DriveControl.srec"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-size.exe" "DriveControl.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "DriveControl.elf" "DriveControl.a" "DriveControl.hex" "DriveControl.lss" "DriveControl.eep" "DriveControl.map" "DriveControl.srec" "DriveControl.usersignatures"

View File

@@ -0,0 +1,68 @@
Misc.d Misc.o: .././Misc.cpp .././Misc.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
.././usart_driver.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h
.././Misc.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:

View File

@@ -0,0 +1,68 @@
Sabertooth.d Sabertooth.o: .././Sabertooth.cpp .././Sabertooth.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
.././usart_driver.h .././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h
.././Sabertooth.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:

View File

@@ -0,0 +1,12 @@
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
DriveControl.cpp
Misc.cpp
Sabertooth.cpp
usart_driver.c

View File

@@ -0,0 +1,66 @@
usart_driver.d usart_driver.o: .././usart_driver.c .././usart_driver.h \
.././avr_compiler.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h
.././usart_driver.h:
.././avr_compiler.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "DriveControl", "DriveControl.cppproj", "{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Debug|AVR.ActiveCfg = Debug|AVR
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Debug|AVR.Build.0 = Debug|AVR
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Release|AVR.ActiveCfg = Release|AVR
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,166 @@
/*
* DriveControl.cpp
*
* Created: 4/22/2014 8:54:20 PM
* Author: corwin
PE3 - Status LED
*/
#define F_CPU 32000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "Sabertooth.h"
#include "Misc.h"
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
#define TIMEOUTMAX 20 //Time in seconds before state change back to init
/*! Define that selects the Usart used in example. */
#define XBEEDIO0 PIN5_bm //PORTA
#define SabertoothTx PIN3_bm //PORTD
#define StatusLight PIN3_bm //PORTE
#define RECEIVE_PACKET_SIZE 6
#define SEND_PACKET_SIZE 4
uint8_t sendArray[SEND_PACKET_SIZE] = {0x55, 0xaa, 0xf0};
uint8_t receiveArray[RECEIVE_PACKET_SIZE];
USART_data_t USART_PC_Data;
bool IsRoving = false;
volatile long unsigned int TimeSinceInit = 0;
long unsigned int TimePrevious = 0;
int main(void)
{
SetXMEGA32MhzCalibrated(); //Set XMega to user 32Mhz internal oscillator with 32Khz crystal calibration
///////Setup Inputs and Outputs///////
PORTC.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm | PIN3_bm); //Sets outputs on port C
PORTC.DIRCLR = PIN2_bm; //Sets inputs on PORT C
PORTA.DIRCLR = XBEEDIO0;
PORTE.DIRSET = PIN3_bm; //Sets inputs on PORTA
///////Initialize Serial Communcations///////
SetupPCComms(); //Initializes PC Communications at 9600 baud0
_delay_ms(500); //Delay to make sabertooth initialize
Sabertooth DriveSaber(&USARTD0, &PORTD); //Initializes Sabertooth Communications at 9600 Baud
//////////////////Timers///////////////
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
TCC0.CTRLB = TC_WGMODE_NORMAL_gc;
TCC0.PER = 15625;
TCC0.INTCTRLA = TC_OVFINTLVL_LO_gc;
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
TCD0.CTRLB = TC_WGMODE_NORMAL_gc;
TCD0.PER = 31250;
TCD0.INTCTRLA = TC_OVFINTLVL_LO_gc;
///////////////////Timers//////////////
sei(); //Enables global interrupts so the interrupt serial can work
////Semi-global vars//////
unsigned char BufferIdx = 0;
const char XMegaID[] = "ID: MainDrive\r\n";
enum MicroState{
WaitForHost,
Driving
}XMegaState = WaitForHost;
while(1){
switch(XMegaState){
case WaitForHost:
for(int i = 0 ; XMegaID[i] != '\0'; i++){
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, XMegaID[i]);
}
_delay_ms(500);
if(USART_RXBufferData_Available(&USART_PC_Data)){
if(USART_RXBuffer_GetByte(&USART_PC_Data) == 'r'){
XMegaState = Driving;
//DriveSaber.ResetSaber();
FlushSerialBuffer(&USART_PC_Data);
USART_PutChar(&USARTC0, 'r');
}
}
TimePrevious = TimeSinceInit;
break;
case Driving:
if(USART_RXBufferData_Available(&USART_PC_Data)){
receiveArray[BufferIdx] = USART_RXBuffer_GetByte(&USART_PC_Data);
BufferIdx++;
}
if(BufferIdx == RECEIVE_PACKET_SIZE){
FlushSerialBuffer(&USART_PC_Data);
if(IsRoving){
if(receiveArray[4] == PCComsChecksum(receiveArray[1], receiveArray[2], receiveArray[3])){
DriveSaber.ParsePacket(receiveArray[2], receiveArray[3]);
}
}else if(!IsRoving){
DriveSaber.ParsePacket(127, 127);
}
BufferIdx = 0;
SendDriveControlStatus(&USARTC0, IsRoving, false);
TimePrevious = TimeSinceInit;
}
if((TimeSinceInit - TimePrevious) > TIMEOUTMAX){
DriveSaber.StopAll();
XMegaState = WaitForHost;
TimePrevious = TimeSinceInit;
}
break;
};
/*
if(!IsRoving){
DriveSaber.StopAll();
}
*/
if((PORTA.IN & XBEEDIO0)){
ERROR_CLR();
IsRoving = true;
}else if((!(PORTA.IN & XBEEDIO0))){
ERROR_SET();
IsRoving = false;
}
}
}
ISR(USARTC0_RXC_vect){
USART_RXComplete(&USART_PC_Data);
}
ISR(USARTC0_DRE_vect){
USART_DataRegEmpty(&USART_PC_Data);
}
ISR(TCC0_OVF_vect){
if(IsRoving){
JUDGELED_TOGGLE();
}else if(!IsRoving){
JUDGELED_SET();
}
}
ISR(TCD0_OVF_vect){
STATUS2_TOGGLE();
TimeSinceInit++;
}

View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.2</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC8.CPP</ToolchainName>
<ProjectGuid>{7ba4f01e-3997-4fe4-ae8d-3c4100c86d92}</ProjectGuid>
<avrdevice>ATxmega32D4</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>CPP</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>DriveControl</AssemblyName>
<Name>DriveControl</Name>
<RootNamespace>DriveControl</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress>0x20000000</RamSnippetAddress>
<UncachedRange />
<OverrideVtorValue>exception_table</OverrideVtorValue>
<BootSegment>2</BootSegment>
<eraseonlaunchrule>0</eraseonlaunchrule>
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.15.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
<avrtool>com.atmel.avrdbg.tool.ispmk2</avrtool>
<avrtoolinterface>PDI</avrtoolinterface>
<com_atmel_avrdbg_tool_ispmk2>
<ToolOptions>
<InterfaceProperties>
<JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
</InterfaceProperties>
<InterfaceName>PDI</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.ispmk2</ToolType>
<ToolNumber>000200086630</ToolNumber>
<ToolName>AVRISP mkII</ToolName>
</com_atmel_avrdbg_tool_ispmk2>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<AvrGccCpp>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcccpp.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcccpp.compiler.symbols.DefSymbols>
<avrgcccpp.compiler.optimization.level>Optimize (-O1)</avrgcccpp.compiler.optimization.level>
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcccpp.compiler.optimization.DebugLevel>Default (-g2)</avrgcccpp.compiler.optimization.DebugLevel>
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
<avrgcccpp.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcccpp.linker.libraries.Libraries>
<avrgcccpp.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcccpp.assembler.debugging.DebugLevel>
</AvrGccCpp>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="avr_compiler.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="DriveControl.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Misc.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Misc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Sabertooth.cpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="Sabertooth.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="usart_driver.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="usart_driver.h">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@@ -0,0 +1,53 @@
/*
* Misc.cpp
*
* Created: 4/30/2014 3:09:52 PM
* Author: Corwin
*/
#include "Misc.h"
#include <avr/io.h>
void SetXMEGA32MhzCalibrated(){
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
OSC.CTRL = OSC_RC32MEN_bm; //Enable 32MHz oscillator
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); //Wait for oscillator to be ready
CCP = CCP_IOREG_gc; //Disable register security for clock update
CLK.CTRL = CLK_SCLKSEL_RC32M_gc; //Switch to 32MHz clock
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
OSC.CTRL |= OSC_RC32KEN_bm; //Enable 32Khz oscillator
while(!(OSC.STATUS & OSC_RC32KRDY_bm)); //Wait for oscillator to be ready
OSC.DFLLCTRL &= ~OSC_RC32MCREF_bm; //Set up calibration source to be 32Khz crystal
DFLLRC32M.CTRL |= DFLL_ENABLE_bm; //Enable calibration of 32Mhz oscillator
}
void SetupPCComms(){
USART_InterruptDriver_Initialize(&USART_PC_Data, &USARTC0, USART_DREINTLVL_LO_gc); //Initialize USARTC0 as interrupt driven serial and clear it's buffers
USART_Format_Set(USART_PC_Data.usart, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Set the data format of 8 bits, no parity, 1 stop bit
USART_RxdInterruptLevel_Set(USART_PC_Data.usart, USART_RXCINTLVL_LO_gc); //Enable the receive interrupt
USART_Baudrate_Set(&USARTC0, 207 , 0); //Set baudrate to 9600 with 32Mhz system clock
USART_Rx_Enable(USART_PC_Data.usart); //Enable receiving over serial
USART_Tx_Enable(USART_PC_Data.usart); //Enable transmitting over serial
PMIC.CTRL |= PMIC_LOLVLEX_bm; //Enable PMIC interrupt level low (No idea what this does, but is necessary)
}
unsigned char PCComsChecksum(unsigned char command, unsigned char left, unsigned char right){
return (command ^ left ^ right);
}
void SendDriveControlStatus(USART_t *PCComs, bool IsRoving, bool Checksum){
while(!USART_IsTXDataRegisterEmpty(PCComs));
USART_PutChar(PCComs, 255);
while(!USART_IsTXDataRegisterEmpty(PCComs));
USART_PutChar(PCComs, ((IsRoving << 0) | (Checksum << 1)));
while(!USART_IsTXDataRegisterEmpty(PCComs));
USART_PutChar(PCComs, 255);
}
void FlushSerialBuffer(USART_data_t *UsartBuffer){
while(USART_RXBufferData_Available(UsartBuffer)){
USART_RXBuffer_GetByte(UsartBuffer);
}
}

View File

@@ -0,0 +1,43 @@
/*
* Misc.h
*
* Created: 4/30/2014 3:10:05 PM
* Author: Corwin
*/
#ifndef MISC_H_
#define MISC_H_
#include <avr/io.h>
//Custom Defined Macros
#define STATUS1_SET(void) (PORTC.OUTSET = PIN6_bm)
#define STATUS1_CLR(void) (PORTC.OUTCLR = PIN6_bm)
#define STATUS1_TOGGLE(void) (PORTC.OUTTGL = PIN6_bm)
#define STATUS2_SET(void) (PORTC.OUTSET = PIN5_bm)
#define STATUS2_CLR(void) (PORTC.OUTCLR = PIN5_bm)
#define STATUS2_TOGGLE(void) (PORTC.OUTTGL = PIN5_bm)
#define ERROR_SET(void) (PORTC.OUTSET = PIN7_bm)
#define ERROR_CLR(void) (PORTC.OUTCLR = PIN7_bm)
#define ERROR_TOGGLE(void) (PORTC.OUTTGL = PIN7_bm)
#define JUDGELED_SET(void) (PORTE.OUTSET = PIN3_bm)
#define JUDGELED_CLR(void) (PORTE.OUTCLR = PIN3_bm)
#define JUDGELED_TOGGLE(void) (PORTE.OUTTGL = PIN3_bm)
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
extern USART_data_t USART_PC_Data;
void SetXMEGA32MhzCalibrated();
void SetupPCComms();
unsigned char PCComsChecksum(unsigned char command, unsigned char left, unsigned char right);
void SendDriveControlStatus(USART_t *PCComs, bool IsRoving, bool Checksum);
void FlushSerialBuffer(USART_data_t *UsartBuffer);
#endif /* MISC_H_ */

View File

@@ -0,0 +1,115 @@
/*
* Sabertooth.cpp
*
* Created: 4/30/2014 1:08:16 PM
* Author: Corwin
*/
#include "Sabertooth.h"
#include <avr/io.h>
#include <util/delay.h>
Sabertooth::Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT)
{
Sabertooth_USART = USART_SaberUsart; //Sets the private variable to the USART being used
Sabertooth_PORT = SaberPORT; //Sets the private variable for the PORT the USART is on
Sabertooth_PORT->DIRSET = PIN3_bm; //Sets the TX pin for the USART to an output
USART_Format_Set(Sabertooth_USART, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Sets the Sabertooth USART to run in 8 bit data, no parity, and 1 stop bit,
USART_Baudrate_Set(Sabertooth_USART, 207 , 0); //Sets the Sabertooth baud rate to 9600 when running at 32Mhz system clock
USART_Tx_Enable(Sabertooth_USART); //Enable the USART transmit capabilities
_delay_ms(100); //Delay to let things settle
USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
SendDriveCmd(14, 20); //Sets the communication watchdog on the sabertooth to (x*100ms) It's currently set to two seconds.
StopAll(); //Everything is now initialized, stop all motor movement to account for random noise or failed startups
}
void Sabertooth::DriveTest(){
int i;
for(i = 0; i < 128 ; i++){
SendDriveCmd(LEFT_FORWARD, i);
SendDriveCmd(RIGHT_FORWARD, i);
_delay_ms(30);
}
for( ; i > 0 ; i--){
SendDriveCmd(LEFT_FORWARD, i);
SendDriveCmd(RIGHT_FORWARD, i);
_delay_ms(30);
}
for(i = 0; i < 128 ; i++){
SendDriveCmd(LEFT_BACK, i);
SendDriveCmd(RIGHT_BACK, i);
_delay_ms(30);
}
for( ; i > 0 ; i--){
SendDriveCmd(LEFT_BACK, i);
SendDriveCmd(RIGHT_BACK, i);
_delay_ms(30);
}
}
void Sabertooth::ParsePacket(unsigned char left, unsigned char right){
unsigned char command_left = LEFT_FORWARD;
unsigned char value_left = 0;
unsigned char command_right = RIGHT_FORWARD;
unsigned char value_right = 0;
if(left == 127){
command_left = LEFT_FORWARD;
value_left = 0;
}else if(left < 127){
command_left = LEFT_BACK;
value_left = (127-left);
}else if(left > 127){
command_left = LEFT_FORWARD;
value_left = (left-127);
}
if(right == 127){
command_right = RIGHT_FORWARD;
value_right = 0;
}else if(right < 127){
command_right = RIGHT_BACK;
value_right = (127-right);
}else if(right > 127){
command_right = RIGHT_FORWARD;
value_right = (right-127);
}
SendDriveCmd(command_left, value_left);
SendDriveCmd(command_right, value_right);
}
void Sabertooth::StopAll(){
ParsePacket(127, 127);
}
unsigned char Sabertooth::SaberChecksum(unsigned char command, unsigned char value){
return ((SABERTOOTHADDRESS+command+value) & 127);
}
void Sabertooth::SendDriveCmd(char command, char value){
////////////////////////////////Testing.....
//while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
//USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
////////////////////////////////
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
USART_PutChar(Sabertooth_USART, SABERTOOTHADDRESS); //Sends the address to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, command); //Sends the command to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, value); //Sends the value or speed to the sabertooth
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
USART_PutChar(Sabertooth_USART, SaberChecksum(command, value)); //Send the checksum of all these values to the sabertooth
}
void Sabertooth::ResetSaber(){
USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
SendDriveCmd(14, 20); //Sets the communication watchdog on the sabertooth to (x*100ms) It's currently set to two seconds.
}

View File

@@ -0,0 +1,55 @@
/*
* Sabertooth.h
*
* Created: 4/30/2014 1:08:16 PM
* Author: Corwin
*/
#ifndef __SABERTOOTH_H__
#define __SABERTOOTH_H__
#define F_CPU 32000000UL
#define SABERTOOTHADDRESS 128
#define AUTOBAUD_BYTE 170
#define LEFT_FORWARD 0
#define LEFT_BACK 1
#define RIGHT_FORWARD 4
#define RIGHT_BACK 5
#include <avr/io.h>
#include <util/delay.h>
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
class Sabertooth
{
//variables
public:
protected:
private:
//functions
public:
Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT);
void DriveTest();
void StopAll();
unsigned char SaberChecksum(unsigned char command, unsigned char value);
void ParsePacket(unsigned char left, unsigned char right);
void ResetSaber();
protected:
private:
void SendDriveCmd(char command, char value);
Sabertooth( const Sabertooth &c );
Sabertooth& operator=( const Sabertooth &c );
USART_t *Sabertooth_USART;
PORT_t *Sabertooth_PORT;
}; //Sabertooth
#endif //__SABERTOOTH_H__

View File

@@ -0,0 +1,433 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief XMEGA Timer/Counter driver source file.
*
* This file contains the function implementations the XMEGA Timer/Counter
* driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA Timer/Counter module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* Several functions use the following construct:
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
* in some occasions the operator makes it possible to write pretty clean and
* neat code. In this driver, the construct is used to set or not set a
* configuration bit based on a boolean input parameter, such as
* the "some_parameter" in the example above.
*
* \par Application note:
* AVR1306: Using the XMEGA Timer/Counter
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1569 $
* $Date: 2008-04-22 13:03:43 +0200 (ti, 22 apr 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include "avr_compiler.h"
#include "TC_driver.h"
/*! \brief Configures clock source for the Timer/Counter 0.
*
* This function clears the old clock source setting of the Timer/Counter and
* sets a new clock source according to the clockSelection parameter.
*
* \param tc Timer/Counter module instance.
* \param clockSelection Timer/Counter clock source setting.
*/
void TC0_ConfigClockSource( volatile TC0_t * tc, TC_CLKSEL_t clockSelection )
{
tc->CTRLA = ( tc->CTRLA & ~TC0_CLKSEL_gm ) | clockSelection;
}
/*! \brief Configures clock source for the Timer/Counter 1.
*
* This function clears the old clock source setting of the Timer/Counter and
* sets a new clock source according to the clockSelection parameter.
*
* \param tc Timer/Counter module instance.
* \param clockSelection Timer/Counter clock source setting.
*/
void TC1_ConfigClockSource( volatile TC1_t * tc, TC_CLKSEL_t clockSelection )
{
tc->CTRLA = ( tc->CTRLA & ~TC1_CLKSEL_gm ) | clockSelection;
}
/*! \brief Configures the Waveform Generation Mode for the Timer/Counter 0.
*
* This function clears the old WGM setting of the Timer/Counter and sets a
* new WGM setting according to the wgm parameter.
*
* \param tc Timer/Counter module instance.
* \param wgm Waveform generation mode.
*/
void TC0_ConfigWGM( volatile TC0_t * tc, TC_WGMODE_t wgm )
{
tc->CTRLB = ( tc->CTRLB & ~TC0_WGMODE_gm ) | wgm;
}
/*! \brief Configures the Waveform Generation Mode for the Timer/Counter 1.
*
* This function clears the old WGM setting of the Timer/Counter and sets a
* new WGM setting according to the wgm parameter.
*
* \param tc Timer/Counter module instance.
* \param wgm Waveform generation mode.
*/
void TC1_ConfigWGM( volatile TC1_t * tc, TC_WGMODE_t wgm )
{
tc->CTRLB = ( tc->CTRLB & ~TC1_WGMODE_gm ) | wgm;
}
/*! \brief Configures the Timer/Counter 0 for input capture operation.
*
* This function sets the Timer/Counter in input capture mode and selects
* the event lines that will trigger the individual input capture channels.
*
* \note Output compare operation is disabled when input capture operation is
* enabled.
*
* \param tc Timer/Counter module instance.
* \param eventSource Event source selection.
*/
void TC0_ConfigInputCapture( volatile TC0_t * tc, TC_EVSEL_t eventSource )
{
tc->CTRLD = ( tc->CTRLD & ~( TC0_EVSEL_gm | TC0_EVACT_gm ) ) |
eventSource |
TC_EVACT_CAPT_gc;
}
/*! \brief Configures the Timer/Counter 1 for input capture operation.
*
* This function sets the Timer/Counter in input capture mode and selects
* the event lines that will trigger the individual input capture channels.
*
* \note Output compare operation is disabled when input capture operation is
* enabled.
*
* \param tc Timer/Counter module instance.
* \param eventSource Event source selection.
*/
void TC1_ConfigInputCapture( volatile TC1_t * tc, TC_EVSEL_t eventSource )
{
tc->CTRLD = ( tc->CTRLD & ~( TC1_EVSEL_gm | TC1_EVACT_gm ) ) |
eventSource |
TC_EVACT_CAPT_gc;
}
/*! \brief Enables compare/capture channels for Timer/Counter 0.
*
* This function enables compare/capture channels according to the supplied
* enableMask. The enableMask can be obtained by ORing together the symbols
* - TC0_CCAEN_bm
* - TC0_CCBEN_bm
* - TC0_CCCEN_bm
* - TC0_CCDEN_bm
*
* Example: TC0_EnableCCChannels( &TCC0, TC0_CCAEN_bm | TC0_CCCEN_bm ) will
* enable channels A and C.
*
* \note No capture/compare channels are disabled by calling this function.
* Disabling is done by calling \ref TC0_DisableCCChannels.
*
* \param tc Timer/Counter module instance.
* \param enableMask Mask of channels to enable.
*/
void TC0_EnableCCChannels( volatile TC0_t * tc, uint8_t enableMask )
{
/* Make sure only CCxEN bits are set in enableMask. */
enableMask &= ( TC0_CCAEN_bm | TC0_CCBEN_bm | TC0_CCCEN_bm | TC0_CCDEN_bm );
/* Enable channels. */
tc->CTRLB |= enableMask;
}
/*! \brief Enables compare/capture channels for Timer/Counter 1.
*
* This function enables compare/capture channels according to the supplied
* enableMask. The enableMask can be obtained by ORing together the symbols
* - TC1_CCAEN_bm
* - TC1_CCBEN_bm
*
* Example: TC1_EnableCCChannels( &TCC1, TC1_CCAEN_bm | TC1_CCBEN_bm ) will
* enable channels A and B.
*
* \note No capture/compare channels are disabled by calling this function.
* Disabling is done by calling \ref TC1_DisableCCChannels.
*
* \param tc Timer/Counter module instance.
* \param enableMask Mask of channels to enable.
*/
void TC1_EnableCCChannels( volatile TC1_t * tc, uint8_t enableMask )
{
/* Make sure only CCxEN bits are set in enableMask. */
enableMask &= ( TC1_CCAEN_bm | TC1_CCBEN_bm );
/* Enable channels. */
tc->CTRLB |= enableMask;
}
/*! \brief Disables compare/capture channels on Timer/Counter 0.
*
* This function disables compare/capture channels according to the supplied
* disableMask. The disableMask can be obtained by ORing together the symbols
* - TC0_CCAEN_bm
* - TC0_CCBEN_bm
* - TC0_CCCEN_bm
* - TC0_CCDEN_bm
*
* Example: TC0_DisableCCChannels( &TCC0, TC0_CCAEN_bm | TC0_CCCEN_bm ) will
* disable channels A and C.
*
* \param tc Timer/Counter module instance.
* \param disableMask Mask of channels to disable.
*/
void TC0_DisableCCChannels( volatile TC0_t * tc, uint8_t disableMask )
{
/* Make sure only CCxEN bits are set in disableMask. */
disableMask &= ( TC0_CCAEN_bm | TC0_CCBEN_bm | TC0_CCCEN_bm | TC0_CCDEN_bm );
/* Disable channels. */
tc->CTRLB &= ~disableMask;
}
/*! \brief Disables compare/capture channels on Timer/Counter 1.
*
* This function disables compare/capture channels according to the supplied
* disableMask. The disableMask can be obtained by ORing together the symbols
* - TC1_CCAEN_bm
* - TC1_CCBEN_bm
*
* Example: TC1_DisableCCChannels( &TCC1, TC1_CCAEN_bm | TC1_CCBEN_bm ) will
* disable channels A and B.
*
* \param tc Timer/Counter module instance.
* \param disableMask Mask of channels to disable.
*/
void TC1_DisableCCChannels( volatile TC1_t * tc, uint8_t disableMask )
{
/* Make sure only CCxEN bits are set in disableMask. */
disableMask &= ( TC1_CCAEN_bm | TC1_CCBEN_bm );
/* Disable channels. */
tc->CTRLB &= ~disableMask;
}
/*! \brief Sets the overflow interrupt level.
*
* This function sets the overflow interrupt level of this Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New overflow interrupt level.
*/
void TC0_SetOverflowIntLevel( volatile TC0_t * tc, TC_OVFINTLVL_t intLevel )
{
tc->INTCTRLA = ( tc->INTCTRLA & ~TC0_OVFINTLVL_gm ) | intLevel;
}
/*! \brief Sets the overflow interrupt level.
*
* This function sets the overflow interrupt level of this Timer/Counter 1.
*
* \param tc Timer/Counter module instance.
* \param intLevel New overflow interrupt level.
*/
void TC1_SetOverflowIntLevel( volatile TC1_t * tc, TC_OVFINTLVL_t intLevel )
{
tc->INTCTRLA = ( tc->INTCTRLA & ~TC1_OVFINTLVL_gm ) | intLevel;
}
/*! \brief Sets the Error interrupt level.
*
* This function sets the overflow interrupt level of this Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New error interrupt level.
*/
void TC0_SetErrorIntLevel( volatile TC0_t * tc, TC_ERRINTLVL_t intLevel )
{
tc->INTCTRLA = ( tc->INTCTRLA & ~TC0_ERRINTLVL_gm ) | intLevel;
}
/*! \brief Sets the Error interrupt level.
*
* This function sets the overflow interrupt level of this Timer/Counter 1.
*
* \param tc Timer/Counter module instance.
* \param intLevel New error interrupt level.
*/
void TC1_SetErrorIntLevel( volatile TC1_t * tc, TC_ERRINTLVL_t intLevel )
{
tc->INTCTRLA = ( tc->INTCTRLA & ~TC1_ERRINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel A interrupt.
*
* This function sets the interrupt level for compare/capture channel A
* interrupt in Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel A interrupt level.
*/
void TC0_SetCCAIntLevel( volatile TC0_t * tc, TC_CCAINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCAINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel A interrupt.
*
* This function sets the interrupt level for compare/capture channel A
* interrupt in Timer/Counter 1.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel A interrupt level.
*/
void TC1_SetCCAIntLevel( volatile TC1_t * tc, TC_CCAINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC1_CCAINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel B interrupt.
*
* This function sets the interrupt level for compare/capture channel B
* interrupt in Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel B interrupt level.
*/
void TC0_SetCCBIntLevel( volatile TC0_t * tc, TC_CCBINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCBINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel B interrupt.
*
* This function sets the interrupt level for compare/capture channel B
* interrupt in Timer/Counter 1.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel B interrupt level.
*/
void TC1_SetCCBIntLevel( volatile TC1_t * tc, TC_CCBINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC1_CCBINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel C interrupt.
*
* This function sets the interrupt level for compare/capture channel C
* interrupt in Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel A interrupt level.
*/
void TC0_SetCCCIntLevel( volatile TC0_t * tc, TC_CCCINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCCINTLVL_gm ) | intLevel;
}
/*! \brief Sets the interrupt level for compare/capture channel D interrupt.
*
* This function sets the interrupt level for compare/capture channel D
* interrupt in Timer/Counter 0.
*
* \param tc Timer/Counter module instance.
* \param intLevel New compare/capture channel A interrupt level.
*/
void TC0_SetCCDIntLevel( volatile TC0_t * tc, TC_CCDINTLVL_t intLevel )
{
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCDINTLVL_gm ) | intLevel;
}
/*! \brief Resets the Timer/Counter 0.
*
* This function will reset the Timer/Counter. After calling this function,
* the Timer/Counter will be in the same state as it would after a full
* reset of the device.
*
* \param tc Timer/Counter 0 module instance.
*/
void TC0_Reset( volatile TC0_t * tc )
{
/* TC must be turned off before a Reset command. */
tc->CTRLA = ( tc->CTRLA & ~TC0_CLKSEL_gm ) | TC_CLKSEL_OFF_gc;
/* Issue Reset command. */
tc->CTRLFSET = TC_CMD_RESET_gc;
}
/*! \brief Resets the Timer/Counter 1.
*
* This function will reset the Timer/Counter. After calling this function,
* the Timer/Counter will be in the same state as it would after a full
* reset of the device.
*
* \param tc Timer/Counter 1 module instance.
*/
void TC1_Reset( volatile TC1_t * tc )
{
/* TC must be turned off before a Reset command. */
tc->CTRLA = ( tc->CTRLA & ~TC1_CLKSEL_gm ) | TC_CLKSEL_OFF_gc;
/* Issue Reset command. */
tc->CTRLFSET = TC_CMD_RESET_gc;
}

View File

@@ -0,0 +1,423 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief XMEGA Timer/Counter driver header file.
*
* This file contains the function prototypes and enumerator definitions
* for various configuration parameters for the XMEGA Timer/Counter driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA Timer/Counter module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* \par Application note:
* AVR1306: Using the XMEGA Timer/Counter
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1569 $
* $Date: 2008-04-22 13:03:43 +0200 (ti, 22 apr 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef TC_DRIVER_H
#define TC_DRIVER_H
#include "avr_compiler.h"
/* Definition of macros. */
/*! \brief Enables the event delay for this TC.
*
* This macro enables a one clock cycle delay of event sources for this TC.
* Mainly used for the high word TC when two TCs are cascaded to form a 32-bit
* TC.
*
* \param _tc The Timer/Counter to enable delay on.
*/
#define TC_EnableEventDelay( _tc ) ( (_tc)->CTRLD |= TC0_EVDLY_bm )
/*! \brief This macro disables the event delay for this TC.
*
* \param _tc The Timer/Counter to disable delay on.
*/
#define TC_DisableEventDelay( _tc ) ( (_tc)->CTRLD &= ~TC0_EVDLY_bm )
/*! \brief Locks automatic updating of compare and period registers.
*
* This macro will lock automatic updates of compare registers from the
* corresponding buffer registers. To enable automatic updates again, use the
* \ref TC_UnlockCompareUpdate macro.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_LockCompareUpdate( _tc ) ( (_tc)->CTRLFSET = TC0_LUPD_bm )
/*! \brief Unlocks automatic updating of compare and period registers.
*
* This macro will unlock automatic updates of compare registers from the
* corresponding buffer registers. Note that the output compare registers will
* not be updated until an update event occurs, e.g. that the counter hits
* TOP or BOTTOM. To force an update of the compare register from the buffer
* register, use the \ref TC_ForceUpdate macro.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_UnlockCompareUpdate( _tc ) ( (_tc)->CTRLFCLR = TC0_LUPD_bm )
/*! \brief Force an update of the output compare and period registers.
*
* This macro will trigger a transfer from the output compare and period
* buffer registers ( CCxBUF and PERBUF ) to the output compare and period
* registers ( CCx and PER ). Calling this macro has the same effect as an
* update condition.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_ForceUpdate( _tc ) ( (_tc)->CTRLFSET = TC_CMD_UPDATE_gc )
/*! \brief Restart the Timer/Counter.
*
* This macro will restart the timer. The effect of running this command is:
* - The CNT[H:L] register is cleared.
* - The direction (DIR ) is reset. (Next clock cycle will increase the counter )
* - All compare outputs are set to 0.
* - If a DTI module is connected to the timer, it will be reset as well.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_Restart( _tc ) ( (_tc)->CTRLFSET = TC_CMD_RESTART_gc )
/*! \brief Manually set the count.
*
* This macro writes a new value to the CNT[H:L] register.
* Note that the CNT[H:L] register is not double buffered, so it is recommended
* that the timer is not running when this macro is used.
*
* \param _tc Timer/Counter module instance.
* \param _count New count value.
*/
#define TC_SetCount( _tc, _count ) ( (_tc)->CNT = (_count) )
/*! \brief Sets the timer period.
*
* This macro sets a new timer period. The period buffer register is not
* used, so the new period will be valid immediately after the 16-bit write
* is finished.
*
* \param _tc Timer/Counter module instance.
* \param _period New Timer/Counter period.
*/
#define TC_SetPeriod( _tc, _period ) ( (_tc)->PER = (_period) )
/*! \brief Sets the timer period ( double buffered ).
*
* This macro sets a new timer period. The period buffer register is used,
* so the new period will be valid after the next update condition.
*
* \param _tc Timer/Counter 0 or 1 module instance.
* \param _period New Timer/Counter period.
*/
#define TC_SetPeriodBuffered( _tc, _period ) ( (_tc)->PERBUF = (_period) )
/*! \brief Set new compare value for compare channel A. ( Double buffered )
*
* This macro sets a new compare value for compare channel A. The compare
* channel A buffer register is used, so the new period will be valid from the
* next update condition.
*
* \param _tc Timer/Counter 0 or 1 module instance.
* \param _compareValue New compare value for compare channel A.
*/
#define TC_SetCompareA( _tc, _compareValue ) ( (_tc)->CCABUF = (_compareValue) )
/*! \brief Set new compare value for compare channel B. ( Double buffered )
*
* This macro sets a new compare value for compare channel B. The compare
* channel B buffer register is used, so the new period will be valid from the
* next update condition.
*
* \param _tc Timer/Counter 0 or 1 module instance.
* \param _compareValue New compare value for compare channel B.
*/
#define TC_SetCompareB( _tc, _compareValue ) ( (_tc)->CCBBUF = (_compareValue) )
/*! \brief Set new compare value for compare channel C. ( Double buffered )
*
* This macro sets a new compare value for compare channel C. The compare
* channel C buffer register is used, so the new period will be valid from the
* next update condition.
*
* \note The CCC channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
* \param _compareValue New compare value for compare channel C.
*/
#define TC_SetCompareC( _tc, _compareValue ) ( (_tc)->CCCBUF = (_compareValue) )
/*! \brief Set new compare value for compare channel D. ( Double buffered )
*
* This macro sets a new compare value for compare channel D. The compare
* channel D buffer register is used, so the new period will be valid from the
* next update condition.
*
* \note The CCD channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
* \param _compareValue New compare value for compare channel D.
*/
#define TC_SetCompareD( _tc, _compareValue ) ( (_tc)->CCDBUF = (_compareValue) )
/*! \brief Test whether an overflow has occurred.
*
* The return value of this macro indicates if an overflow has occurred.
*
* \param _tc Timer/Counter module instance.
*
* \return Non-zero if overflow flag is set, zero otherwise.
*/
#define TC_GetOverflowFlag( _tc ) ( (_tc)->INTFLAGS & TC0_OVFIF_bm )
/*! \brief Clears the Timer/Counter overflow flag.
*
* This macro clears the Timer/Counter overflow flag.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_ClearOverflowFlag( _tc ) ( (_tc)->INTFLAGS = TC0_OVFIF_bm )
/*! \brief Test whether an error has occurred.
*
* The return value of this macro indicates if an error has occurred.
*
* \param _tc Timer/Counter module instance.
*
* \return Non-zero if the Timer error flag is set.
*/
#define TC_GetErrorFlag( _tc ) ( (_tc)->INTFLAGS & TC0_ERRIF_bm )
/*! \brief Clears the Timer/Counter error flag.
*
* This macro clears the Timer/Counter error flag.
*
* \param _tc Timer/Counter module instance.
*/
#define TC_ClearErrorFlag( _tc ) ( (_tc)->INTFLAGS = TC0_ERRIF_bm )
/*! \brief Get the status for Compare or Capture channel A.
*
* When the TC is in Input Capture mode, the return value of this macro
* indicates whether there is an unread input capture value available for
* capture channel A.
*
* When the TC is in any other mode, the return value of this macro
* indicates whether there has been a compare match between channel A and the
* counter.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*
* \return Non-zero if Compare or capture has occured, zero otherwise.
*/
#define TC_GetCCAFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCAIF_bm )
/*! \brief Clears the Timer/Counter compare or capture A interrupt flag.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*/
#define TC_ClearCCAFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCAIF_bm )
/*! \brief Get the status for Compare or Capture channel B.
*
* When the TC is in Input Capture mode, the return value of this macro
* indicates whether there is an unread input capture value available for
* capture channel B.
*
* When the TC is in any other mode, the return value of this macro
* indicates whether there has been a compare match between channel B and the
* counter.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*
* \return Non-zero if Compare or capture has occured, zero otherwise.
*/
#define TC_GetCCBFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCBIF_bm )
/*! \brief Clears the Timer/Counter compare or capture B interrupt flag.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*/
#define TC_ClearCCBFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCBIF_bm )
/*! \brief Get the status for Compare or Capture channel C.
*
* When the TC is in Input Capture mode, the return value of this macro
* indicates whether there is an unread input capture value available for
* capture channel C.
*
* When the TC is in any other mode, the return value of this macro
* indicates whether there has been a compare match between channel C and the
* counter.
*
* \note The CCC channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*
* \return Non-zero if Compare or capture has occured, zero otherwise.
*/
#define TC_GetCCCFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCCIF_bm )
/*! \brief Clears the Timer/Counter compare or capture C interrupt flag.
*
* This macro clears the Timer/Counter compare or capture C interrupt flag.
*
* \note The CCC channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*/
#define TC_ClearCCCFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCCIF_bm )
/*! \brief Get the status for Compare or Capture channel D.
*
* When the TC is in Input Capture mode, the return value of this macro
* indicates whether there is an unread input capture value available for
* capture channel D.
*
* When the TC is in any other mode, the return value of this macro
* indicates whether there has been a compare match between channel D and the
* counter.
*
* \note The CCD channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*
* \return Non-zero if Compare or capture has occured, zero otherwise.
*/
#define TC_GetCCDFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCDIF_bm )
/*! \brief Clears the Timer/Counter compare or capture D interrupt flag.
*
* This macro clears the Timer/Counter compare or capture D interrupt flag.
*
* \note The CCD channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*/
#define TC_ClearCCDFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCDIF_bm )
/*! \brief Reads the first available input capture value for channel A.
*
* This macro returns the first available input capture value for
* capture channel A.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*
* \return The first available input capture value for channel A.
*/
#define TC_GetCaptureA( _tc ) ( (_tc)->CCA )
/*! \brief Reads the first available input capture value for channel B.
*
* This macro returns the first available input capture value for
* capture channel B.
*
* \param _tc Timer/Counter 0 or 1 module instance.
*
* \return The first available input capture value for channel B.
*/
#define TC_GetCaptureB( _tc ) ( (_tc)->CCB )
/*! \brief Reads the first available input capture value for channel C.
*
* This macro returns the first available input capture value for
* capture channel C.
*
* \note The CCC channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*
* \return The first available input capture value for channel C.
*/
#define TC_GetCaptureC( _tc ) ( (_tc)->CCC )
/*! \brief Reads the first available input capture value for channel D.
*
* This macro returns the first available input capture value for
* capture channel D.
*
* \note The CCD channel is not available on TCx1.
*
* \param _tc Timer/Counter 0 module instance.
*
* \return The first available input capture value for channel D.
*/
#define TC_GetCaptureD( _tc ) ( (_tc)->CCD )
/* Prototyping of functions. Documentation can be found in source file. */
void TC0_ConfigClockSource( volatile TC0_t * tc, TC_CLKSEL_t clockSelection );
void TC0_ConfigWGM( volatile TC0_t * tc, TC_WGMODE_t wgm );
void TC0_ConfigInputCapture( volatile TC0_t * tc, TC_EVSEL_t eventSource );
void TC0_EnableCCChannels( volatile TC0_t * tc, uint8_t enableMask );
void TC0_DisableCCChannels( volatile TC0_t * tc, uint8_t disableMask );
void TC0_SetOverflowIntLevel( volatile TC0_t * tc, TC_OVFINTLVL_t intLevel );
void TC0_SetErrorIntLevel( volatile TC0_t * tc, TC_ERRINTLVL_t intLevel );
void TC0_SetCCAIntLevel( volatile TC0_t * tc, TC_CCAINTLVL_t intLevel );
void TC0_SetCCBIntLevel( volatile TC0_t * tc, TC_CCBINTLVL_t intLevel );
void TC0_SetCCCIntLevel( volatile TC0_t * tc, TC_CCCINTLVL_t intLevel );
void TC0_SetCCDIntLevel( volatile TC0_t * tc, TC_CCDINTLVL_t intLevel );
void TC0_Reset( volatile TC0_t * tc );
void TC1_ConfigClockSource( volatile TC1_t * tc, TC_CLKSEL_t clockSelection );
void TC1_ConfigWGM( volatile TC1_t * tc, TC_WGMODE_t wgm );
void TC1_ConfigInputCapture( volatile TC1_t * tc, TC_EVSEL_t eventSource );
void TC1_EnableCCChannels( volatile TC1_t * tc, uint8_t enableMask );
void TC1_DisableCCChannels( volatile TC1_t * tc, uint8_t disableMask );
void TC1_SetOverflowIntLevel( volatile TC1_t * tc, TC_OVFINTLVL_t intLevel );
void TC1_SetErrorIntLevel( volatile TC1_t * tc, TC_ERRINTLVL_t intLevel );
void TC1_SetCCAIntLevel( volatile TC1_t * tc, TC_CCAINTLVL_t intLevel );
void TC1_SetCCBIntLevel( volatile TC1_t * tc, TC_CCBINTLVL_t intLevel );
void TC1_SetCCCIntLevel( volatile TC1_t * tc, TC_CCCINTLVL_t intLevel );
void TC1_SetCCDIntLevel( volatile TC1_t * tc, TC_CCDINTLVL_t intLevel );
void TC1_Reset( volatile TC1_t * tc );
#endif

View File

@@ -0,0 +1,154 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief This file implements some macros that makes the IAR C-compiler and
* avr-gcc work with the same code base for the AVR architecture.
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
#ifndef COMPILER_AVR_H
#define COMPILER_AVR_H
#ifndef F_CPU
/*! \brief Define default CPU frequency, if this is not already defined. */
#define F_CPU 2000000UL
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
/*! \brief This macro will protect the following code from interrupts. */
#define AVR_ENTER_CRITICAL_REGION( ) uint8_t volatile saved_sreg = SREG; \
cli();
/*! \brief This macro must always be used in conjunction with AVR_ENTER_CRITICAL_REGION
* so the interrupts are enabled again.
*/
#define AVR_LEAVE_CRITICAL_REGION( ) SREG = saved_sreg;
#if defined( __ICCAVR__ )
#include <inavr.h>
#include <ioavr.h>
#include <intrinsics.h>
#include <pgmspace.h>
#ifndef __HAS_ELPM__
#define _MEMATTR __flash
#else /* __HAS_ELPM__ */
#define _MEMATTR __farflash
#endif /* __HAS_ELPM__ */
/*! \brief Perform a delay of \c us microseconds.
*
* The macro F_CPU is supposed to be defined to a constant defining the CPU
* clock frequency (in Hertz).
*
* The maximal possible delay is 262.14 ms / F_CPU in MHz.
*
* \note For the IAR compiler, currently F_CPU must be a
* multiple of 1000000UL (1 MHz).
*/
#define delay_us( us ) ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
/*! \brief Preprocessor magic.
*
* Some preprocessor magic to allow for a header file abstraction of
* interrupt service routine declarations for the IAR compiler. This
* requires the use of the C99 _Pragma() directive (rather than the
* old #pragma one that could not be used as a macro replacement), as
* well as two different levels of preprocessor concetanations in
* order to do both, assign the correct interrupt vector name, as well
* as construct a unique function name for the ISR.
*
* \note Do *NOT* try to reorder the macros below, as this will only
* work in the given order.
*/
#define PRAGMA(x) _Pragma( #x )
#define ISR(vec) PRAGMA( vector=vec ) __interrupt void handler_##vec(void)
#define sei( ) (__enable_interrupt( ))
#define cli( ) (__disable_interrupt( ))
/*! \brief Define the no operation macro. */
#define nop( ) (__no_operation())
/*! \brief Define the watchdog reset macro. */
#define watchdog_reset( ) (__watchdog_reset( ))
#define INLINE PRAGMA( inline=forced ) static
#define FLASH_DECLARE(x) _MEMATTR x
#define FLASH_STRING(x) ((_MEMATTR const char *)(x))
#define FLASH_STRING_T char const _MEMATTR *
#define FLASH_BYTE_ARRAY_T uint8_t const _MEMATTR *
#define PGM_READ_BYTE(x) *(x)
#define PGM_READ_WORD(x) *(x)
#define SHORTENUM /**/
#elif defined( __GNUC__ )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
/*! \brief Define the delay_us macro for GCC. */
#define delay_us( us ) (_delay_us( us ))
#define INLINE static inline
/*! \brief Define the no operation macro. */
#define nop() do { __asm__ __volatile__ ("nop"); } while (0)
#define MAIN_TASK_PROLOGUE int
#define MAIN_TASK_EPILOGUE() return -1;
#define SHORTENUM __attribute__ ((packed))
#else
#error Compiler not supported.
#endif
#endif

View File

@@ -0,0 +1,170 @@
/*
* DriveControl.cpp
*
* Created: 4/22/2014 8:54:20 PM
* Author: corwin
PE3 - Status LED
*/
#define F_CPU 32000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "Sabertooth.h"
#include "Misc.h"
extern "C"{
#include "usart_driver.h"
#include "avr_compiler.h"
};
#define TIMEOUTMAX 5 //Time in seconds before state change back to init
/*! Define that selects the Usart used in example. */
#define XBEEDIO0 PIN5_bm //PORTA
#define SabertoothTx PIN3_bm //PORTD
#define StatusLight PIN3_bm //PORTE
#define RECEIVE_PACKET_SIZE 6
#define SEND_PACKET_SIZE 4
uint8_t sendArray[SEND_PACKET_SIZE] = {0x55, 0xaa, 0xf0};
uint8_t receiveArray[RECEIVE_PACKET_SIZE];
USART_data_t USART_PC_Data;
bool IsRoving = false;
volatile long unsigned int TimeSinceInit = 0;
long unsigned int TimePrevious = 0;
int main(void)
{
SetXMEGA32MhzCalibrated(); //Set XMega to user 32Mhz internal oscillator with 32Khz crystal calibration
///////Setup Inputs and Outputs///////
PORTC.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm | PIN3_bm); //Sets outputs on port C
PORTC.DIRCLR = PIN2_bm; //Sets inputs on PORT C
PORTA.DIRCLR = XBEEDIO0;
PORTE.DIRSET = PIN3_bm; //Sets inputs on PORTA
///////Initialize Serial Communcations///////
SetupPCComms(); //Initializes PC Communications at 9600 baud0
_delay_ms(500); //Delay to make sabertooth initialize
Sabertooth DriveSaber(&USARTD0, &PORTD); //Initializes Sabertooth Communications at 9600 Baud
//////////////////Timers///////////////
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
TCC0.CTRLB = TC_WGMODE_NORMAL_gc;
TCC0.PER = 15625;
TCC0.INTCTRLA = TC_OVFINTLVL_LO_gc;
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
TCD0.CTRLB = TC_WGMODE_NORMAL_gc;
TCD0.PER = 31250;
TCD0.INTCTRLA = TC_OVFINTLVL_LO_gc;
///////////////////Timers//////////////
sei(); //Enables global interrupts so the interrupt serial can work
////Semi-global vars//////
unsigned char BufferIdx = 0;
const char XMegaID[] = "ID: MainDrive\r\n";
enum MicroState{
WaitForHost,
Driving
}XMegaState = WaitForHost;
while(1){
switch(XMegaState){
case WaitForHost:
for(int i = 0 ; XMegaID[i] != '\0'; i++){
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
USART_PutChar(&USARTC0, XMegaID[i]);
}
_delay_ms(500);
if(USART_RXBufferData_Available(&USART_PC_Data)){
if(USART_RXBuffer_GetByte(&USART_PC_Data) == 'r'){
XMegaState = Driving;
USART_PutChar(&USARTC0, 'r');
BufferIdx = 0;
}
}
TimePrevious = TimeSinceInit;
break;
case Driving:
if(USART_RXBufferData_Available(&USART_PC_Data)){
receiveArray[BufferIdx] = USART_RXBuffer_GetByte(&USART_PC_Data);
BufferIdx++;
}
if(BufferIdx == RECEIVE_PACKET_SIZE){
FlushSerialBuffer(&USART_PC_Data);
if(IsRoving){
if(receiveArray[4] == PCComsChecksum(receiveArray[1], receiveArray[2], receiveArray[3])){
DriveSaber.ParsePacket(receiveArray[2], receiveArray[3]);
STATUS1_SET();
}
else{STATUS1_CLR();}
}else if(!IsRoving){
_delay_ms(10);
}
BufferIdx = 0;
SendDriveControlStatus(&USARTC0, IsRoving, false);
TimePrevious = TimeSinceInit;
}
if((TimeSinceInit - TimePrevious) > TIMEOUTMAX){
DriveSaber.StopAll();
XMegaState = WaitForHost;
TimePrevious = TimeSinceInit;
}
break;
};
if(!IsRoving){
DriveSaber.StopAll();
}
if((PORTA.IN & XBEEDIO0)){
ERROR_CLR();
IsRoving = true;
}else if((!(PORTA.IN & XBEEDIO0))){
ERROR_SET();
IsRoving = false;
}
}
}
ISR(USARTC0_RXC_vect){
USART_RXComplete(&USART_PC_Data);
}
ISR(USARTC0_DRE_vect){
USART_DataRegEmpty(&USART_PC_Data);
}
ISR(TCC0_OVF_vect){
if(IsRoving){
JUDGELED_TOGGLE();
}else if(!IsRoving){
JUDGELED_SET();
}
}
ISR(TCD0_OVF_vect){
STATUS2_TOGGLE();
TimeSinceInit++;
}

View File

@@ -0,0 +1,320 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief
* XMEGA USART driver source file.
*
* This file contains the function implementations the XMEGA interrupt
* and polled USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* Some functions use the following construct:
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
* in some occasions the operator makes it possible to write pretty clean and
* neat code. In this driver, the construct is used to set or not set a
* configuration bit based on a boolean input parameter, such as
* the "some_parameter" in the example above.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include "usart_driver.h"
/*! \brief Initializes buffer and selects what USART module to use.
*
* Initializes receive and transmit buffer and selects what USART module to use,
* and stores the data register empty interrupt level.
*
* \param usart_data The USART_data_t struct instance.
* \param usart The USART module.
* \param dreIntLevel Data register empty interrupt level.
*/
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->usart = usart;
usart_data->dreIntLevel = dreIntLevel;
usart_data->buffer.RX_Tail = 0;
usart_data->buffer.RX_Head = 0;
usart_data->buffer.TX_Tail = 0;
usart_data->buffer.TX_Head = 0;
}
/*! \brief Set USART DRE interrupt level.
*
* Set the interrupt level on Data Register interrupt.
*
* \note Changing the DRE interrupt level in the interrupt driver while it is
* running will not change the DRE interrupt level in the USART before the
* DRE interrupt have been disabled and enabled again.
*
* \param usart_data The USART_data_t struct instance
* \param dreIntLevel Interrupt level of the DRE interrupt.
*/
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel)
{
usart_data->dreIntLevel = dreIntLevel;
}
/*! \brief Test if there is data in the transmitter software buffer.
*
* This function can be used to test if there is free space in the transmitter
* software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = (usart_data->buffer.TX_Head + 1) & USART_TX_BUFFER_MASK;
uint8_t tempTail = usart_data->buffer.TX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Put data (5-8 bit character).
*
* Stores data byte in TX software buffer and enables DRE interrupt if there
* is free space in the TX software buffer.
*
* \param usart_data The USART_data_t struct instance.
* \param data The data to send.
*/
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
{
uint8_t tempCTRLA;
uint8_t tempTX_Head;
bool TXBuffer_FreeSpace;
USART_Buffer_t * TXbufPtr;
TXbufPtr = &usart_data->buffer;
TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);
if(TXBuffer_FreeSpace)
{
tempTX_Head = TXbufPtr->TX_Head;
TXbufPtr->TX[tempTX_Head]= data;
/* Advance buffer head. */
TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;
/* Enable DRE interrupt. */
tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
usart_data->usart->CTRLA = tempCTRLA;
}
return TXBuffer_FreeSpace;
}
/*! \brief Test if there is data in the receive software buffer.
*
* This function can be used to test if there is data in the receive software
* buffer.
*
* \param usart_data The USART_data_t struct instance
*
* \retval true There is data in the receive buffer.
* \retval false The receive buffer is empty.
*/
bool USART_RXBufferData_Available(USART_data_t * usart_data)
{
/* Make copies to make sure that volatile access is specified. */
uint8_t tempHead = usart_data->buffer.RX_Head;
uint8_t tempTail = usart_data->buffer.RX_Tail;
/* There are data left in the buffer unless Head and Tail are equal. */
return (tempHead != tempTail);
}
/*! \brief Get received data (5-8 bit character).
*
* The function USART_RXBufferData_Available should be used before this
* function is used to ensure that data is available.
*
* Returns data from RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*
* \return Received data.
*/
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
uint8_t ans;
bufPtr = &usart_data->buffer;
ans = (bufPtr->RX[bufPtr->RX_Tail]);
/* Advance buffer tail. */
bufPtr->RX_Tail = (bufPtr->RX_Tail + 1) & USART_RX_BUFFER_MASK;
return ans;
}
/*! \brief RX Complete Interrupt Service Routine.
*
* RX Complete Interrupt Service Routine.
* Stores received data in RX software buffer.
*
* \param usart_data The USART_data_t struct instance.
*/
bool USART_RXComplete(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bool ans;
bufPtr = &usart_data->buffer;
/* Advance buffer head. */
uint8_t tempRX_Head = (bufPtr->RX_Head + 1) & USART_RX_BUFFER_MASK;
/* Check for overflow. */
uint8_t tempRX_Tail = bufPtr->RX_Tail;
uint8_t data = usart_data->usart->DATA;
if (tempRX_Head == tempRX_Tail) {
ans = false;
}else{
ans = true;
usart_data->buffer.RX[usart_data->buffer.RX_Head] = data;
usart_data->buffer.RX_Head = tempRX_Head;
}
return ans;
}
/*! \brief Data Register Empty Interrupt Service Routine.
*
* Data Register Empty Interrupt Service Routine.
* Transmits one byte from TX software buffer. Disables DRE interrupt if buffer
* is empty. Argument is pointer to USART (USART_data_t).
*
* \param usart_data The USART_data_t struct instance.
*/
void USART_DataRegEmpty(USART_data_t * usart_data)
{
USART_Buffer_t * bufPtr;
bufPtr = &usart_data->buffer;
/* Check if all data is transmitted. */
uint8_t tempTX_Tail = usart_data->buffer.TX_Tail;
if (bufPtr->TX_Head == tempTX_Tail){
/* Disable DRE interrupts. */
uint8_t tempCTRLA = usart_data->usart->CTRLA;
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc;
usart_data->usart->CTRLA = tempCTRLA;
}else{
/* Start transmitting. */
uint8_t data = bufPtr->TX[usart_data->buffer.TX_Tail];
usart_data->usart->DATA = data;
/* Advance buffer tail. */
bufPtr->TX_Tail = (bufPtr->TX_Tail + 1) & USART_TX_BUFFER_MASK;
}
}
/*! \brief Put data (9 bit character).
*
* Use the function USART_IsTXDataRegisterEmpty before using this function to
* put 9 bit character to the TX register.
*
* \param usart The USART module.
* \param data The data to send.
*/
void USART_NineBits_PutChar(USART_t * usart, uint16_t data)
{
if(data & 0x0100) {
usart->CTRLB |= USART_TXB8_bm;
}else {
usart->CTRLB &= ~USART_TXB8_bm;
}
usart->DATA = (data & 0x00FF);
}
/*! \brief Get received data (9 bit character).
*
* This function reads out the received 9 bit character (uint16_t).
* Use the function USART_IsRXComplete to check if anything is received.
*
* \param usart The USART module.
*
* \retval Received data.
*/
uint16_t USART_NineBits_GetChar(USART_t * usart)
{
if(usart->CTRLB & USART_RXB8_bm) {
return(0x0100 | usart->DATA);
}else {
return(usart->DATA);
}
}

View File

@@ -0,0 +1,306 @@
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
*
* \brief XMEGA USART driver header file.
*
* This file contains the function prototypes and enumerator definitions
* for various configuration parameters for the XMEGA USART driver.
*
* The driver is not intended for size and/or speed critical code, since
* most functions are just a few lines of code, and the function call
* overhead would decrease code performance. The driver is intended for
* rapid prototyping and documentation purposes for getting started with
* the XMEGA ADC module.
*
* For size and/or speed critical code, it is recommended to copy the
* function contents directly into your application instead of making
* a function call.
*
* \par Application note:
* AVR1307: Using the XMEGA USART
*
* \par Documentation
* For comprehensive code documentation, supported compilers, compiler
* settings and supported devices see readme.html
*
* \author
* Atmel Corporation: http://www.atmel.com \n
* Support email: avr@atmel.com
*
* $Revision: 1694 $
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
*
* Copyright (c) 2008, Atmel Corporation All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of ATMEL may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef USART_DRIVER_H
#define USART_DRIVER_H
#include "avr_compiler.h"
/* USART buffer defines. */
/* \brief Receive buffer size: 2,4,8,16,32,64,128 or 256 bytes. */
#define USART_RX_BUFFER_SIZE 4
/* \brief Transmit buffer size: 2,4,8,16,32,64,128 or 256 bytes */
#define USART_TX_BUFFER_SIZE 4
/* \brief Receive buffer mask. */
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
/* \brief Transmit buffer mask. */
#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
#error RX buffer size is not a power of 2
#endif
#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )
#error TX buffer size is not a power of 2
#endif
/* \brief USART transmit and receive ring buffer. */
typedef struct USART_Buffer
{
/* \brief Receive buffer. */
volatile uint8_t RX[USART_RX_BUFFER_SIZE];
/* \brief Transmit buffer. */
volatile uint8_t TX[USART_TX_BUFFER_SIZE];
/* \brief Receive buffer head. */
volatile uint8_t RX_Head;
/* \brief Receive buffer tail. */
volatile uint8_t RX_Tail;
/* \brief Transmit buffer head. */
volatile uint8_t TX_Head;
/* \brief Transmit buffer tail. */
volatile uint8_t TX_Tail;
} USART_Buffer_t;
/*! \brief Struct used when interrupt driven driver is used.
*
* Struct containing pointer to a usart, a buffer and a location to store Data
* register interrupt level temporary.
*/
typedef struct Usart_and_buffer
{
/* \brief Pointer to USART module to use. */
USART_t * usart;
/* \brief Data register empty interrupt level. */
USART_DREINTLVL_t dreIntLevel;
/* \brief Data buffer. */
USART_Buffer_t buffer;
} USART_data_t;
/* Macros. */
/*! \brief Macro that sets the USART frame format.
*
* Sets the frame format, Frame Size, parity mode and number of stop bits.
*
* \param _usart Pointer to the USART module
* \param _charSize The character size. Use USART_CHSIZE_t type.
* \param _parityMode The parity Mode. Use USART_PMODE_t type.
* \param _twoStopBits Enable two stop bit mode. Use bool type.
*/
#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits) \
(_usart)->CTRLC = (uint8_t) _charSize | _parityMode | \
(_twoStopBits ? USART_SBMODE_bm : 0)
/*! \brief Set USART baud rate.
*
* Sets the USART's baud rate register.
*
* UBRR_Value : Value written to UBRR
* ScaleFactor : Time Base Generator Scale Factor
*
* Equation for calculation of BSEL value in asynchronous normal speed mode:
* If ScaleFactor >= 0
* BSEL = ((I/O clock frequency)/(2^(ScaleFactor)*16*Baudrate))-1
* If ScaleFactor < 0
* BSEL = (1/(2^(ScaleFactor)*16))*(((I/O clock frequency)/Baudrate)-1)
*
* \note See XMEGA manual for equations for calculation of BSEL value in other
* modes.
*
* \param _usart Pointer to the USART module.
* \param _bselValue Value to write to BSEL part of Baud control register.
* Use uint16_t type.
* \param _bScaleFactor USART baud rate scale factor.
* Use uint8_t type
*/
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor) \
(_usart)->BAUDCTRLA =(uint8_t)_bselValue; \
(_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)
/*! \brief Enable USART receiver.
*
* \param _usart Pointer to the USART module
*/
#define USART_Rx_Enable(_usart) ((_usart)->CTRLB |= USART_RXEN_bm)
/*! \brief Disable USART receiver.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Rx_Disable(_usart) ((_usart)->CTRLB &= ~USART_RXEN_bm)
/*! \brief Enable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Enable(_usart) ((_usart)->CTRLB |= USART_TXEN_bm)
/*! \brief Disable USART transmitter.
*
* \param _usart Pointer to the USART module.
*/
#define USART_Tx_Disable(_usart) ((_usart)->CTRLB &= ~USART_TXEN_bm)
/*! \brief Set USART RXD interrupt level.
*
* Sets the interrupt level on RX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _rxdIntLevel Interrupt level of the RXD interrupt.
* Use USART_RXCINTLVL_t type.
*/
#define USART_RxdInterruptLevel_Set(_usart, _rxdIntLevel) \
((_usart)->CTRLA = ((_usart)->CTRLA & ~USART_RXCINTLVL_gm) | _rxdIntLevel)
/*! \brief Set USART TXD interrupt level.
*
* Sets the interrupt level on TX Complete interrupt.
*
* \param _usart Pointer to the USART module.
* \param _txdIntLevel Interrupt level of the TXD interrupt.
* Use USART_TXCINTLVL_t type.
*/
#define USART_TxdInterruptLevel_Set(_usart, _txdIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_TXCINTLVL_gm) | _txdIntLevel
/*! \brief Set USART DRE interrupt level.
*
* Sets the interrupt level on Data Register interrupt.
*
* \param _usart Pointer to the USART module.
* \param _dreIntLevel Interrupt level of the DRE interrupt.
* Use USART_DREINTLVL_t type.
*/
#define USART_DreInterruptLevel_Set(_usart, _dreIntLevel) \
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_DREINTLVL_gm) | _dreIntLevel
/*! \brief Set the mode the USART run in.
*
* Set the mode the USART run in. The default mode is asynchronous mode.
*
* \param _usart Pointer to the USART module register section.
* \param _usartMode Selects the USART mode. Use USART_CMODE_t type.
*
* USART modes:
* - 0x0 : Asynchronous mode.
* - 0x1 : Synchronous mode.
* - 0x2 : IrDA mode.
* - 0x3 : Master SPI mode.
*/
#define USART_SetMode(_usart, _usartMode) \
((_usart)->CTRLC = ((_usart)->CTRLC & (~USART_CMODE_gm)) | _usartMode)
/*! \brief Check if data register empty flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsTXDataRegisterEmpty(_usart) (((_usart)->STATUS & USART_DREIF_bm) != 0)
/*! \brief Put data (5-8 bit character).
*
* Use the macro USART_IsTXDataRegisterEmpty before using this function to
* put data to the TX register.
*
* \param _usart The USART module.
* \param _data The data to send.
*/
#define USART_PutChar(_usart, _data) ((_usart)->DATA = _data)
/*! \brief Checks if the RX complete interrupt flag is set.
*
* Checks if the RX complete interrupt flag is set.
*
* \param _usart The USART module.
*/
#define USART_IsRXComplete(_usart) (((_usart)->STATUS & USART_RXCIF_bm) != 0)
/*! \brief Get received data (5-8 bit character).
*
* This macro reads out the RX register.
* Use the macro USART_RX_Complete to check if anything is received.
*
* \param _usart The USART module.
*
* \retval Received data.
*/
#define USART_GetChar(_usart) ((_usart)->DATA)
/* Functions for interrupt driven driver. */
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
USART_t * usart,
USART_DREINTLVL_t dreIntLevel );
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
USART_DREINTLVL_t dreIntLevel);
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data);
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data);
bool USART_RXBufferData_Available(USART_data_t * usart_data);
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data);
bool USART_RXComplete(USART_data_t * usart_data);
void USART_DataRegEmpty(USART_data_t * usart_data);
/* Functions for polled driver. */
void USART_NineBits_PutChar(USART_t * usart, uint16_t data);
uint16_t USART_NineBits_GetChar(USART_t * usart);
#endif

View File

@@ -0,0 +1,3 @@
Firmware for all final boards should go here.
All firmware developed using Atmel Studio 6.2.

View File

@@ -0,0 +1,52 @@
DriveFeedback.d DriveFeedback.o: .././DriveFeedback.cpp \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iom328p.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iom328p.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdio.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h:
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:

View File

@@ -0,0 +1,188 @@
:100000000C9434000C9451000C9451000C94510049
:100010000C9451000C9451000C9451000C9451001C
:100020000C9451000C9451000C9451000C9451000C
:100030000C9451000C9451000C9451000C945100FC
:100040000C9451000C9451000C9451000C945100EC
:100050000C9451000C9451000C9451000C945100DC
:100060000C9451000C94510011241FBECFEFD8E026
:10007000DEBFCDBF11E0A0E0B1E0E2E6FBE002C0F0
:1000800005900D92A433B107D9F721E0A4E3B1E0C4
:1000900001C01D92A839B207E1F70E94BE000C947E
:1000A000AF050C940000389839983A983B983C98E2
:1000B0003D9852985398549A559A569A579A219A1D
:1000C000229A299A5F9A2A98519A5098089520E086
:1000D00030E040E851E40E947B029B01AC0160E00B
:1000E00074E284E79BE40E94910120E030E040E864
:1000F0005FE30E942C010E94F9017093C500609398
:10010000C40088E98093C10086E08093C20008950E
:10011000E0ECF0E0908195FFFDCF8093C60008955C
:10012000CF93DF93EC018881882331F021960E94E0
:10013000880089918111FBCFDF91CF91089596B10D
:1001400066B146B186B156B156B159B159B1627076
:1001500070E0660F771F292F217030E0262B372B98
:10016000447050E0440F551F440F551F242B352B6E
:100170008870880F880F880F822B08950E94530083
:100180002FEF89E698E1215080409040E1F700C0D0
:10019000000060E070E086E196E40E9467002FEFC7
:1001A00089E698E1215080409040E1F700C00000CE
:1001B00080E091E00E9490002FEF87EA91E62150C5
:1001C00080409040E1F700C000000CE111E0C4E382
:1001D000D1E05C985D985E9A8FE39CE90197F1F716
:1001E00000C000000E949F005D9A8FE39CE9019788
:1001F000F1F700C000000E949F005D985E988FE3B9
:100200009CE90197F1F700C000000E949F005D9AF1
:100210008FE39CE90197F1F700C000000E949F0066
:100220005C9A1F928F931F930F93DF93CF930E943B
:10023000DE02CE010E9490008FEF91EE24E081500B
:1002400090402040E1F700C000000F900F900F9009
:100250000F900F900F90BDCF5058BB27AA270ED0FC
:1002600010C101D130F006D120F031F49F3F11F4DC
:100270001EF4F6C00EF4E095E7FBECC0E92F12D1B6
:1002800080F3BA17620773078407950718F071F4B3
:100290009EF52AC10EF4E0950B2EBA2FA02D0B016E
:1002A000B90190010C01CA01A0011124FF27591BBB
:1002B00099F0593F50F4503E68F11A16F040A22FC1
:1002C000232F342F4427585FF3CF46953795279532
:1002D000A795F0405395C9F77EF41F16BA0B620B31
:1002E000730B840BBAF09150A1F0FF0FBB1F661F78
:1002F000771F881FC2F70EC0BA0F621F731F841FBB
:1003000048F4879577956795B795F7959E3F08F0E0
:10031000B3CF9395880F08F09927EE0F979587959F
:1003200008950CD0AEC0A6D040F09DD030F021F49E
:100330005F3F19F08FC05111D8C092C0B3D098F36D
:100340009923C9F35523B1F3951B550BBB27AA2756
:1003500062177307840738F09F5F5F4F220F331FC8
:10036000441FAA1FA9F333D00E2E3AF0E0E830D094
:1003700091505040E695001CCAF729D0FE2F27D097
:10038000660F771F881FBB1F261737074807AB0765
:10039000B0E809F0BB0B802DBF01FF2793585F4FDA
:1003A0002AF09E3F510568F055C09FC05F3FECF3B7
:1003B000983EDCF3869577956795B795F7959F5F9F
:1003C000C9F7880F911D9695879597F90895E1E0F3
:1003D000660F771F881FBB1F621773078407BA0752
:1003E00020F0621B730B840BBA0BEE1F88F7E095AD
:1003F000089504D06894B11178C008955BD088F056
:100400009F5790F0B92F9927B751A0F0D1F0660F00
:10041000771F881F991F1AF0BA95C9F712C0B1301B
:1004200081F062D0B1E008955FC0672F782F8827F0
:10043000B85F39F0B93FCCF3869577956795B3955A
:10044000D9F73EF490958095709561957F4F8F4FC9
:100450009F4F089597F99F6780E870E060E00895E6
:100460009FEF80EC089500240A94161617061806CC
:100470000906089500240A941216130614060506A8
:100480000895092E0394000C11F4882352F0BB0F39
:1004900040F4BF2B11F460FF04C06F5F7F4F8F4F9C
:1004A0009F4F089557FD9058440F551F59F05F3FD7
:1004B00071F04795880F97FB991F61F09F3F79F086
:1004C00087950895121613061406551FF2CF469508
:1004D000F1DF08C0161617061806991FF1CF86958A
:1004E0007105610508940895E894BB27662777276E
:1004F000CB0197F908950BD0C4CFB5DF28F0BADF50
:1005000018F0952309F0A6CFABCF1124EECFCADFA8
:10051000A0F3959FD1F3950F50E0551F629FF00116
:10052000729FBB27F00DB11D639FAA27F00DB11D6F
:10053000AA1F649F6627B00DA11D661F829F2227F8
:10054000B00DA11D621F739FB00DA11D621F839F7F
:10055000A00D611D221F749F3327A00D611D231F55
:10056000849F600D211D822F762F6A2F11249F57A3
:1005700050408AF0E1F088234AF0EE0FFF1FBB1FC6
:10058000661F771F881F91505040A9F79E3F510565
:1005900070F060CFAACF5F3FECF3983EDCF3869516
:1005A00077956795B795F795E7959F5FC1F7FE2B10
:1005B000880F911D9695879597F90895AEE0B0E064
:1005C000E4EEF2E00C9486050D891E8986E08C83AA
:1005D0001A8309838FEF9FE79E838D83AE01475E69
:1005E0005F4F6F89788DCE0101960E940003EF81E5
:1005F000F885E00FF11F10822E96E4E00C94A2051E
:10060000ACE0B0E0E6E0F3E00C9478057C016B012F
:100610008A01FC0117821682838181FFBDC1CE0150
:1006200001964C01F7019381F60193FD859193FFAB
:1006300081916F01882309F4ABC1853239F493FDB0
:10064000859193FF81916F01853229F4B70190E084
:100650000E94E804E7CF512C312C20E02032A0F496
:100660008B3269F030F4803259F0833269F42061C2
:100670002CC08D3239F0803339F4216026C02260DD
:10068000246023C0286021C027FD27C030ED380F2B
:100690003A3078F426FF06C0FAE05F9E300D112450
:1006A000532E13C08AE0389E300D1124332E206261
:1006B0000CC08E3221F426FD6BC1206406C08C363E
:1006C00011F4206802C0883641F4F60193FD85914B
:1006D00093FF81916F018111C1CF982F9F7D955418
:1006E000933028F40C5F1F4FFFE3F9830DC083366E
:1006F00031F0833771F0833509F05BC022C0F80117
:10070000808189830E5F1F4F44244394512C5401F0
:1007100015C03801F2E06F0E711CF801A080B180A5
:1007200026FF03C0652D70E002C06FEF7FEFC501AB
:100730002C870E94DD042C0183012C852F77222E2B
:1007400017C03801F2E06F0E711CF801A080B18073
:1007500026FF03C0652D70E002C06FEF7FEFC5017B
:100760002C870E94D2042C012C852068222E830124
:1007700023FC1BC0832D90E048165906B0F4B70146
:1007800080E290E00E94E8043A94F4CFF50127FC5F
:10079000859127FE81915F01B70190E00E94E804F6
:1007A00031103A94F1E04F1A51084114510471F795
:1007B000E5C0843611F0893639F5F80127FF07C006
:1007C00060817181828193810C5F1F4F08C06081BD
:1007D0007181882777FD8095982F0E5F1F4F2F76A8
:1007E000B22E97FF09C090958095709561957F4FC7
:1007F0008F4F9F4F2068B22E2AE030E0A4010E9464
:100800001A05A82EA81844C0853729F42F7EB22EC9
:100810002AE030E025C0F22FF97FBF2E8F36C1F0DD
:1008200018F4883579F0B4C0803719F0883721F092
:10083000AFC02F2F2061B22EB4FE0DC08B2D84606F
:10084000B82E09C024FF0AC09F2F9660B92E06C09B
:1008500028E030E005C020E130E002C020E132E0D5
:10086000F801B7FE07C060817181828193810C5FBE
:100870001F4F06C06081718180E090E00E5F1F4FC6
:10088000A4010E941A05A82EA818FB2DFF77BF2EE1
:10089000B6FE0BC02B2D2E7FA51450F4B4FE0AC05B
:1008A000B2FC08C02B2D2E7E05C07A2C2B2D03C048
:1008B0007A2C01C0752C24FF0DC0FE01EA0DF11D3C
:1008C0008081803311F4297E09C022FF06C0739411
:1008D000739404C0822F867809F0739423FD13C0AB
:1008E00020FF06C05A2C731418F4530C5718732C9D
:1008F000731468F4B70180E290E02C870E94E8044A
:1009000073942C85F5CF731410F4371801C0312C73
:1009100024FF12C0B70180E390E02C870E94E80416
:100920002C8522FF17C021FF03C088E590E002C09C
:1009300088E790E0B7010CC0822F867859F021FD3E
:1009400002C080E201C08BE227FD8DE2B70190E09A
:100950000E94E804A51438F4B70180E390E00E94F7
:10096000E8045A94F7CFAA94F401EA0DF11D8081AE
:10097000B70190E00E94E804A110F5CF332009F4FC
:1009800051CEB70180E290E00E94E8043A94F6CF9D
:10099000F7018681978102C08FEF9FEF2C96E2E1ED
:1009A0000C949405FC010590615070400110D8F73B
:1009B000809590958E0F9F1F0895FC0161507040A7
:1009C00001900110D8F7809590958E0F9F1F089584
:1009D0000F931F93CF93DF93182F092FEB018B8178
:1009E00081FD03C08FEF9FEF20C082FF10C04E81BA
:1009F0005F812C813D81421753077CF4E881F981A6
:100A00009F012F5F3F4F39832883108306C0E885FD
:100A1000F985812F0995892B29F72E813F812F5F39
:100A20003F4F3F832E83812F902FDF91CF911F91D6
:100A30000F910895FA01AA27283051F1203181F150
:100A4000E8946F936E7F6E5F7F4F8F4F9F4FAF4FD6
:100A5000B1E03ED0B4E03CD0670F781F891F9A1FE9
:100A6000A11D680F791F8A1F911DA11D6A0F711D9D
:100A7000811D911DA11D20D009F468943F912AE0A9
:100A8000269F11243019305D3193DEF6CF01089591
:100A9000462F4770405D4193B3E00FD0C9F7F6CFC2
:100AA000462F4F70405D4A3318F0495D31FD40528A
:100AB000419302D0A9F7EACFB4E0A6959795879520
:100AC00077956795BA95C9F70097610571050895FF
:100AD0009B01AC010A2E06945795479537952795AB
:100AE000BA95C9F7620F731F841F951FA01D089543
:100AF0002F923F924F925F926F927F928F929F922E
:100B0000AF92BF92CF92DF92EF92FF920F931F931B
:100B1000CF93DF93CDB7DEB7CA1BDB0B0FB6F894CC
:100B2000DEBF0FBECDBF09942A88398848885F840C
:100B30006E847D848C849B84AA84B984C884DF807D
:100B4000EE80FD800C811B81AA81B981CE0FD11D61
:100B50000FB6F894DEBF0FBECDBFED010895F89437
:020B6000FFCFC5
:100B620044657669636520496E697469616C697A66
:100B720065642121210D0A0D0A0D0A0054686520C1
:100B82006C73622076616C75652069733A20256406
:040B92002E0D0A001A
:00000001FF

View File

@@ -0,0 +1,679 @@
Archive member included because of file (symbol)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
DriveFeedback.o (__subsf3)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
DriveFeedback.o (__divsf3)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
DriveFeedback.o (__fixsfsi)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o) (__fixunssfsi)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_inf)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_nan)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscA)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscB)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_round)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_split3)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_zero)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
DriveFeedback.o (__mulsf3)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o (exit)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
DriveFeedback.o (__do_copy_data)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
DriveFeedback.o (__do_clear_bss)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
DriveFeedback.o (sprintf)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (vfprintf)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen_P)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (fputc)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (__ultoa_invert)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (__prologue_saves__)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (__epilogue_restores__)
Discarded input sections
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
.text 0x00000000 0x0 DriveFeedback.o
.bss 0x00000000 0x0 DriveFeedback.o
.bss.RightValBuffer
0x00000000 0x4 DriveFeedback.o
.bss.LeftValBuffer
0x00000000 0x4 DriveFeedback.o
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
Memory Configuration
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
fuse 0x00820000 0x00000400 rw !x
lock 0x00830000 0x00000400 rw !x
signature 0x00840000 0x00000400 rw !x
user_signatures 0x00850000 0x00000400 rw !x
*default* 0x00000000 0xffffffff
Linker script and memory map
Address of section .data set to 0x800100
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
LOAD DriveFeedback.o
START GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a
END GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a
START GROUP
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a
END GROUP
.hash
*(.hash)
.dynsym
*(.dynsym)
.dynstr
*(.dynstr)
.gnu.version
*(.gnu.version)
.gnu.version_d
*(.gnu.version_d)
.gnu.version_r
*(.gnu.version_r)
.rel.init
*(.rel.init)
.rela.init
*(.rela.init)
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
.rel.fini
*(.rel.fini)
.rela.fini
*(.rela.fini)
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
.rel.ctors
*(.rel.ctors)
.rela.ctors
*(.rela.ctors)
.rel.dtors
*(.rel.dtors)
.rela.dtors
*(.rela.dtors)
.rel.got
*(.rel.got)
.rela.got
*(.rela.got)
.rel.bss
*(.rel.bss)
.rela.bss
*(.rela.bss)
.rel.plt
*(.rel.plt)
.rela.plt
*(.rela.plt)
.text 0x00000000 0xb62
*(.vectors)
.vectors 0x00000000 0x68 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
0x00000000 __vector_default
0x00000000 __vectors
*(.vectors)
*(.progmem.gcc*)
0x00000068 . = ALIGN (0x2)
0x00000068 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000068 0x0 linker stubs
*(.trampolines*)
0x00000068 __trampolines_end = .
*(.progmem*)
0x00000068 . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000068 __ctors_start = .
*(.ctors)
0x00000068 __ctors_end = .
0x00000068 __dtors_start = .
*(.dtors)
0x00000068 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000068 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
0x00000068 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000068 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000074 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
0x00000074 __do_copy_data
.init4 0x0000008a 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
0x0000008a __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x0000009a 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
*(.init9)
*(.text)
.text 0x000000a2 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
0x000000a2 __vector_22
0x000000a2 __vector_1
0x000000a2 __vector_24
0x000000a2 __vector_12
0x000000a2 __bad_interrupt
0x000000a2 __vector_6
0x000000a2 __vector_3
0x000000a2 __vector_23
0x000000a2 __vector_25
0x000000a2 __vector_11
0x000000a2 __vector_13
0x000000a2 __vector_17
0x000000a2 __vector_19
0x000000a2 __vector_7
0x000000a2 __vector_5
0x000000a2 __vector_4
0x000000a2 __vector_9
0x000000a2 __vector_2
0x000000a2 __vector_21
0x000000a2 __vector_15
0x000000a2 __vector_8
0x000000a2 __vector_14
0x000000a2 __vector_10
0x000000a2 __vector_16
0x000000a2 __vector_18
0x000000a2 __vector_20
0x000000a6 . = ALIGN (0x2)
*(.text.*)
.text._Z8PinsInitv
0x000000a6 0x28 DriveFeedback.o
0x000000a6 _Z8PinsInitv
.text._Z10SerialInitd
0x000000ce 0x42 DriveFeedback.o
0x000000ce _Z10SerialInitd
.text._Z14SendByteUSART0c
0x00000110 0x10 DriveFeedback.o
0x00000110 _Z14SendByteUSART0c
.text._Z16SendStringUSART0Pc
0x00000120 0x1e DriveFeedback.o
0x00000120 _Z16SendStringUSART0Pc
.text._Z7ReadAVGv
0x0000013e 0x3e DriveFeedback.o
0x0000013e _Z7ReadAVGv
.text.main 0x0000017c 0xdc DriveFeedback.o
0x0000017c main
.text.avr-libc.fplib
0x00000258 0xa c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
0x00000258 __subsf3
0x0000025a __addsf3
.text.avr-libc.fplib
0x00000262 0xc0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
0x0000027c __addsf3x
.text.avr-libc.fplib
0x00000322 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
0x00000322 __divsf3
.text.avr-libc.fplib
0x00000326 0xcc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
0x0000033c __divsf3x
0x00000340 __divsf3_pse
.text.avr-libc.fplib
0x000003f2 0xa c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
0x000003f2 __fixsfsi
.text.avr-libc.fplib
0x000003fc 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
0x000003fc __fixunssfsi
.text.avr-libc.fplib
0x00000454 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
0x00000454 __fp_inf
.text.avr-libc.fplib
0x00000460 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
0x00000460 __fp_nan
.text.avr-libc.fplib
0x00000466 0xe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
0x00000466 __fp_pscA
.text.avr-libc.fplib
0x00000474 0xe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
0x00000474 __fp_pscB
.text.avr-libc.fplib
0x00000482 0x22 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
0x00000482 __fp_round
.text.avr-libc.fplib
0x000004a4 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
0x000004a4 __fp_split3
0x000004b4 __fp_splitA
.text.avr-libc.fplib
0x000004e8 0xe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
0x000004e8 __fp_zero
0x000004ea __fp_szero
.text.avr-libc.fplib
0x000004f6 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
0x000004f6 __mulsf3
.text.avr-libc.fplib
0x000004fa 0xc2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
0x0000050e __mulsf3x
0x00000512 __mulsf3_pse
.text.avr-libc
0x000005bc 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
0x000005bc sprintf
.text.avr-libc
0x00000600 0x3a4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
0x00000600 vfprintf
.text.avr-libc
0x000009a4 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
0x000009a4 strnlen_P
.text.avr-libc
0x000009ba 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
0x000009ba strnlen
.text.avr-libc
0x000009d0 0x64 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
0x000009d0 fputc
.text.avr-libc
0x00000a34 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
0x00000a34 __ultoa_invert
.text.libgcc.prologue
0x00000af0 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
0x00000af0 __prologue_saves__
.text.libgcc.prologue
0x00000b28 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
0x00000b28 __epilogue_restores__
0x00000b5e . = ALIGN (0x2)
*(.fini9)
.fini9 0x00000b5e 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
0x00000b5e _exit
0x00000b5e exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00000b5e 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
*(.fini0)
0x00000b62 _etext = .
.data 0x00800100 0x34 load address 0x00000b62
0x00800100 PROVIDE (__data_start, .)
*(.data)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o
.data 0x00800100 0x0 DriveFeedback.o
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
.data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
*(.data*)
*(.rodata)
*(.rodata*)
.rodata.str1.1
0x00800100 0x34 DriveFeedback.o
*(.gnu.linkonce.d*)
0x00800134 . = ALIGN (0x2)
0x00800134 _edata = .
0x00800134 PROVIDE (__data_end, .)
.bss 0x00800134 0x64
0x00800134 PROVIDE (__bss_start, .)
*(.bss)
*(.bss*)
.bss.SendBuffer
0x00800134 0x64 DriveFeedback.o
0x00800134 SendBuffer
*(COMMON)
0x00800198 PROVIDE (__bss_end, .)
0x00000b62 __data_load_start = LOADADDR (.data)
0x00000b96 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x00800198 0x0
0x00800198 PROVIDE (__noinit_start, .)
*(.noinit*)
0x00800198 PROVIDE (__noinit_end, .)
0x00800198 _end = .
0x00800198 PROVIDE (__heap_start, .)
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
.fuse
*(.fuse)
*(.lfuse)
*(.hfuse)
*(.efuse)
.lock
*(.lock*)
.signature
*(.signature*)
.user_signatures
*(.user_signatures*)
.stab
*(.stab)
.stabstr
*(.stabstr)
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment 0x00000000 0x5c
*(.comment)
.comment 0x00000000 0x30 DriveFeedback.o
0x31 (size before relaxing)
.comment 0x00000000 0x31 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o)
.comment 0x00000030 0x2c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o)
0x2d (size before relaxing)
.comment 0x00000000 0x31 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
.note.gnu.build-id
*(.note.gnu.build-id)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges 0x00000000 0x48
*(.debug_aranges)
.debug_aranges
0x00000000 0x48 DriveFeedback.o
.debug_pubnames
*(.debug_pubnames)
.debug_info 0x00000000 0x52b
*(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x00000000 0x52b DriveFeedback.o
.debug_abbrev 0x00000000 0x22e
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x22e DriveFeedback.o
.debug_line 0x00000000 0x25d
*(.debug_line .debug_line.* .debug_line_end)
.debug_line 0x00000000 0x25d DriveFeedback.o
.debug_frame 0x00000000 0x98
*(.debug_frame)
.debug_frame 0x00000000 0x98 DriveFeedback.o
.debug_str 0x00000000 0x2be
*(.debug_str)
.debug_str 0x00000000 0x2be DriveFeedback.o
0x2f7 (size before relaxing)
.debug_loc 0x00000000 0x23c
*(.debug_loc)
.debug_loc 0x00000000 0x23c DriveFeedback.o
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
.debug_pubtypes
*(.debug_pubtypes)
.debug_ranges 0x00000000 0x38
*(.debug_ranges)
.debug_ranges 0x00000000 0x38 DriveFeedback.o
.debug_macro
*(.debug_macro)
OUTPUT(DriveFeedback.elf elf32-avr)
LOAD linker stubs

View File

@@ -0,0 +1,189 @@
S01500004472697665466565646261636B2E7372656310
S11300000C9434000C9451000C9451000C94510045
S11300100C9451000C9451000C9451000C94510018
S11300200C9451000C9451000C9451000C94510008
S11300300C9451000C9451000C9451000C945100F8
S11300400C9451000C9451000C9451000C945100E8
S11300500C9451000C9451000C9451000C945100D8
S11300600C9451000C94510011241FBECFEFD8E022
S1130070DEBFCDBF11E0A0E0B1E0E2E6FBE002C0EC
S113008005900D92A433B107D9F721E0A4E3B1E0C0
S113009001C01D92A839B207E1F70E94BE000C947A
S11300A0AF050C940000389839983A983B983C98DE
S11300B03D9852985398549A559A569A579A219A19
S11300C0229A299A5F9A2A98519A5098089520E082
S11300D030E040E851E40E947B029B01AC0160E007
S11300E074E284E79BE40E94910120E030E040E860
S11300F05FE30E942C010E94F9017093C500609394
S1130100C40088E98093C10086E08093C20008950A
S1130110E0ECF0E0908195FFFDCF8093C600089558
S1130120CF93DF93EC018881882331F021960E94DC
S1130130880089918111FBCFDF91CF91089596B109
S113014066B146B186B156B156B159B159B1627072
S113015070E0660F771F292F217030E0262B372B94
S1130160447050E0440F551F440F551F242B352B6A
S11301708870880F880F880F822B08950E9453007F
S11301802FEF89E698E1215080409040E1F700C0CC
S1130190000060E070E086E196E40E9467002FEFC3
S11301A089E698E1215080409040E1F700C00000CA
S11301B080E091E00E9490002FEF87EA91E62150C1
S11301C080409040E1F700C000000CE111E0C4E37E
S11301D0D1E05C985D985E9A8FE39CE90197F1F712
S11301E000C000000E949F005D9A8FE39CE9019784
S11301F0F1F700C000000E949F005D985E988FE3B5
S11302009CE90197F1F700C000000E949F005D9AED
S11302108FE39CE90197F1F700C000000E949F0062
S11302205C9A1F928F931F930F93DF93CF930E9437
S1130230DE02CE010E9490008FEF91EE24E0815007
S113024090402040E1F700C000000F900F900F9005
S11302500F900F900F90BDCF5058BB27AA270ED0F8
S113026010C101D130F006D120F031F49F3F11F4D8
S11302701EF4F6C00EF4E095E7FBECC0E92F12D1B2
S113028080F3BA17620773078407950718F071F4AF
S11302909EF52AC10EF4E0950B2EBA2FA02D0B016A
S11302A0B90190010C01CA01A0011124FF27591BB7
S11302B099F0593F50F4503E68F11A16F040A22FBD
S11302C0232F342F4427585FF3CF4695379527952E
S11302D0A795F0405395C9F77EF41F16BA0B620B2D
S11302E0730B840BBAF09150A1F0FF0FBB1F661F74
S11302F0771F881FC2F70EC0BA0F621F731F841FB7
S113030048F4879577956795B795F7959E3F08F0DC
S1130310B3CF9395880F08F09927EE0F979587959B
S113032008950CD0AEC0A6D040F09DD030F021F49A
S11303305F3F19F08FC05111D8C092C0B3D098F369
S11303409923C9F35523B1F3951B550BBB27AA2752
S113035062177307840738F09F5F5F4F220F331FC4
S1130360441FAA1FA9F333D00E2E3AF0E0E830D090
S113037091505040E695001CCAF729D0FE2F27D093
S1130380660F771F881FBB1F261737074807AB0761
S1130390B0E809F0BB0B802DBF01FF2793585F4FD6
S11303A02AF09E3F510568F055C09FC05F3FECF3B3
S11303B0983EDCF3869577956795B795F7959F5F9B
S11303C0C9F7880F911D9695879597F90895E1E0EF
S11303D0660F771F881FBB1F621773078407BA074E
S11303E020F0621B730B840BBA0BEE1F88F7E095A9
S11303F0089504D06894B11178C008955BD088F052
S11304009F5790F0B92F9927B751A0F0D1F0660FFC
S1130410771F881F991F1AF0BA95C9F712C0B13017
S113042081F062D0B1E008955FC0672F782F8827EC
S1130430B85F39F0B93FCCF3869577956795B39556
S1130440D9F73EF490958095709561957F4F8F4FC5
S11304509F4F089597F99F6780E870E060E00895E2
S11304609FEF80EC089500240A94161617061806C8
S11304700906089500240A941216130614060506A4
S11304800895092E0394000C11F4882352F0BB0F35
S113049040F4BF2B11F460FF04C06F5F7F4F8F4F98
S11304A09F4F089557FD9058440F551F59F05F3FD3
S11304B071F04795880F97FB991F61F09F3F79F082
S11304C087950895121613061406551FF2CF469504
S11304D0F1DF08C0161617061806991FF1CF869586
S11304E07105610508940895E894BB27662777276A
S11304F0CB0197F908950BD0C4CFB5DF28F0BADF4C
S113050018F0952309F0A6CFABCF1124EECFCADFA4
S1130510A0F3959FD1F3950F50E0551F629FF00112
S1130520729FBB27F00DB11D639FAA27F00DB11D6B
S1130530AA1F649F6627B00DA11D661F829F2227F4
S1130540B00DA11D621F739FB00DA11D621F839F7B
S1130550A00D611D221F749F3327A00D611D231F51
S1130560849F600D211D822F762F6A2F11249F579F
S113057050408AF0E1F088234AF0EE0FFF1FBB1FC2
S1130580661F771F881F91505040A9F79E3F510561
S113059070F060CFAACF5F3FECF3983EDCF3869512
S11305A077956795B795F795E7959F5FC1F7FE2B0C
S11305B0880F911D9695879597F90895AEE0B0E060
S11305C0E4EEF2E00C9486050D891E8986E08C83A6
S11305D01A8309838FEF9FE79E838D83AE01475E65
S11305E05F4F6F89788DCE0101960E940003EF81E1
S11305F0F885E00FF11F10822E96E4E00C94A2051A
S1130600ACE0B0E0E6E0F3E00C9478057C016B012B
S11306108A01FC0117821682838181FFBDC1CE014C
S113062001964C01F7019381F60193FD859193FFA7
S113063081916F01882309F4ABC1853239F493FDAC
S1130640859193FF81916F01853229F4B70190E080
S11306500E94E804E7CF512C312C20E02032A0F492
S11306608B3269F030F4803259F0833269F42061BE
S11306702CC08D3239F0803339F4216026C02260D9
S1130680246023C0286021C027FD27C030ED380F27
S11306903A3078F426FF06C0FAE05F9E300D11244C
S11306A0532E13C08AE0389E300D1124332E20625D
S11306B00CC08E3221F426FD6BC1206406C08C363A
S11306C011F4206802C0883641F4F60193FD859147
S11306D093FF81916F018111C1CF982F9F7D955414
S11306E0933028F40C5F1F4FFFE3F9830DC083366A
S11306F031F0833771F0833509F05BC022C0F80113
S1130700808189830E5F1F4F44244394512C5401EC
S113071015C03801F2E06F0E711CF801A080B180A1
S113072026FF03C0652D70E002C06FEF7FEFC501A7
S11307302C870E94DD042C0183012C852F77222E27
S113074017C03801F2E06F0E711CF801A080B1806F
S113075026FF03C0652D70E002C06FEF7FEFC50177
S11307602C870E94D2042C012C852068222E830120
S113077023FC1BC0832D90E048165906B0F4B70142
S113078080E290E00E94E8043A94F4CFF50127FC5B
S1130790859127FE81915F01B70190E00E94E804F2
S11307A031103A94F1E04F1A51084114510471F791
S11307B0E5C0843611F0893639F5F80127FF07C002
S11307C060817181828193810C5F1F4F08C06081B9
S11307D07181882777FD8095982F0E5F1F4F2F76A4
S11307E0B22E97FF09C090958095709561957F4FC3
S11307F08F4F9F4F2068B22E2AE030E0A4010E9460
S11308001A05A82EA81844C0853729F42F7EB22EC5
S11308102AE030E025C0F22FF97FBF2E8F36C1F0D9
S113082018F4883579F0B4C0803719F0883721F08E
S1130830AFC02F2F2061B22EB4FE0DC08B2D84606B
S1130840B82E09C024FF0AC09F2F9660B92E06C097
S113085028E030E005C020E130E002C020E132E0D1
S1130860F801B7FE07C060817181828193810C5FBA
S11308701F4F06C06081718180E090E00E5F1F4FC2
S1130880A4010E941A05A82EA818FB2DFF77BF2EDD
S1130890B6FE0BC02B2D2E7FA51450F4B4FE0AC057
S11308A0B2FC08C02B2D2E7E05C07A2C2B2D03C044
S11308B07A2C01C0752C24FF0DC0FE01EA0DF11D38
S11308C08081803311F4297E09C022FF06C073940D
S11308D0739404C0822F867809F0739423FD13C0A7
S11308E020FF06C05A2C731418F4530C5718732C99
S11308F0731468F4B70180E290E02C870E94E80446
S113090073942C85F5CF731410F4371801C0312C6F
S113091024FF12C0B70180E390E02C870E94E80412
S11309202C8522FF17C021FF03C088E590E002C098
S113093088E790E0B7010CC0822F867859F021FD3A
S113094002C080E201C08BE227FD8DE2B70190E096
S11309500E94E804A51438F4B70180E390E00E94F3
S1130960E8045A94F7CFAA94F401EA0DF11D8081AA
S1130970B70190E00E94E804A110F5CF332009F4F8
S113098051CEB70180E290E00E94E8043A94F6CF99
S1130990F7018681978102C08FEF9FEF2C96E2E1E9
S11309A00C949405FC010590615070400110D8F737
S11309B0809590958E0F9F1F0895FC0161507040A3
S11309C001900110D8F7809590958E0F9F1F089580
S11309D00F931F93CF93DF93182F092FEB018B8174
S11309E081FD03C08FEF9FEF20C082FF10C04E81B6
S11309F05F812C813D81421753077CF4E881F981A2
S1130A009F012F5F3F4F39832883108306C0E885F9
S1130A10F985812F0995892B29F72E813F812F5F35
S1130A203F4F3F832E83812F902FDF91CF911F91D2
S1130A300F910895FA01AA27283051F1203181F14C
S1130A40E8946F936E7F6E5F7F4F8F4F9F4FAF4FD2
S1130A50B1E03ED0B4E03CD0670F781F891F9A1FE5
S1130A60A11D680F791F8A1F911DA11D6A0F711D99
S1130A70811D911DA11D20D009F468943F912AE0A5
S1130A80269F11243019305D3193DEF6CF0108958D
S1130A90462F4770405D4193B3E00FD0C9F7F6CFBE
S1130AA0462F4F70405D4A3318F0495D31FD405286
S1130AB0419302D0A9F7EACFB4E0A695979587951C
S1130AC077956795BA95C9F70097610571050895FB
S1130AD09B01AC010A2E06945795479537952795A7
S1130AE0BA95C9F7620F731F841F951FA01D08953F
S1130AF02F923F924F925F926F927F928F929F922A
S1130B00AF92BF92CF92DF92EF92FF920F931F9317
S1130B10CF93DF93CDB7DEB7CA1BDB0B0FB6F894C8
S1130B20DEBF0FBECDBF09942A88398848885F8408
S1130B306E847D848C849B84AA84B984C884DF8079
S1130B40EE80FD800C811B81AA81B981CE0FD11D5D
S1130B500FB6F894DEBF0FBECDBFED010895F89433
S1050B60FFCFC1
S1130B6244657669636520496E697469616C697A62
S1130B7265642121210D0A0D0A0D0A0054686520BD
S1130B826C73622076616C75652069733A20256402
S1070B922E0D0A0016
S9030000FC

View File

@@ -0,0 +1,125 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../DriveFeedback.cpp
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
DriveFeedback.o
OBJS_AS_ARGS += \
DriveFeedback.o
C_DEPS += \
DriveFeedback.d
C_DEPS_AS_ARGS += \
DriveFeedback.d
OUTPUT_FILE_PATH +=DriveFeedback.elf
OUTPUT_FILE_PATH_AS_ARGS +=DriveFeedback.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.cpp
@echo Building file: $<
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP)
@echo Building target: $@
@echo Invoking: AVR8/GNU Linker : 4.8.1
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="DriveFeedback.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p
@echo Finished building target: $@
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveFeedback.elf" "DriveFeedback.hex"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "DriveFeedback.elf" "DriveFeedback.eep" || exit 0
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "DriveFeedback.elf" > "DriveFeedback.lss"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveFeedback.elf" "DriveFeedback.srec"
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-size.exe" "DriveFeedback.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "DriveFeedback.elf" "DriveFeedback.a" "DriveFeedback.hex" "DriveFeedback.lss" "DriveFeedback.eep" "DriveFeedback.map" "DriveFeedback.srec" "DriveFeedback.usersignatures"

View File

@@ -0,0 +1,6 @@
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
DriveFeedback.cpp

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "DriveFeedback", "DriveFeedback.cppproj", "{355496BA-23D8-49EF-A3EE-BE449ED245C6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{355496BA-23D8-49EF-A3EE-BE449ED245C6}.Debug|AVR.ActiveCfg = Debug|AVR
{355496BA-23D8-49EF-A3EE-BE449ED245C6}.Debug|AVR.Build.0 = Debug|AVR
{355496BA-23D8-49EF-A3EE-BE449ED245C6}.Release|AVR.ActiveCfg = Release|AVR
{355496BA-23D8-49EF-A3EE-BE449ED245C6}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Some files were not shown because too many files have changed in this diff Show More