50#ifndef _MULTICHANNELI2C_H
51#define _MULTICHANNELI2C_H
52#include <basictypes.h>
61#define I2C_MAX_BUF_SIZE (64)
63#define DEFAULT_I2C_MODULE (0)
67#define I2C_RX_TX_TIMEOUT (5)
68#define I2C_START_TIMEOUT (20)
70#define I2C_SLAVE_TX_TERM_CHAR (0)
79#define I2C_NEXT_WRITE_OK (1)
80#define I2C_NEXT_READ_OK (2)
81#define I2C_MASTER_OK (3)
82#define I2C_TIMEOUT (4)
83#define I2C_BUS_NOT_AVAIL (5)
84#define I2C_NOT_READY (6)
85#define I2C_LOST_ARB (7)
86#define I2C_LOST_ARB_ADD (8)
87#define I2C_NO_LINK_RX_ACK (9)
102#define I2C_SR i2cModule->i2sr
103#define I2C_CR i2cModule->i2cr
104#define I2C_DR i2cModule->i2dr
105#define I2C_FDR i2cModule->i2fdr
106#define I2C_ADR i2cModule->i2adr
121 void MultiChannel_I2CInit(
int moduleNum = DEFAULT_I2C_MODULE, uint8_t slave_Addr = 0x08, uint8_t freqdiv = 0x3C);
180 uint32_t I2CTXAvail();
189 uint8_t I2CGetByte();
204 uint8_t I2CFillSlaveTXBuf(puint8_t buf, uint32_t num,
bool restart =
true);
216 extern uint8_t (*I2C_SlaveTX_Callback)();
226 extern void (*I2C_SlaveTX_NAK_Callback)();
240 extern void (*I2C_SlaveRX_Callback)(uint8_t RX_Data);
242#define I2C_START_READ (1)
243#define I2C_START_WRITE (0)
261 uint8_t
MultiChannel_I2CRestart(
int moduleNum, uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT);
292 uint8_t
MultiChannel_I2CStart(
int moduleNum, uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_START_TIMEOUT);
350 struct I2C_Slave_Record
352 OS_SEM I2C_Slave_RX_Semaphore;
354 volatile uint8_t *pI2CRxbuf;
355 volatile uint8_t *pI2CTxbuf;
357 volatile uint32_t I2Crx_put;
358 volatile uint32_t I2Crx_get;
360 volatile uint32_t I2Ctx_put;
361 volatile uint32_t I2Ctx_get;
372#define I2C_SR_BUSY (((0x20 & I2C_SR) == 0x20))
373#define I2C_CR_SLAVE (((0x20 & I2C_CR) == 0x00))
374#define I2C_SR_ARB_LOST (((0x10 & I2C_SR) == 0x10))
375#define I2C_SR_ADRES_AS_SLAVE (((0x40 & I2C_SR) == 0x40))
376#define I2C_SR_SLAVE_TX (((0x04 & I2C_SR) == 0x04))
378#define I2C_CR_TX (((0x10 & I2C_CR) == 0x10))
379#define I2C_SR_RX_ACK (((0x01 & I2C_SR) == 0x00))
380#define I2C_CR_RX_ACK (((0x08 & I2C_CR) == 0x00))
382#define I2C_SET_NO_ACK ((I2C_CR |= 0x08))
383#define I2C_SET_ACK ((I2C_CR &= 0xF7))
384#define I2C_SET_TX ((I2C_CR |= 0x10))
385#define I2C_SET_RX ((I2C_CR &= 0xEF))
386#define I2C_SET_REPEAT_START ((I2C_CR |= 0x04))
387#define I2C_CLR_ARB_LOST ((I2C_SR &= 0xEF))
392 inline void I2CInit(uint8_t slave_Addr = 0x08, uint8_t freqdiv = 0x3C)
397 inline void Mulit_I2CInit(uint8_t slave_Addr = 0x08, uint8_t freqdiv = 0x3C)
402 inline uint8_t I2CSendBuf(uint8_t addr, puint8_t buf,
int num,
bool stop =
true)
407 inline uint8_t Multi_I2CSendBuf(uint8_t addr, puint8_t buf,
int num,
bool stop =
true)
412 inline uint8_t I2CReadBuf(uint8_t addr, puint8_t buf,
int num,
bool stop =
true)
417 inline uint8_t Multi_I2CReadBuf(uint8_t addr, puint8_t buf,
int num,
bool stop =
true)
422 inline uint8_t I2CRestart(uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
427 inline uint8_t Multi_I2CRestart(uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
432 inline uint8_t I2CStart(uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
437 inline uint8_t Multi_I2CStart(uint8_t addr,
bool Read_Not_Write, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
442 inline uint8_t I2CStop(uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT) {
return MultiChannel_I2CStop(DEFAULT_I2C_MODULE, ticks_to_wait); }
444 inline uint8_t Multi_I2CStop(uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
449 inline uint8_t I2CSend(uint8_t val, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
454 inline uint8_t Multi_I2CSend(uint8_t val, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
459 inline uint8_t I2CRead(puint8_t val, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
464 inline uint8_t Multi_I2CRead(puint8_t val, uint32_t ticks_to_wait = I2C_RX_TX_TIMEOUT)
uint8_t MultiChannel_I2CRead(int moduleNum, puint8_t val, uint32_t ticks_to_wait=I2C_RX_TX_TIMEOUT)
Read a single byte from the I2C bus.
void MultiChannel_I2CInit(int moduleNum=DEFAULT_I2C_MODULE, uint8_t slave_Addr=0x08, uint8_t freqdiv=0x3C)
Initialize the I2C peripheral module.
uint8_t MultiChannel_I2CStop(int moduleNum=DEFAULT_I2C_MODULE, uint32_t ticks_to_wait=I2C_RX_TX_TIMEOUT)
Issue an I2C stop terminate communication with an I2C device and release the bus.
uint8_t MultiChannel_I2CSend(int moduleNum, uint8_t val, uint32_t ticks_to_wait=I2C_RX_TX_TIMEOUT)
Send a single byte on the I2C bus.
uint8_t MultiChannel_I2CSendBuf(int moduleNum, uint8_t addr, puint8_t buf, int num, bool stop=true)
Send a buffer of bytes to an I2C device.
void I2CMultiChannelResetPeripheral(int moduleNum)
Reset the specified I2C peripheral module.
uint8_t MultiChannel_I2CReadBuf(int moduleNum, uint8_t addr, puint8_t buf, int num, bool stop=true)
Read a number of bytes from an I2C device and store in the specified buffer.
uint8_t MultiChannel_I2CStart(int moduleNum, uint8_t addr, bool Read_Not_Write, uint32_t ticks_to_wait=I2C_START_TIMEOUT)
Send an I2C start to an I2C device to begin communication.
uint8_t MultiChannel_I2CRestart(int moduleNum, uint8_t addr, bool Read_Not_Write, uint32_t ticks_to_wait=I2C_RX_TX_TIMEOUT)
Restart communication with a I2C device.