Jump to main content

##

# 2.128 Two-wire Interface - TWI

The TWI PLIB can be configured in TWI master mode.

TWI master mode

The TWI peripheral library supports the following transfers:

Master Write: The master writes a block of data to the slave Master Read: The master reads a block of data from the slave Master Write/Read: The master writes and then reads back a block of data from slave.

The block of data is transferred in a non-blocking manner using a peripheral interrupt. Application can either use a callback or IsBusy API to check for completion of data transfer.

    // Following code demonstrates TWI write operation using polling method

    #define APP_SLAVE_ADDR 0x0057
    #define NUM_BYTES      10

    uint8_t myWriteData [NUM_BYTES] = {'1', '0', ' ', 'B', 'Y', 'T', 'E', 'S', '!', '!',};

    int main(void)
    {
    	/* Initialize all modules */
        SYS_Initialize ( NULL );

        /* Write data to the TWI Slave */
        TWI1_Write(APP_SLAVE_ADDR, &myWriteData[0], NUM_BYTES);

        /* Poll and wait for the transfer to complete */
        while(TWI1_IsBusy());

        /* Check if any error occurred */
        if(TWI1_ErrorGet() == TWI_ERROR_NONE)
        {
            //Transfer is completed successfully
        }
        else
        {
            //Error occurred during transfer.
        }
    	...
    }

    // Following code demonstrates TWI write operation using callback method

    #define APP_SLAVE_ADDR 0x0057
    #define NUM_BYTES      10

    uint8_t myWriteData [NUM_BYTES] = {'1', '0', ' ', 'B', 'Y', 'T', 'E', 'S', '!', '!',};

    void TWI1_Callback(uintptr_t context)
    {
        if(TWI1_ErrorGet() == TWI_ERROR_NONE)
        {
            //Transfer is completed successfully
        }
        else
        {
            //Error occurred during transfer.
        }
    }

    int main(void)
    {
    	/* Initialize all modules */
        SYS_Initialize ( NULL );

        /* Register Callback function */
        TWI1_CallbackRegister(TWI1_Callback, (uintptr_t)NULL);

        /* Submit Write Request */
        TWI1_Write(APP_SLAVE_ADDR, &myWriteData[0], NUM_BYTES);

    	...
    }

## Library Interface

TWI peripheral library provides the following interfaces:

Functions

Name | Description
--- | ---
TWIx_Initialize | Initializes given instance of the TWI peripheral
TWIx_Read | Reads data from the TWI slave
TWIx_Write | Writes data to the TWI slave
TWIx_WriteRead | Write and Read data from TWI Slave
TWIx_IsBusy | Returns the TWI Peripheral busy status
TWIx_ErrorGet | Returns the TWI error that occurred on the bus
TWIx_TransferSetup | Dynamic setup of TWI Peripheral
TWIx_CallbackRegister | Sets the pointer to the function (and it's context) to be called when the given TWI's transfer events occur
TWIx_BusScan Function | Scans and reports the target devices found on the bus

Data types and constants

Name | Type | Description
--- | --- | ---
TWI_ERROR | Enum | Defines the possible errors that the I2C peripheral can generate in I2C master mode
TWI_TRANSFER_SETUP | Struct | I2C transfer setup data structure
TWI_CALLBACK | Typedef | Defines the data type and function signature for the TWI peripheral callback function in TWI master mode

Note: Not all APIs maybe implemented. See the specific device family section for available APIs.