From ba78bd9ba834260d035a9830726afc34fdad2a15 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 18 Oct 2009 23:32:54 +0200 Subject: import firmware from LEGO v1.05 --- ATmega48/Source/d_input.r | 209 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 ATmega48/Source/d_input.r (limited to 'ATmega48/Source/d_input.r') diff --git a/ATmega48/Source/d_input.r b/ATmega48/Source/d_input.r new file mode 100644 index 0000000..88f1eae --- /dev/null +++ b/ATmega48/Source/d_input.r @@ -0,0 +1,209 @@ +// +// Programmer +// +// Date init 14.12.2004 +// +// Reviser $Author:: Dktochpe $ +// +// Revision date $Date:: 2-09-05 14:37 $ +// +// Filename $Workfile:: d_input.r $ +// +// Version $Revision:: 13 $ +// +// Archive $Archive:: /LMS2006/Sys01/Ioctrl/Firmware/Source/d_input. $ +// +// Platform C +// + +#ifdef ATMEGAX8 + +// ADC input used for sensors : + +__flash UBYTE AdcInputNo[NOS_OF_AVR_INPUTS] = +{ + 7,0,1,6 +}; + +#define ONInputPower0 {\ + PORTD |= 0x02;\ + DDRD |= 0x02;\ + } + +#define OFFInputPower0 {\ + PORTD &= ~0x02;\ + DDRD |= 0x02;\ + } + +#define ONInputPower1 {\ + PORTD |= 0x01;\ + DDRD |= 0x01;\ + } + +#define OFFInputPower1 {\ + PORTD &= ~0x01;\ + DDRD |= 0x01;\ + } + +#define ONInputPower2 {\ + PORTB |= 0x10;\ + DDRB |= 0x10;\ + } + +#define OFFInputPower2 {\ + PORTB &= ~0x10;\ + DDRB |= 0x10;\ + } + +#define ONInputPower3 {\ + PORTB |= 0x20;\ + DDRB |= 0x20;\ + } + +#define OFFInputPower3 {\ + PORTB &= ~0x20;\ + DDRB |= 0x20;\ + } + +void OnInputPower(UBYTE No) +{ + switch (No) + { + case 0 : + { + ONInputPower0; + } + break; + + case 1 : + { + ONInputPower1; + } + break; + + case 2 : + { + ONInputPower2; + } + break; + + case 3 : + { + ONInputPower3; + } + break; + + } +} + +void OffInputPower(UBYTE No) +{ + switch (No) + { + case 0 : + { + OFFInputPower0; + } + break; + + case 1 : + { + OFFInputPower1; + } + break; + + case 2 : + { + OFFInputPower2; + } + break; + + case 3 : + { + OFFInputPower3; + } + break; + + } +} + + +#define STARTInput {\ + ADCSRA &= ~0x07;\ + ADCSRA |= 0x05;\ + ADCSRA |= 0x40;\ + } + +#define SELECTInput(No) {\ + UBYTE Mask;\ + Mask = 1 << AdcInputNo[No];\ + PORTC &= ~Mask;\ + DDRC &= ~Mask;\ + DIDR0 |= Mask;\ + ADMUX = 0x40 + (AdcInputNo[No]);\ + ADCSRA &= ~0x07;\ + ADCSRA |= 0x04;\ + ADCSRA |= 0x40;\ + } + +#define BUSYInput ((ADCSRA & 0x40)) + +#define READInput ADC + +#define EXITInput(No) {\ + UBYTE Mask;\ + Mask = 1 << AdcInputNo[No];\ + PORTC &= ~Mask;\ + DDRC |= Mask;\ + } + +#define INPUTInit {\ + UBYTE AdcTmp;\ + for (AdcTmp = 0;AdcTmp < NOS_OF_AVR_INPUTS;AdcTmp++)\ + {\ + OffInputPower(AdcTmp);\ + }\ + ADCSRA = 0x94;\ + ADCSRB = 0x00;\ + } + + +#define INPUTSelect(Inp) {\ + SELECTInput(Inp);\ + if ((IoToAvr.InputPower & (0x10 << Inp)))\ + {\ + OnInputPower(Inp);\ + }\ + else\ + {\ + OffInputPower(Inp);\ + }\ + } + + +#define INPUTConvert(Inp) {\ + STARTInput;\ + while (BUSYInput);\ + IoFromAvr.AdValue[Inp] = ADC;\ + } + + +#define INPUTDeselect(Inp) {\ + if ((IoToAvr.InputPower & (0x01 << Inp)))\ + {\ + OnInputPower(Inp);\ + }\ + } + + +#define INPUTExit {\ + UBYTE AdcTmp;\ + for (AdcTmp = 0;AdcTmp < NOS_OF_AVR_INPUTS;AdcTmp++)\ + {\ + OffInputPower(AdcTmp);\ + EXITInput(AdcTmp);\ + }\ + ADCSRA = 0x10;\ + } + +#endif -- cgit v1.2.3