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.