MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages

Overview

Data Structures

struct  i2c_slave_address_t
 Data structure for slave address configuration. More...
 
struct  i2c_slave_config_t
 Structure with settings to initialize the I2C slave module. More...
 
struct  i2c_slave_transfer_t
 I2C slave transfer structure. More...
 
struct  i2c_slave_handle_t
 I2C slave handle structure. More...
 

Typedefs

typedef void(* i2c_slave_transfer_callback_t )(I2C0_Type *base, volatile i2c_slave_transfer_t *transfer, void *userData)
 Slave event callback function pointer type. More...
 

Enumerations

enum  _i2c_slave_state {
  kI2C_Slave_AddressWriteAck = 0x60U,
  kI2C_Slave_MasterArbitrationLostAddressWriteAck = 0x68U,
  kI2C_Slave_GeneralCallAck,
  kI2C_Slave_MasterArbitrationLostGeneralCallAck,
  kI2C_Slave_AddressRxAckData = 0x80U,
  kI2C_Slave_AddressRxNackData = 0x88U,
  kI2C_Slave_GeneralCallRxAckData = 0x90U,
  kI2C_Slave_GeneralCallRxNackData = 0x98U,
  kI2C_Slave_RxRestartStop = 0xA0U,
  kI2C_Slave_AddressReadAck = 0xA8U,
  kI2C_Slave_MasterArbitrationLostAddressReadAck = 0xB0U,
  kI2C_Slave_TxAckData = 0xB8U,
  kI2C_Slave_TxNackData = 0xC0U,
  kI2C_Slave_TxAckLastData
}
 Definitions for SLVCODE in I2C Status register STAT. More...
 
enum  i2c_slave_address_register_t {
  kI2C_SlaveAddressRegister0 = 0U,
  kI2C_SlaveAddressRegister1 = 1U,
  kI2C_SlaveAddressRegister2 = 2U,
  kI2C_SlaveAddressRegister3 = 3U
}
 I2C slave address register. More...
 
enum  i2c_slave_transfer_event_t {
  kI2C_SlaveTransmitEvent = 0x02U,
  kI2C_SlaveReceiveEvent = 0x04U,
  kI2C_SlaveCompletionEvent = 0x20U,
  kI2C_SlaveAllEvents = kI2C_SlaveTransmitEvent | kI2C_SlaveReceiveEvent | kI2C_SlaveCompletionEvent
}
 Set of events sent to the callback for non blocking slave transfers. More...
 

Slave initialization and deinitialization

void I2C_SlaveGetDefaultConfig (i2c_slave_config_t *slaveConfig)
 Provides a default configuration for the I2C slave peripheral. More...
 
status_t I2C_SlaveInit (I2C0_Type *base, const i2c_slave_config_t *slaveConfig)
 Initializes the I2C slave peripheral. More...
 
void I2C_SlaveSetAddress (I2C0_Type *base, i2c_slave_address_register_t addressRegister, i2c_slave_address_t *addressConfig)
 Configures Slave Address n register. More...
 
void I2C_SlaveDeinit (I2C0_Type *base)
 Deinitializes the I2C slave peripheral. More...
 
static void I2C_SlaveEnable (I2C0_Type *base, bool enable)
 Enables or disables the I2C module as slave. More...
 

Slave status

static uint32_t I2C_SlaveGetStatusFlags (I2C0_Type *base)
 Gets the I2C slave status flags. More...
 
static void I2C_SlaveClearStatusFlags (I2C0_Type *base, uint32_t statusMask)
 Clears the I2C status flag state. More...
 

Slave bus operations

status_t I2C_SlaveWriteBlocking (I2C0_Type *base, const uint8_t *txBuff, size_t txSize)
 Performs a polling send transfer on the I2C bus. More...
 
status_t I2C_SlaveReadBlocking (I2C0_Type *base, uint8_t *rxBuff, size_t rxSize)
 Performs a polling receive transfer on the I2C bus. More...
 

Slave non-blocking

void I2C_SlaveTransferCreateHandle (I2C0_Type *base, i2c_slave_handle_t *handle, i2c_slave_transfer_callback_t callback, void *userData)
 Creates a new handle for the I2C slave non-blocking APIs. More...
 
status_t I2C_SlaveTransferNonBlocking (I2C0_Type *base, i2c_slave_handle_t *handle, uint32_t eventMask)
 Starts accepting slave transfers. More...
 
void I2C_SlaveTransferAbort (I2C0_Type *base, i2c_slave_handle_t *handle)
 Aborts the slave non-blocking transfers. More...
 
status_t I2C_SlaveTransferGetCount (I2C0_Type *base, i2c_slave_handle_t *handle, size_t *count)
 Gets the slave transfer remaining bytes during a interrupt non-blocking transfer. More...
 

Slave IRQ handler

void I2C_SlaveTransferHandleIRQ (I2C0_Type *base, void *i2cHandle)
 Reusable routine to handle slave interrupts. More...
 

Data Structure Documentation

struct i2c_slave_address_t

Data Fields

uint8_t address
 7-bit Slave address . More...
 
uint8_t addressMask
 Slave address mask. More...
 
bool enableGeneralCall
 Enable general call. More...
 

Field Documentation

uint8_t i2c_slave_address_t::address
uint8_t i2c_slave_address_t::addressMask
bool i2c_slave_address_t::enableGeneralCall
struct i2c_slave_config_t

This structure holds configuration settings for the I2C slave peripheral. To initialize this structure to reasonable defaults, call the I2C_SlaveGetDefaultConfig() function and pass a pointer to your configuration structure instance.

The configuration structure can be made constant so it resides in flash.

Data Fields

i2c_slave_address_t address0
 Slave address0 configuration. More...
 
i2c_slave_address_t address1
 Slave address1 configuration. More...
 
i2c_slave_address_t address2
 Slave address2 configuration. More...
 
i2c_slave_address_t address3
 Slave address3 configuration. More...
 
bool enableSlave
 Enable slave mode. More...
 

Field Documentation

i2c_slave_address_t i2c_slave_config_t::address0
i2c_slave_address_t i2c_slave_config_t::address1
i2c_slave_address_t i2c_slave_config_t::address2
i2c_slave_address_t i2c_slave_config_t::address3
bool i2c_slave_config_t::enableSlave
struct i2c_slave_transfer_t

Data Fields

i2c_slave_transfer_event_t event
 Reason the callback is being invoked. More...
 
uint8_t receivedAddress
 Matching address send by master. More...
 
uint32_t eventMask
 Mask of enabled events. More...
 
uint8_t * rxData
 Transfer buffer for receive data.
 
const uint8_t * txData
 Transfer buffer for transmit data.
 
size_t txSize
 Transfer size.
 
size_t rxSize
 Transfer size.
 
size_t transferredCount
 Number of bytes transferred during this transfer. More...
 
status_t completionStatus
 Success or error code describing how the transfer completed. More...
 

Field Documentation

i2c_slave_transfer_event_t i2c_slave_transfer_t::event
uint8_t i2c_slave_transfer_t::receivedAddress

7-bits plus R/nW bit0

uint32_t i2c_slave_transfer_t::eventMask
size_t i2c_slave_transfer_t::transferredCount
status_t i2c_slave_transfer_t::completionStatus

Only applies for kI2C_SlaveCompletionEvent.

struct _i2c_slave_handle

I2C slave handle typedef.

Note
The contents of this structure are private and subject to change.

Data Fields

volatile i2c_slave_transfer_t transfer
 I2C slave transfer. More...
 
volatile bool isBusy
 Whether transfer is busy. More...
 
i2c_slave_transfer_callback_t callback
 Callback function called at transfer event. More...
 
void * userData
 Callback parameter passed to callback. More...
 

Field Documentation

volatile i2c_slave_transfer_t i2c_slave_handle_t::transfer
volatile bool i2c_slave_handle_t::isBusy
i2c_slave_transfer_callback_t i2c_slave_handle_t::callback
void* i2c_slave_handle_t::userData

Typedef Documentation

typedef void(* i2c_slave_transfer_callback_t)(I2C0_Type *base, volatile i2c_slave_transfer_t *transfer, void *userData)

This callback is used only for the slave non-blocking transfer API. To install a callback, use the I2C_SlaveSetCallback() function after you have created a handle.

Parameters
baseBase address for the I2C instance on which the event occurred.
transferPointer to transfer descriptor containing values passed to and/or from the callback.
userDataArbitrary pointer-sized value passed from the application.

Enumeration Type Documentation

Enumerator
kI2C_Slave_AddressWriteAck 

SLAVE: Receive mode, own SLA+W has been received, ACK has been returned.

kI2C_Slave_MasterArbitrationLostAddressWriteAck 

SLAVE: Receive mode, arbitration lost in SLA+R/W as master, own SLA+W has been received, ACK returned.

kI2C_Slave_GeneralCallAck 

SLAVE: Receive mode, general Call address(0x00) has been received, ACK has been returned.

kI2C_Slave_MasterArbitrationLostGeneralCallAck 

SLAVE: Receive mode, arbitration lost in SLA+R/W as master, General Call address(0x00) has been received, ACK has been returned.

kI2C_Slave_AddressRxAckData 

SLAVE: Previously addressed with own Slave address, DATA has been received, ACK has been returned.

kI2C_Slave_AddressRxNackData 

SLAVE: Previously addressed with own Slave address, DATA has been received, NACK has been returned.

kI2C_Slave_GeneralCallRxAckData 

SLAVE: Previously addressed with General Call address, DATA has been received, ACK has been returned.

kI2C_Slave_GeneralCallRxNackData 

SLAVE: Previously addressed with General Call address, DATA has been received, NACK has been returned.

kI2C_Slave_RxRestartStop 

SLAVE: A STOP condition or Repeated-START condition has been received while still addressed as slave receiver or slave transmitter.

kI2C_Slave_AddressReadAck 

SLAVE: Transmit mode, own SLA+R has been received, ACK has been returned.

kI2C_Slave_MasterArbitrationLostAddressReadAck 

SLAVE: Transmit mode, arbitration lost in SLA+R/W as master, own SLA+W has been received, ACK returned.

kI2C_Slave_TxAckData 

SLAVE: Data byte in I2DAT has been transmitted, ACK has been received.

kI2C_Slave_TxNackData 

SLAVE: Data byte in I2DAT has been transmitted, NACK has been received.

kI2C_Slave_TxAckLastData 

SLAVE: last dataa byte in I2DAT has been transmitted (AA = 0), ACK has been received.

Enumerator
kI2C_SlaveAddressRegister0 

Slave Address 0 register.

kI2C_SlaveAddressRegister1 

Slave Address 1 register.

kI2C_SlaveAddressRegister2 

Slave Address 2 register.

kI2C_SlaveAddressRegister3 

Slave Address 3 register.

These event enumerations are used for two related purposes. First, a bit mask created by OR'ing together events is passed to I2C_SlaveTransferNonBlocking() in order to specify which events to enable. Then, when the slave callback is invoked, it is passed the current event through its transfer parameter.

Note
These enumerations are meant to be OR'd together to form a bit mask of events.
Enumerator
kI2C_SlaveTransmitEvent 

Callback is requested to provide data to transmit (slave-transmitter role).

kI2C_SlaveReceiveEvent 

Callback is requested to provide a buffer in which to place received data (slave-receiver role).

kI2C_SlaveCompletionEvent 

All data in the active transfer have been consumed.

kI2C_SlaveAllEvents 

Bit mask of all available events.

Function Documentation

void I2C_SlaveGetDefaultConfig ( i2c_slave_config_t slaveConfig)

This function provides the following default configuration for the I2C slave peripheral:

* slaveConfig->address0 = 0x0U;
* slaveConfig->address1 = 0x0U;
* slaveConfig->address2 = 0x0U;
* slaveConfig->address3 = 0x0U;
* slaveConfig->enableGeneralCall = false;
* slaveConfig->enableSlave = true;
*

After calling this function, override any settings to customize the configuration, prior to initializing the master driver with I2C_SlaveInit(). Be sure to override at least the address0.address member of the configuration structure with the desired slave address.

Parameters
[out]slaveConfigUser provided configuration structure that is set to default values. Refer to i2c_slave_config_t.
status_t I2C_SlaveInit ( I2C0_Type *  base,
const i2c_slave_config_t slaveConfig 
)

This function enables the peripheral clock and initializes the I2C slave peripheral as described by the user provided configuration.

Parameters
baseThe I2C peripheral base address.
slaveConfigUser provided peripheral configuration. Use I2C_SlaveGetDefaultConfig() to get a set of defaults that you can override.
srcClock_HzFrequency in Hertz of the I2C functional clock. Used to calculate CLKDIV value to provide enough data setup time for master when slave stretches the clock.
void I2C_SlaveSetAddress ( I2C0_Type *  base,
i2c_slave_address_register_t  addressRegister,
i2c_slave_address_t addressConfig 
)

This function writes new value to Slave Address register.

Parameters
baseThe I2C peripheral base address.
addressRegisterThe module supports multiple address registers. The parameter determines which one shall be changed.
addressConfigThe slave address configuration.
void I2C_SlaveDeinit ( I2C0_Type *  base)

This function disables the I2C slave peripheral and gates the clock. It also performs a software reset to restore the peripheral to reset conditions.

Parameters
baseThe I2C peripheral base address.
static void I2C_SlaveEnable ( I2C0_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseThe I2C peripheral base address.
enableTrue to enable or flase to disable.
static uint32_t I2C_SlaveGetStatusFlags ( I2C0_Type *  base)
inlinestatic

A bit mask with the state of all I2C control flags is returned. For each flag, the corresponding bit in the return value is set if the flag is asserted.

Parameters
baseThe I2C peripheral base address.
Returns
State of the status flags:
  • 1: related status flag is set.
  • 0: related status flag is not set.
See Also
_i2c_flags
static void I2C_SlaveClearStatusFlags ( I2C0_Type *  base,
uint32_t  statusMask 
)
inlinestatic

The following status register flags can be cleared:

  • slave deselected flag

Attempts to clear other flags has no effect.

Parameters
baseThe I2C peripheral base address.
statusMaskA bitmask of status flags that are to be cleared. The mask is composed of #_i2c_slave_flags enumerators OR'd together. You may pass the result of a previous call to I2C_SlaveGetStatusFlags().
See Also
_i2c_flags.
status_t I2C_SlaveWriteBlocking ( I2C0_Type *  base,
const uint8_t *  txBuff,
size_t  txSize 
)

The function executes blocking address phase and blocking data phase.

Parameters
baseThe I2C peripheral base address.
txBuffThe pointer to the data to be transferred.
txSizeThe length in bytes of the data to be transferred.
Returns
kStatus_Success Data has been sent.
kStatus_Fail Unexpected slave state (master data write while master read from slave is expected).
status_t I2C_SlaveReadBlocking ( I2C0_Type *  base,
uint8_t *  rxBuff,
size_t  rxSize 
)

The function executes blocking address phase and blocking data phase.

Parameters
baseThe I2C peripheral base address.
rxBuffThe pointer to the data to be transferred.
rxSizeThe length in bytes of the data to be transferred.
Returns
kStatus_Success Data has been received.
kStatus_Fail Unexpected slave state (master data read while master write to slave is expected).
void I2C_SlaveTransferCreateHandle ( I2C0_Type *  base,
i2c_slave_handle_t *  handle,
i2c_slave_transfer_callback_t  callback,
void *  userData 
)

The creation of a handle is for use with the non-blocking APIs. Once a handle is created, there is not a corresponding destroy handle. If the user wants to terminate a transfer, the I2C_SlaveTransferAbort() API shall be called.

Parameters
baseThe I2C peripheral base address.
[out]handlePointer to the I2C slave driver handle.
callbackUser provided pointer to the asynchronous callback function.
userDataUser provided pointer to the application callback data.
status_t I2C_SlaveTransferNonBlocking ( I2C0_Type *  base,
i2c_slave_handle_t *  handle,
uint32_t  eventMask 
)

Call this API after calling I2C_SlaveInit() and I2C_SlaveTransferCreateHandle() to start processing transactions driven by an I2C master. The slave monitors the I2C bus and pass events to the callback that was passed into the call to I2C_SlaveTransferCreateHandle(). The callback is always invoked from the interrupt context.

If no slave Tx transfer is busy, a master read from slave request invokes kI2C_SlaveTransmitEvent callback. If no slave Rx transfer is busy, a master write to slave request invokes kI2C_SlaveReceiveEvent callback.

The set of events received by the callback is customizable. To do so, set the eventMask parameter to the OR'd combination of i2c_slave_transfer_event_t enumerators for the events you wish to receive. The kI2C_SlaveTransmitEvent and kI2C_SlaveReceiveEvent events are always enabled and do not need to be included in the mask. Alternatively, you can pass 0 to get a default set of only the transmit and receive events that are always enabled. In addition, the kI2C_SlaveAllEvents constant is provided as a convenient way to enable all events.

Parameters
baseThe I2C peripheral base address.
handlePointer to i2c_slave_handle_t structure which stores the transfer state.
eventMaskBit mask formed by OR'ing together i2c_slave_transfer_event_t enumerators to specify which events to send to the callback. Other accepted values are 0 to get a default set of only the transmit and receive events, and kI2C_SlaveAllEvents to enable all events.
Return values
kStatus_SuccessSlave transfers were successfully started.
kStatus_I2C_BusySlave transfers have already been started on this handle.
void I2C_SlaveTransferAbort ( I2C0_Type *  base,
i2c_slave_handle_t *  handle 
)
Note
This API could be called at any time to stop slave for handling the bus events.
Parameters
baseThe I2C peripheral base address.
handlePointer to i2c_slave_handle_t structure which stores the transfer state.
status_t I2C_SlaveTransferGetCount ( I2C0_Type *  base,
i2c_slave_handle_t *  handle,
size_t *  count 
)
Parameters
baseI2C base pointer.
handlepointer to i2c_slave_handle_t structure.
countNumber of bytes transferred so far by the non-blocking transaction.
Return values
kStatus_InvalidArgumentcount is Invalid.
kStatus_SuccessSuccessfully return the count.
void I2C_SlaveTransferHandleIRQ ( I2C0_Type *  base,
void *  i2cHandle 
)
Note
This function does not need to be called unless you are reimplementing the non blocking API's interrupt handler routines to add special functionality.
Parameters
baseThe I2C peripheral base address.
handlePointer to i2c_slave_handle_t structure which stores the transfer state.