It looks like this is waiting for the bus idle state.
Code from AN4610:
bool WriteAccRegs(LDD_TDeviceData *I2CPtr, TDataState *DataState, uint8_t Address, uint8_t RegCount, uint8_t *Data)
{
LDD_I2C_TBusState BusState;
const uint8_t MAX_REG_COUNT = 16;
uint8_t SendBuffer[MAX_REG_COUNT];
SendBuffer[0] = Address;
memcpy(&SendBuffer[1], Data, RegCount);
DataState->Sent = FALSE;
I2C_MasterSendBlock(I2CPtr, &SendBuffer, RegCount + 1, LDD_I2C_SEND_STOP);
while (!DataState->Sent) {}
do {I2C_CheckBus(I2CPtr, &BusState);}
while(BusState != LDD_I2C_IDLE);
if (!DataState->Sent) {
return FALSE;
}
return TRUE;
}
Erich