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 --- AT91SAM7S256/Source/d_input.r | 99 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 AT91SAM7S256/Source/d_input.r (limited to 'AT91SAM7S256/Source/d_input.r') diff --git a/AT91SAM7S256/Source/d_input.r b/AT91SAM7S256/Source/d_input.r new file mode 100644 index 0000000..6e3d989 --- /dev/null +++ b/AT91SAM7S256/Source/d_input.r @@ -0,0 +1,99 @@ +// +// Date init 14.12.2004 +// +// Revision date $Date:: 16-05-06 10:06 $ +// +// Filename $Workfile:: d_input.r $ +// +// Version $Revision:: 10 $ +// +// Archive $Archive:: /LMS2006/Sys01/Main/Firmware/Source/d_input.r $ +// +// Platform C +// + +#ifdef SAM7S256 + +#define MAX_AD_VALUE 0x3FF + +#define INPUTInit {\ + UBYTE Tmp;\ + for (Tmp = 0; Tmp < NOS_OF_AVR_INPUTS; Tmp++)\ + {\ + IoFromAvr.AdValue[Tmp] = MAX_AD_VALUE;\ + }\ + IoToAvr.InputPower = 0;\ + for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++)\ + {\ + *AT91C_PIOA_PPUDR = Digi0Alloc[Tmp];\ + *AT91C_PIOA_PPUDR = Digi1Alloc[Tmp];\ + INPUTSetInDigi0(Tmp);\ + INPUTSetInDigi1(Tmp);\ + }\ + } + +#define INPUTGetVal(pValues, No) *pValues = (UWORD)IoFromAvr.AdValue[No];\ + *pValues &= 0x03FF + +#define INPUTSetActive(Input) IoToAvr.InputPower |= (0x01 << Input);\ + IoToAvr.InputPower &= ~(0x10 << Input) +#define INPUTSet9v(Input) IoToAvr.InputPower |= (0x10 << Input);\ + IoToAvr.InputPower &= ~(0x01 << Input) +#define INPUTSetInactive(Input) IoToAvr.InputPower &= ~(0x11 << Input) + +const ULONG Digi0Alloc[] = {AT91C_PIO_PA23, AT91C_PIO_PA28, AT91C_PIO_PA29, AT91C_PIO_PA30}; +const ULONG Digi1Alloc[] = {AT91C_PIO_PA18, AT91C_PIO_PA19, AT91C_PIO_PA20, AT91C_PIO_PA2}; + +#define INPUTSetOutDigi0(Input) *AT91C_PIOA_PER = Digi0Alloc[Input];\ + *AT91C_PIOA_OER = Digi0Alloc[Input] + +#define INPUTSetOutDigi1(Input) *AT91C_PIOA_PER = Digi1Alloc[Input];\ + *AT91C_PIOA_OER = Digi1Alloc[Input] + + +#define INPUTSetInDigi0(Input) *AT91C_PIOA_PER = Digi0Alloc[Input];\ + *AT91C_PIOA_ODR = Digi0Alloc[Input] + +#define INPUTSetInDigi1(Input) *AT91C_PIOA_PER = Digi1Alloc[Input];\ + *AT91C_PIOA_ODR = Digi1Alloc[Input] + +#define INPUTSetDigi0(Input) *AT91C_PIOA_SODR = Digi0Alloc[Input] + +#define INPUTSetDigi1(Input) *AT91C_PIOA_SODR = Digi1Alloc[Input] + +#define INPUTClearDigi0(Input) *AT91C_PIOA_CODR = Digi0Alloc[Input] + +#define INPUTClearDigi1(Input) *AT91C_PIOA_CODR = Digi1Alloc[Input] + +#define INPUTReadDigi0(Input, Data) if ((*AT91C_PIOA_PDSR) & Digi0Alloc[Input])\ + {\ + *Data |= 0x00000001;\ + }\ + else\ + {\ + *Data &= ~0x00000001;\ + } +#define INPUTReadDigi1(Input, Data) if ((*AT91C_PIOA_PDSR) & Digi1Alloc[Input])\ + {\ + *Data |= 0x00000002;\ + }\ + else\ + {\ + *Data &= ~0x00000002;\ + } + +#define INPUTExit {\ + UBYTE Tmp;\ + for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++)\ + {\ + INPUTSetInDigi0(Tmp);\ + INPUTSetInDigi1(Tmp);\ + }\ + } + + +#endif + +#ifdef PCWIN + +#endif -- cgit v1.2.3