bool DRV_I2C0_MasterStart(void) { /* Check for receive overflow */ if ( PLIB_I2C_ReceiverOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_ReceiverOverflowClear(I2C_ID_4); return false; } /* Check for transmit overflow */ if (PLIB_I2C_TransmitterOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_TransmitterOverflowClear(I2C_ID_4); return false; } /* Check for bus collision errors */ if (PLIB_I2C_ArbitrationLossHasOccurred(I2C_ID_4)) { return false; } /* Issue start */ PLIB_I2C_MasterStart(I2C_ID_4); return true; }
/* Function: char SlaveRead(void) Summary: Reads out a byte of data from the slave receive buffer. */ char SlaveRead(void) { while(!PLIB_I2C_ReceivedByteIsAvailable(I2C_ID_2)); // wait for receive buffer to fill PLIB_I2C_ReceiverOverflowClear(I2C_ID_2); // clear overflow flag return (PLIB_I2C_ReceivedByteGet(I2C_ID_2)); }
// ***************************************************************************** // Section: Instance 0 Byte Transfer Functions (Master/Slave) // ***************************************************************************** bool DRV_I2C0_SetUpByteRead(void) { /* Check for receive overflow */ if ( PLIB_I2C_ReceiverOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_ReceiverOverflowClear(I2C_ID_4); return false; } /* Initiate clock to receive */ PLIB_I2C_MasterReceiverClock1Byte(I2C_ID_4); return true; }
bool DRV_I2C0_MasterRestart(void) { /* Check for receive overflow */ if ( PLIB_I2C_ReceiverOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_ReceiverOverflowClear(I2C_ID_4); return false; } /* Check for transmit overflow */ if (PLIB_I2C_TransmitterOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_TransmitterOverflowClear(I2C_ID_4); return false; } /* Issue restart */ PLIB_I2C_MasterStartRepeat(I2C_ID_4); return true; }
bool DRV_I2C0_ByteWrite(const uint8_t byte) { /* Check for receive overflow */ if ( PLIB_I2C_ReceiverOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_ReceivedByteGet(I2C_ID_4); PLIB_I2C_ReceiverOverflowClear(I2C_ID_4); return false; } /* Check for transmit overflow */ if (PLIB_I2C_TransmitterOverflowHasOccurred(I2C_ID_4)) { PLIB_I2C_TransmitterOverflowClear(I2C_ID_4); return false; } /* Transmit byte */ PLIB_I2C_TransmitterByteSend(I2C_ID_4, byte); return true; }