void adxl345_write_reg (uint8_t reg, uint8_t data)
{
I2C_XFER_T xfer;
uint8_t TXBuffer[2];
uint8_t RXBuffer;
TXBuffer[0] = reg;
TXBuffer[1] = data;
xfer.slaveAddr = 0x53;
xfer.txBuff = TXBuffer;
xfer.txSz = 2;
xfer.rxBuff = &RXBuffer;
xfer.rxSz = 0;
Chip_I2C_MasterTransfer(I2C0, &xfer);
}
|
int Chip_I2C_MasterTransfer(I2C_ID_T id, I2C_XFER_T *xfer) |
typedef struct {
uint8_t slaveAddr;/**< 7-bit I2C Slave address */
const uint8_t *txBuff;/**< Pointer to array of bytes to be transmitted */
int txSz;/**< Number of bytes in transmit array,
if 0 only receive transfer will be carried on */
uint8_t *rxBuff;/**< Pointer memory where bytes received from I2C be stored */
int rxSz;/**< Number of bytes to received,
if 0 only transmission we be carried on */
I2C_STATUS_T status;/**< Status of the current I2C transfer */
} I2C_XFER_T; |
uint16_t startAddress = 64 * 5; int32_t eepromPage[16]; // 64 bytes total xfer.txBuff = &startAddress; xfer.txSz = sizeof(startAddress); xfer.rxBuff = eepromPage; // Alternative: = &(eepromPage[0]); xfer.rxSz = sizeof(eepromPage); // etc. |
#pragma pack(push, 1)
struct FooBar
{
uint8_t magic;
char header[5];
int32_t val;
};
#pragma pop
struct FooBar fooBar;
// Init of fooBar not shown
xfer.txBuff = &fooBar;
xfer.txSz = sizeof(fooBar); // is 10
xfer.rxSz = 0;
// Write the FooBar struct
|
int16_t someCommand[2] = { 42, 1 };
int32_t someResult;
xfer.txBuff = someCommand; // No cast needed or required by the compiler
xfer.rxBuff = &someResult; // No cast needed or required by the compiler
// Perform I2C transaction now.
// code left out
// Now use the I2C result without any type cast.
if (someResult == 42) { }
|
adxl345_write_reg(regNum, (uint8_t) -25); |
uint8_t buffer[4]; buffer[0] = (uint8_t) -25; xfer.rxBuff = buffer; |