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; |