Tool/software: Code Composer Studio
void i2cReceive(uint8_t regAddress, uint8_t buffer, uint8_t bufferSize){
uint8_t i;
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, LTC2943_SLAVE_ADDRESS);
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
EUSCI_B_I2C_enable(EUSCI_B0_BASE);
while (EUSCI_B_I2C_SENDING_STOP == EUSCI_B_I2C_masterIsStopSent(EUSCI_B0_BASE));
EUSCI_B_I2C_masterSendStart(EUSCI_B0_BASE);
// switch to receiver mode
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_MODE);
for(i=0; i<bufferSize; i++){
buffer = EUSCI_B_I2C_masterReceiveMultiByteNext(EUSCI_B0_BASE);
buffer++;
}
EUSCI_B_I2C_masterReceiveMultiByteStop(EUSCI_B0_BASE);
}
And this is one of the functions to read from a specific register:
uint8_t getControl(){
uint8_t control = 0;
i2cReceive(CONTROL_ADDRESS, control, sizeof(control));
return control;
}
while (EUSCI_B_I2C_SENDING_STOP == EUSCI_B_I2C_masterIsStopSent(EUSCI_B0_BASE));
EUSCI_B_I2C_slaveGetData() but that just returned 255 each time.