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_ioctrl.c | 102 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 AT91SAM7S256/Source/d_ioctrl.c (limited to 'AT91SAM7S256/Source/d_ioctrl.c') diff --git a/AT91SAM7S256/Source/d_ioctrl.c b/AT91SAM7S256/Source/d_ioctrl.c new file mode 100644 index 0000000..7c414f6 --- /dev/null +++ b/AT91SAM7S256/Source/d_ioctrl.c @@ -0,0 +1,102 @@ +// +// Date init 14.12.2004 +// +// Revision date $Date:: 16-05-06 9:50 $ +// +// Filename $Workfile:: d_ioctrl.c $ +// +// Version $Revision:: 11 $ +// +// Archive $Archive:: /LMS2006/Sys01/Main/Firmware/Source/d_ioctrl.c $ +// +// Platform C +// + + +#include +#include "stdconst.h" +#include "m_sched.h" +#include "d_ioctrl.h" +#include "d_ioctrl.r" + +/* Enum related to State */ +enum +{ + RX_I2C = 1, + TX_I2C = 2, + UNLOCK_I2C = 3, + WAIT_I2C = 4 +}; + + +static UBYTE volatile State; + +void dIOCtrlInit(void) +{ + IOCTRLInit; + State = UNLOCK_I2C; +} + +void dIOCtrlSetPower(UBYTE Power) +{ + INSERTPower(Power); +} + +void dIOCtrlSetPwm(UBYTE Pwm) +{ + INSERTPwm(Pwm); +} + +void dIOCtrlTransfer(void) +{ + UBYTE B; + + CHECKTime(B); + if (B) + { + switch(State) + { + case TX_I2C: + { + FULLDataTx; + State = RX_I2C; + } + break; + case RX_I2C: + { + FULLDataRx; + State = TX_I2C; + } + break; + case UNLOCK_I2C: + { + UNLOCKTx; + State = WAIT_I2C; + } + break; + case WAIT_I2C: + { + + /* Intermediate state as unlock string is 47 */ + /* characters which is a little more than 1mS */ + State = TX_I2C; + } + break; + default: + { + UNLOCKTx; + State = WAIT_I2C; + } + break; + } + SETTime; + } +} + + + +void dIOCtrlExit(void) +{ + IOCTRLExit; +} + -- cgit v1.2.3