diff options
Diffstat (limited to 'cpu/mpc824x/drivers/i2c')
| -rw-r--r-- | cpu/mpc824x/drivers/i2c/Makefile | 84 | ||||
| -rw-r--r-- | cpu/mpc824x/drivers/i2c/Makefile_pc | 91 | ||||
| -rw-r--r-- | cpu/mpc824x/drivers/i2c/README | 105 | ||||
| -rw-r--r-- | cpu/mpc824x/drivers/i2c/i2c_export.h | 103 | 
4 files changed, 383 insertions, 0 deletions
| diff --git a/cpu/mpc824x/drivers/i2c/Makefile b/cpu/mpc824x/drivers/i2c/Makefile new file mode 100644 index 000000000..ae1a94c53 --- /dev/null +++ b/cpu/mpc824x/drivers/i2c/Makefile @@ -0,0 +1,84 @@ +########################################################################## +# +#       Copyright Motorola, Inc. 1997 +#       ALL RIGHTS RESERVED +# +#       You are hereby granted a copyright license to use, modify, and +#       distribute the SOFTWARE so long as this entire notice is retained +#       without alteration in any modified and/or redistributed versions, +#       and that such modified versions are clearly identified as such. +#       No licenses are granted by implication, estoppel or otherwise under +#       any patents or trademarks of Motorola, Inc. +# +#       The SOFTWARE is provided on an "AS IS" basis and without warranty. +#       To the maximum extent permitted by applicable law, MOTOROLA DISCLAIMS +#       ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED +#       WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR +#       PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH +#       REGARD TO THE SOFTWARE (INCLUDING ANY MODIFIED VERSIONS +#       THEREOF) AND ANY ACCOMPANYING WRITTEN MATERIALS. +# +#       To the maximum extent permitted by applicable law, IN NO EVENT SHALL +#       MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER +#       (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF +#       BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS +#       INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR +#       INABILITY TO USE THE SOFTWARE. +# +############################################################################ +TARGET = libi2c.a + +#DEBUG  = -g +DEBUG   = -DI2CDBG +LST     = -Hanno -S +OPTIM   = +CC      = /risc/tools/pkgs/metaware/bin/hcppc +CFLAGS  = -Hnocopyr -c -Hsds -Hon=Char_default_unsigned -Hon=Char_is_rep -I../inc -I/risc/tools/pkgs/metaware/inc +CCobj   = $(CC) $(CFLAGS) $(DEBUG) $(OPTIM) +PREP    = $(CC) $(CFLAGS) -P + +# Assembler used to build the .s files (for the board version) + +ASOPT   = -big_si -c +ASDEBUG = -l -fm +AS      = /risc/tools/pkgs/metaware/bin/asppc + +# Linker to bring .o files together into an executable. + +LKOPT	=  -Bbase=0 -q -Qn -r +LKCMD   = +LINK    =  /risc/tools/pkgs/metaware/bin/ldppc $(LKCMD) $(LKOPT) + +# DOS Utilities + +DEL     = rm +COPY    = cp +LIST    = ls + +OBJECTS = i2c1.o i2c2.o + +all: $(TARGET) + +objects: $(OBJECTS) + +$(TARGET): $(OBJECTS) +	$(LINK) $(OBJECTS) -o $@ + +clean: +	$(DEL) -f *.o *.i *.map *.lst $(TARGET) $(OBJECTS) + +.s.o: +	$(DEL) -f $*.i +	$(PREP) -Hasmcpp $< +	$(AS) $(ASOPT) $*.i +#	$(AS) $(ASOPT) $(ASDEBUG) $*.i > $*.lst + +.c.o: +	$(CCobj) $< + +.c.s: +	$(CCobj) $(LST) $< + +i2c1.o: i2c_export.h i2c.h i2c1.c + +i2c2.o: i2c.h i2c2.s diff --git a/cpu/mpc824x/drivers/i2c/Makefile_pc b/cpu/mpc824x/drivers/i2c/Makefile_pc new file mode 100644 index 000000000..4d42c7b84 --- /dev/null +++ b/cpu/mpc824x/drivers/i2c/Makefile_pc @@ -0,0 +1,91 @@ +########################################################################## +# +#       makefile_pc for use with PC mksnt tools  dink32/drivers/i2c +# +#       Copyright Motorola, Inc. 1997 +#       ALL RIGHTS RESERVED +# +#       You are hereby granted a copyright license to use, modify, and +#       distribute the SOFTWARE so long as this entire notice is retained +#       without alteration in any modified and/or redistributed versions, +#       and that such modified versions are clearly identified as such. +#       No licenses are granted by implication, estoppel or otherwise under +#       any patents or trademarks of Motorola, Inc. +# +#       The SOFTWARE is provided on an "AS IS" basis and without warranty. +#       To the maximum extent permitted by applicable law, MOTOROLA DISCLAIMS +#       ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED +#       WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR +#       PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH +#       REGARD TO THE SOFTWARE (INCLUDING ANY MODIFIED VERSIONS +#       THEREOF) AND ANY ACCOMPANYING WRITTEN MATERIALS. +# +#       To the maximum extent permitted by applicable law, IN NO EVENT SHALL +#       MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER +#       (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF +#       BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS +#       INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR +#       INABILITY TO USE THE SOFTWARE. +# +############################################################################ +TARGET = libi2c.a + +#DEBUG  = -g +DEBUG   = -DI2CDBG +LST     = -Hanno -S +OPTIM   = +CC      = m:/old_tools/tools/hcppc/bin/hcppc +CFLAGS  = -Hnocopyr -c -Hsds -Hon=Char_default_unsigned -Hon=Char_is_rep -I../inc -I/risc/tools/pkgs/metaware/inc +CCobj   = $(CC) $(CFLAGS) $(DEBUG) $(OPTIM) +PREP    = $(CC) $(CFLAGS) -P + +# Assembler used to build the .s files (for the board version) + +ASOPT   = -big_si -c +ASDEBUG = -l -fm +AS      = m:/old_tools/tools/hcppc/bin/asppc + +# Linker to bring .o files together into an executable. + +LKOPT	=  -Bbase=0 -q -Qn -r +LKCMD   = +LINK    = m:/old_tools/tools/hcppc/bin/ldppc $(LKCMD) $(LKOPT) + +# DOS Utilities + +DEL     = rm +COPY    = cp +LIST    = ls + +OBJECTS = i2c1.o i2c2.o + +all: $(TARGET) + +objects: $(OBJECTS) + +$(TARGET): $(OBJECTS) +	$(LINK) $(OBJECTS) -o $@ + +clean: +	$(DEL) -f *.o *.i *.map *.lst $(TARGET) $(OBJECTS) + +.s.o: +	$(DEL) -f $*.i +	$(PREP) -Hasmcpp $< +	$(AS) $(ASOPT) $*.i +#	$(AS) $(ASOPT) $(ASDEBUG) $*.i > $*.lst + +.c.o: +	$(CCobj) $< + +.c.s: +	$(CCobj) $(LST) $< + +i2c1.o: i2c_export.h i2c.h i2c1.c +	$(CCobj) $< + + +i2c2.o: i2c.h i2c2.s +	$(DEL) -f $*.i +	$(PREP) -Hasmcpp $< +	$(AS) $(ASOPT) $*.i diff --git a/cpu/mpc824x/drivers/i2c/README b/cpu/mpc824x/drivers/i2c/README new file mode 100644 index 000000000..8d82df359 --- /dev/null +++ b/cpu/mpc824x/drivers/i2c/README @@ -0,0 +1,105 @@ +CONTENT: + +   i2c.h +   i2c1.c +   i2c2.s + +WHAT ARE THESE FILES: + +These files contain MPC8240 (Kahlua) I2C +driver routines. The driver routines are not +written for any specific operating system. +They serves the purpose of code sample, and +jump-start for using the MPC8240 I2C unit. + +For the reason of correctness of C language +syntax, these files are compiled by Metaware +C compiler and assembler. + +ENDIAN NOTATION: + +The algorithm is designed for big-endian mode, +software is responsible for byte swapping. + +USAGE: + +1. The host system that is running on MPC8240 +   shall link the files listed here. The memory +   location of driver routines shall take into +   account of that driver routines need to run +   in supervisor mode and they process I2C +   interrupt. + +2. The host system is responsible for configuring +   the MPC8240 including Embedded Utilities Memory +   Block. All I2C driver functions require the +   content of Embedded Utilities Memory Block +   Base Address Register, EUMBBAR, as the first +   parameter. + +3. Before I2C unit of MPC8240 can be used, +   initialize I2C unit by calling I2C_Init +   with the corresponding parameters. + +   Note that the I2CFDR register shall be written +   once during the initialization. If it is written +   in the midst of transers, or after I2C STOPs or +   REPEAT STATRs, depending on the data written, +   a long reset time may be encountered. + +4. After I2C unit has been successfully initialized, +   use the Application level API to send data or +   receive data upon the desired mode, Master or +   Slave. + +5. If the host system is also using the EPIC unit +   on MPC8240, the system can register the +   I2C_ISR with the EPIC including other +   desired resources. + +   If the host system does not using the EPIC unit +   on MPC8240, I2C_Timer_Event function can +   be called for each desired time interval. + +   In both cases, the host system is free to provide +   its own timer event handler and interrupt service +   routine. + +6. The I2C driver routines contains a set +   of utilities, Set and Get, for host system +   to query and modify the desired I2C registers. + +7. It is the host system's responsibility of +   queueing the I2C I/O request. The host +   system shall check the I2C_ISR return code +   for I2C I/O status. If I2C_ISR returns +   I2CBUFFEMPTY or I2CBUFFFULL, it means +   I2C unit has completed a I/O request +   stated by the Application API. + +8. If the host system has more than one master +   mode I2C unit I/O requests but doesn't want +   to be intervented by being addressed as slave, +   the host system can use the master mode +   Application API with stop_flag set to 0 in +   conjunction with is_cnt flag set to 1. +   The first API call sets both stop_flag and +   is_cnt to 0, indicating a START condition +   shall be generated but when the end of +   transaction is reached, do not generate a +   STOP condition. Once the host system is +   informed that the transaction has been +   completed, the next Application API call +   shall set is_cnt flag to 1, indicating a +   repeated START condition shall be generated. +   The last Application API call shall set +   stop_flag +   to 1. + +9. The I2C_Timer_Event function containes +   a user defined function pointer. It +   serves the purpose of providing the +   host system a way to use its own event +   handler instead of the I2C_ISR provided +   here. + diff --git a/cpu/mpc824x/drivers/i2c/i2c_export.h b/cpu/mpc824x/drivers/i2c/i2c_export.h new file mode 100644 index 000000000..17403ea2c --- /dev/null +++ b/cpu/mpc824x/drivers/i2c/i2c_export.h @@ -0,0 +1,103 @@ +#ifndef I2C_EXPORT_H +#define I2C_EXPORT_H + +/**************************************************** + * + * Copyright Motrola 1999 + * + ****************************************************/ + +/* These are the defined return values for the I2C_do_transaction function. + * Any non-zero value indicates failure.  Failure modes can be added for + * more detailed error reporting. + */ +typedef enum _i2c_status +{ + I2C_SUCCESS     = 0, + I2C_ERROR, +} I2C_Status; + +/* These are the defined tasks for I2C_do_transaction. + * Modes for SLAVE_RCV and SLAVE_XMIT will be added. + */ +typedef enum _i2c_transaction_mode +{ +	I2C_MASTER_RCV =  0, +	I2C_MASTER_XMIT = 1, +} I2C_TRANSACTION_MODE; + +typedef enum _i2c_interrupt_mode +{ +	I2C_INT_DISABLE =  0, +	I2C_INT_ENABLE = 1, +} I2C_INTERRUPT_MODE; + +typedef enum _i2c_stop +{ +	I2C_NO_STOP =  0, +	I2C_STOP = 1, +} I2C_STOP_MODE; + +typedef enum _i2c_restart +{ +	I2C_NO_RESTART =  0, +	I2C_RESTART = 1, +} I2C_RESTART_MODE; + +/******************** App. API ******************** + * The application API is for user level application + * to use the functionality provided by I2C driver. + * This is a "generic" I2C interface, it should contain + * nothing specific to the Kahlua implementation. + * Only the generic functions are exported by the library. + * + * Note: Its App.s responsibility to swap the data + *       byte. In our API, we just transfer whatever + *       we are given + **************************************************/ + + +/*  Initialize I2C unit with the following: + *  driver's slave address + *  interrupt enabled + *  optional pointer to application layer print function + * + *  These parameters may be added: + *  desired clock rate + *  digital filter frequency sampling rate + * + *  This function must be called before I2C unit can be used. + */ +extern I2C_Status I2C_Initialize( +	unsigned char addr,            /* driver's I2C slave address */ +	I2C_INTERRUPT_MODE en_int,     /* 1 - enable I2C interrupt +	                                * 0 - disable I2C interrupt +	                                */ +        int (*app_print_function)(char *,...)); /* pointer to optional "printf" +                                                 * provided by application +                                                 */ + +/* Perform the given I2C transaction, only MASTER_XMIT and MASTER_RCV + * are implemented.  Both are only in polling mode. + * + * en_int controls interrupt/polling mode + * act is the type of transaction + * addr is the I2C address of the slave device + * len is the length of data to send or receive + * buffer is the address of the data buffer + * stop = I2C_NO_STOP, don't signal STOP at end of transaction + *        I2C_STOP, signal STOP at end of transaction + * retry is the timeout retry value, currently ignored + * rsta = I2C_NO_RESTART, this is not continuation of existing transaction + *        I2C_RESTART, this is a continuation of existing transaction + */ +extern I2C_Status I2C_do_transaction( I2C_INTERRUPT_MODE en_int, +                                      I2C_TRANSACTION_MODE act, +                                      unsigned char i2c_addr, +                                      unsigned char data_addr, +                                      int len, +                                      char *buffer, +                                      I2C_STOP_MODE stop, +                                      int retry, +                                      I2C_RESTART_MODE rsta); +#endif |