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;
}
Example #2
0
/*
  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;
}