The KSDK provides a peripheral driver for the Inter-Integrated Circuit (I2C) module of Kinetis devices.
Overview
The I2C driver includes functional APIs and transactional APIs.
Functional APIs are feature/property target low level APIs. Functional APIs can be used for the I2C master/slave initialization/configuration/operation for optimization/customization purpose. Using the functional APIs requires the knowledge of the I2C master peripheral and how to organize functional APIs to meet the application requirements. The I2C functional operation groups provide the functional APIs set.
Transactional APIs are transaction target high level APIs. The transactional APIs can be used to enable the peripheral quickly and also in the application if the code size and performance of transactional APIs satisfy the requirements. If the code size and performance are critical requirements, see the transactional API implementation and write custom code using the functional APIs or accessing the hardware registers.
Transactional APIs support asynchronous transfer. This means that the functions I2C_MasterTransferNonBlocking() set up the interrupt non-blocking transfer. When the transfer completes, the upper layer is notified through a callback function with the status.
Typical use case
Master Operation in functional method
uint8_t status;
status_t result = kStatus_Success;
uint8_t txBuff[BUFFER_SIZE];
Master Operation in interrupt transactional method
i2c_master_handle_t g_m_handle;
volatile bool g_MasterCompletionFlag = false;
uint8_t status;
status_t result = kStatus_Success;
uint8_t txBuff[BUFFER_SIZE];
static void i2c_master_callback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData)
{
Master Operation in DMA transactional method
i2c_master_dma_handle_t g_m_dma_handle;
volatile bool g_MasterCompletionFlag = false;
uint8_t txBuff[BUFFER_SIZE];
static void i2c_master_callback(I2C_Type *base, i2c_master_dma_handle_t *handle, status_t status, void *userData)
{
Slave Operation in functional method
uint8_t status;
status_t result = kStatus_Success;
Slave Operation in interrupt transactional method
i2c_slave_handle_t g_s_handle;
volatile bool g_SlaveCompletionFlag = false;
{
{
|
enum | _i2c_status {
kStatus_I2C_Busy = MAKE_STATUS(kStatusGroup_I2C, 0),
kStatus_I2C_Idle = MAKE_STATUS(kStatusGroup_I2C, 1),
kStatus_I2C_Nak = MAKE_STATUS(kStatusGroup_I2C, 2),
kStatus_I2C_ArbitrationLost = MAKE_STATUS(kStatusGroup_I2C, 3),
kStatus_I2C_Timeout = MAKE_STATUS(kStatusGroup_I2C, 4)
} |
| I2C status return codes. More...
|
|
enum | _i2c_flags {
kI2C_ReceiveNakFlag = I2C_S_RXAK_MASK,
kI2C_IntPendingFlag = I2C_S_IICIF_MASK,
kI2C_TransferDirectionFlag = I2C_S_SRW_MASK,
kI2C_RangeAddressMatchFlag = I2C_S_RAM_MASK,
kI2C_ArbitrationLostFlag = I2C_S_ARBL_MASK,
kI2C_BusBusyFlag = I2C_S_BUSY_MASK,
kI2C_AddressMatchFlag = I2C_S_IAAS_MASK,
kI2C_TransferCompleteFlag = I2C_S_TCF_MASK
} |
| I2C peripheral flags. More...
|
|
enum | _i2c_interrupt_enable { kI2C_GlobalInterruptEnable = I2C_C1_IICIE_MASK
} |
| I2C feature interrupt source. More...
|
|
enum | i2c_direction_t {
kI2C_Write = 0x0U,
kI2C_Read = 0x1U
} |
| Direction of master and slave transfers. More...
|
|
enum | i2c_slave_address_mode_t {
kI2C_Address7bit = 0x0U,
kI2C_RangeMatch = 0X2U
} |
| Addressing mode. More...
|
|
enum | _i2c_master_transfer_flags {
kI2C_TransferDefaultFlag = 0x0U,
kI2C_TransferNoStartFlag = 0x1U,
kI2C_TransferRepeatedStartFlag = 0x2U,
kI2C_TransferNoStopFlag = 0x4U
} |
| I2C transfer control flag. More...
|
|
enum | i2c_slave_transfer_event_t {
kI2C_SlaveAddressMatchEvent = 0x01U,
kI2C_SlaveTransmitEvent = 0x02U,
kI2C_SlaveReceiveEvent = 0x04U,
kI2C_SlaveTransmitAckEvent = 0x08U,
kI2C_SlaveCompletionEvent = 0x20U,
kI2C_SlaveAllEvents
} |
| Set of events sent to the callback for nonblocking slave transfers. More...
|
|
|
void | I2C_MasterSetBaudRate (I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz) |
| Sets the I2C master transfer baud rate. More...
|
|
status_t | I2C_MasterStart (I2C_Type *base, uint8_t address, i2c_direction_t direction) |
| Sends a START on the I2C bus. More...
|
|
status_t | I2C_MasterStop (I2C_Type *base) |
| Sends a STOP signal on the I2C bus. More...
|
|
status_t | I2C_MasterRepeatedStart (I2C_Type *base, uint8_t address, i2c_direction_t direction) |
| Sends a REPEATED START on the I2C bus. More...
|
|
status_t | I2C_MasterWriteBlocking (I2C_Type *base, const uint8_t *txBuff, size_t txSize) |
| Performs a polling send transaction on the I2C bus without a STOP signal. More...
|
|
status_t | I2C_MasterReadBlocking (I2C_Type *base, uint8_t *rxBuff, size_t rxSize) |
| Performs a polling receive transaction on the I2C bus with a STOP signal. More...
|
|
status_t | I2C_SlaveWriteBlocking (I2C_Type *base, const uint8_t *txBuff, size_t txSize) |
| Performs a polling send transaction on the I2C bus. More...
|
|
void | I2C_SlaveReadBlocking (I2C_Type *base, uint8_t *rxBuff, size_t rxSize) |
| Performs a polling receive transaction on the I2C bus. More...
|
|
status_t | I2C_MasterTransferBlocking (I2C_Type *base, i2c_master_transfer_t *xfer) |
| Performs a master polling transfer on the I2C bus. More...
|
|
|
void | I2C_MasterTransferCreateHandle (I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_callback_t callback, void *userData) |
| Initializes the I2C handle which is used in transactional functions. More...
|
|
status_t | I2C_MasterTransferNonBlocking (I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer) |
| Performs a master interrupt non-blocking transfer on the I2C bus. More...
|
|
status_t | I2C_MasterTransferGetCount (I2C_Type *base, i2c_master_handle_t *handle, size_t *count) |
| Gets the master transfer status during a interrupt non-blocking transfer. More...
|
|
void | I2C_MasterTransferAbort (I2C_Type *base, i2c_master_handle_t *handle) |
| Aborts an interrupt non-blocking transfer early. More...
|
|
void | I2C_MasterTransferHandleIRQ (I2C_Type *base, void *i2cHandle) |
| Master interrupt handler. More...
|
|
void | I2C_SlaveTransferCreateHandle (I2C_Type *base, i2c_slave_handle_t *handle, i2c_slave_transfer_callback_t callback, void *userData) |
| Initializes the I2C handle which is used in transactional functions. More...
|
|
status_t | I2C_SlaveTransferNonBlocking (I2C_Type *base, i2c_slave_handle_t *handle, uint32_t eventMask) |
| Starts accepting slave transfers. More...
|
|
void | I2C_SlaveTransferAbort (I2C_Type *base, i2c_slave_handle_t *handle) |
| Aborts the slave transfer. More...
|
|
status_t | I2C_SlaveTransferGetCount (I2C_Type *base, i2c_slave_handle_t *handle, size_t *count) |
| Gets the slave transfer remaining bytes during a interrupt non-blocking transfer. More...
|
|
void | I2C_SlaveTransferHandleIRQ (I2C_Type *base, void *i2cHandle) |
| Slave interrupt handler. More...
|
|
struct i2c_master_config_t |
bool i2c_master_config_t::enableMaster |
uint32_t i2c_master_config_t::baudRate_Bps |
uint8_t i2c_master_config_t::glitchFilterWidth |
struct i2c_slave_config_t |
bool i2c_slave_config_t::enableSlave |
bool i2c_slave_config_t::enableGeneralCall |
bool i2c_slave_config_t::enableWakeUp |
bool i2c_slave_config_t::enableBaudRateCtl |
uint16_t i2c_slave_config_t::slaveAddress |
uint16_t i2c_slave_config_t::upperAddress |
struct i2c_master_transfer_t |
uint32_t i2c_master_transfer_t::flags |
uint8_t i2c_master_transfer_t::slaveAddress |
uint32_t i2c_master_transfer_t::subaddress |
uint8_t i2c_master_transfer_t::subaddressSize |
uint8_t* volatile i2c_master_transfer_t::data |
volatile size_t i2c_master_transfer_t::dataSize |
struct _i2c_master_handle |
I2C master handle typedef.
size_t i2c_master_handle_t::transferSize |
uint8_t i2c_master_handle_t::state |
void* i2c_master_handle_t::userData |
struct i2c_slave_transfer_t |
uint8_t* volatile i2c_slave_transfer_t::data |
volatile size_t i2c_slave_transfer_t::dataSize |
status_t i2c_slave_transfer_t::completionStatus |
size_t i2c_slave_transfer_t::transferredCount |
I2C slave handle typedef.
bool i2c_slave_handle_t::isBusy |
uint32_t i2c_slave_handle_t::eventMask |
void* i2c_slave_handle_t::userData |
typedef void(* i2c_master_transfer_callback_t)(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData) |
typedef void(* i2c_slave_transfer_callback_t)(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData) |
Enumerator |
---|
kStatus_I2C_Busy |
I2C is busy with current transfer.
|
kStatus_I2C_Idle |
Bus is Idle.
|
kStatus_I2C_Nak |
NAK received during transfer.
|
kStatus_I2C_ArbitrationLost |
Arbitration lost during transfer.
|
kStatus_I2C_Timeout |
Wait event timeout.
|
The following status register flags can be cleared:
- Note
- These enumerations are meant to be OR'd together to form a bit mask.
Enumerator |
---|
kI2C_ReceiveNakFlag |
I2C receive NAK flag.
|
kI2C_IntPendingFlag |
I2C interrupt pending flag.
|
kI2C_TransferDirectionFlag |
I2C transfer direction flag.
|
kI2C_RangeAddressMatchFlag |
I2C range address match flag.
|
kI2C_ArbitrationLostFlag |
I2C arbitration lost flag.
|
kI2C_BusBusyFlag |
I2C bus busy flag.
|
kI2C_AddressMatchFlag |
I2C address match flag.
|
kI2C_TransferCompleteFlag |
I2C transfer complete flag.
|
Enumerator |
---|
kI2C_GlobalInterruptEnable |
I2C global interrupt.
|
Enumerator |
---|
kI2C_Write |
Master transmit to slave.
|
kI2C_Read |
Master receive from slave.
|
Enumerator |
---|
kI2C_Address7bit |
7-bit addressing mode.
|
kI2C_RangeMatch |
Range address match addressing mode.
|
Enumerator |
---|
kI2C_TransferDefaultFlag |
Transfer starts with a start signal, stops with a stop signal.
|
kI2C_TransferNoStartFlag |
Transfer starts without a start signal.
|
kI2C_TransferRepeatedStartFlag |
Transfer starts with a repeated start signal.
|
kI2C_TransferNoStopFlag |
Transfer ends without a stop signal.
|
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_SlaveAddressMatchEvent |
Received the slave address after a start or repeated start.
|
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_SlaveTransmitAckEvent |
Callback needs to either transmit an ACK or NACK.
|
kI2C_SlaveCompletionEvent |
A stop was detected or finished transfer, completing the transfer.
|
kI2C_SlaveAllEvents |
Bit mask of all available events.
|
void I2C_MasterInit |
( |
I2C_Type * |
base, |
|
|
const i2c_master_config_t * |
masterConfig, |
|
|
uint32_t |
srcClock_Hz |
|
) |
| |
Call this API to ungate the I2C clock and configure the I2C with master configuration.
- Note
- This API should be called at the beginning of the application to use the I2C driver, or any operation to the I2C module could cause hard fault because clock is not enabled. The configuration structure can be filled by user from scratch, or be set with default values by I2C_MasterGetDefaultConfig(). After calling this API, the master is ready to transfer. Example:
.enableMaster = true,
.enableStopHold = false,
.highDrive = false,
.baudRate_Bps = 100000,
.glitchFilterWidth = 0
};
- Parameters
-
base | I2C base pointer |
masterConfig | pointer to master configuration structure |
srcClock_Hz | I2C peripheral clock frequency in Hz |
Call this API to ungate the I2C clock and initializes the I2C with slave configuration.
- Note
- This API should be called at the beginning of the application to use the I2C driver, or any operation to the I2C module can cause a hard fault because the clock is not enabled. The configuration structure can partly be set with default values by I2C_SlaveGetDefaultConfig(), or can be filled by the user. Example
.enableSlave = true,
.enableGeneralCall = false,
.slaveAddress = 0x1DU,
.enableWakeUp = false,
.enablehighDrive = false,
.enableBaudRateCtl = false
};
- Parameters
-
base | I2C base pointer |
slaveConfig | pointer to slave configuration structure |
void I2C_MasterDeinit |
( |
I2C_Type * |
base | ) |
|
Call this API to gate the I2C clock. The I2C master module can't work unless the I2C_MasterInit is called.
- Parameters
-
void I2C_SlaveDeinit |
( |
I2C_Type * |
base | ) |
|
Calling this API gates the I2C clock. The I2C slave module can't work unless the I2C_SlaveInit is called to enable the clock.
- Parameters
-
The purpose of this API is to get the configuration structure initialized for use in the I2C_MasterConfigure(). Use the initialized structure unchanged in I2C_MasterConfigure(), or modify some fields of the structure before calling I2C_MasterConfigure(). Example:
- Parameters
-
masterConfig | Pointer to the master configuration structure. |
The purpose of this API is to get the configuration structure initialized for use in I2C_SlaveConfigure(). Modify fields of the structure before calling the I2C_SlaveConfigure(). Example:
- Parameters
-
slaveConfig | Pointer to the slave configuration structure. |
static void I2C_Enable |
( |
I2C_Type * |
base, |
|
|
bool |
enable |
|
) |
| |
|
inlinestatic |
- Parameters
-
base | I2C base pointer |
enable | pass true to enable module, false to disable module |
uint32_t I2C_MasterGetStatusFlags |
( |
I2C_Type * |
base | ) |
|
- Parameters
-
- Returns
- status flag, use status flag to AND _i2c_flags could get the related status.
static uint32_t I2C_SlaveGetStatusFlags |
( |
I2C_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
- Returns
- status flag, use status flag to AND _i2c_flags could get the related status.
static void I2C_MasterClearStatusFlags |
( |
I2C_Type * |
base, |
|
|
uint32_t |
statusMask |
|
) |
| |
|
inlinestatic |
The following status register flags can be cleared: kI2C_ArbitrationLostFlag and kI2C_IntPendingFlag
- Parameters
-
base | I2C base pointer |
statusMask | The status flag mask, defined in type i2c_status_flag_t. The parameter could be any combination of the following values:
- kI2C_StartDetectFlag (if available)
- kI2C_StopDetectFlag (if available)
- kI2C_ArbitrationLostFlag
- kI2C_IntPendingFlagFlag
|
static void I2C_SlaveClearStatusFlags |
( |
I2C_Type * |
base, |
|
|
uint32_t |
statusMask |
|
) |
| |
|
inlinestatic |
The following status register flags can be cleared: kI2C_ArbitrationLostFlag and kI2C_IntPendingFlag
- Parameters
-
base | I2C base pointer |
statusMask | The status flag mask, defined in type i2c_status_flag_t. The parameter could be any combination of the following values:
- kI2C_StartDetectFlag (if available)
- kI2C_StopDetectFlag (if available)
- kI2C_ArbitrationLostFlag
- kI2C_IntPendingFlagFlag
|
void I2C_EnableInterrupts |
( |
I2C_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
- Parameters
-
base | I2C base pointer |
mask | interrupt source The parameter can be combination of the following source if defined:
- kI2C_GlobalInterruptEnable
- kI2C_StopDetectInterruptEnable/kI2C_StartDetectInterruptEnable
- kI2C_SdaTimeoutInterruptEnable
|
void I2C_DisableInterrupts |
( |
I2C_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
- Parameters
-
base | I2C base pointer |
mask | interrupt source The parameter can be combination of the following source if defined:
- kI2C_GlobalInterruptEnable
- kI2C_StopDetectInterruptEnable/kI2C_StartDetectInterruptEnable
- kI2C_SdaTimeoutInterruptEnable
|
static uint32_t I2C_GetDataRegAddr |
( |
I2C_Type * |
base | ) |
|
|
inlinestatic |
This API is used to provide a transfer address for I2C DMA transfer configuration.
- Parameters
-
- Returns
- data register address
void I2C_MasterSetBaudRate |
( |
I2C_Type * |
base, |
|
|
uint32_t |
baudRate_Bps, |
|
|
uint32_t |
srcClock_Hz |
|
) |
| |
- Parameters
-
base | I2C base pointer |
baudRate_Bps | the baud rate value in bps |
srcClock_Hz | Source clock |
status_t I2C_MasterStart |
( |
I2C_Type * |
base, |
|
|
uint8_t |
address, |
|
|
i2c_direction_t |
direction |
|
) |
| |
This function is used to initiate a new master mode transfer by sending the START signal. The slave address is sent following the I2C START signal.
- Parameters
-
base | I2C peripheral base pointer |
address | 7-bit slave device address. |
direction | Master transfer directions(transmit/receive). |
- Return values
-
kStatus_Success | Successfully send the start signal. |
kStatus_I2C_Busy | Current bus is busy. |
status_t I2C_MasterStop |
( |
I2C_Type * |
base | ) |
|
- Return values
-
kStatus_Success | Successfully send the stop signal. |
kStatus_I2C_Timeout | Send stop signal failed, timeout. |
status_t I2C_MasterRepeatedStart |
( |
I2C_Type * |
base, |
|
|
uint8_t |
address, |
|
|
i2c_direction_t |
direction |
|
) |
| |
- Parameters
-
base | I2C peripheral base pointer |
address | 7-bit slave device address. |
direction | Master transfer directions(transmit/receive). |
- Return values
-
kStatus_Success | Successfully send the start signal. |
kStatus_I2C_Busy | Current bus is busy but not occupied by current I2C master. |
status_t I2C_MasterWriteBlocking |
( |
I2C_Type * |
base, |
|
|
const uint8_t * |
txBuff, |
|
|
size_t |
txSize |
|
) |
| |
- Parameters
-
base | The I2C peripheral base pointer. |
txBuff | The pointer to the data to be transferred. |
txSize | The length in bytes of the data to be transferred. |
- Return values
-
kStatus_Success | Successfully complete the data transmission. |
kStatus_I2C_ArbitrationLost | Transfer error, arbitration lost. |
kStataus_I2C_Nak | Transfer error, receive NAK during transfer. |
status_t I2C_MasterReadBlocking |
( |
I2C_Type * |
base, |
|
|
uint8_t * |
rxBuff, |
|
|
size_t |
rxSize |
|
) |
| |
- Note
- The I2C_MasterReadBlocking function stops the bus before reading the final byte. Without stopping the bus prior for the final read, the bus issues another read, resulting in garbage data being read into the data register.
- Parameters
-
base | I2C peripheral base pointer. |
rxBuff | The pointer to the data to store the received data. |
rxSize | The length in bytes of the data to be received. |
- Return values
-
kStatus_Success | Successfully complete the data transmission. |
kStatus_I2C_Timeout | Send stop signal failed, timeout. |
status_t I2C_SlaveWriteBlocking |
( |
I2C_Type * |
base, |
|
|
const uint8_t * |
txBuff, |
|
|
size_t |
txSize |
|
) |
| |
- Parameters
-
base | The I2C peripheral base pointer. |
txBuff | The pointer to the data to be transferred. |
txSize | The length in bytes of the data to be transferred. |
- Return values
-
kStatus_Success | Successfully complete the data transmission. |
kStatus_I2C_ArbitrationLost | Transfer error, arbitration lost. |
kStataus_I2C_Nak | Transfer error, receive NAK during transfer. |
void I2C_SlaveReadBlocking |
( |
I2C_Type * |
base, |
|
|
uint8_t * |
rxBuff, |
|
|
size_t |
rxSize |
|
) |
| |
- Parameters
-
base | I2C peripheral base pointer. |
rxBuff | The pointer to the data to store the received data. |
rxSize | The length in bytes of the data to be received. |
- Note
- The API does not return until the transfer succeeds or fails due to arbitration lost or receiving a NAK.
- Parameters
-
base | I2C peripheral base address. |
xfer | Pointer to the transfer structure. |
- Return values
-
kStatus_Success | Successfully complete the data transmission. |
kStatus_I2C_Busy | Previous transmission still not finished. |
kStatus_I2C_Timeout | Transfer error, wait signal timeout. |
kStatus_I2C_ArbitrationLost | Transfer error, arbitration lost. |
kStataus_I2C_Nak | Transfer error, receive NAK during transfer. |
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_master_handle_t structure to store the transfer state. |
callback | pointer to user callback function. |
userData | user paramater passed to the callback function. |
status_t I2C_MasterTransferNonBlocking |
( |
I2C_Type * |
base, |
|
|
i2c_master_handle_t * |
handle, |
|
|
i2c_master_transfer_t * |
xfer |
|
) |
| |
- Note
- Calling the API will return immediately after transfer initiates, user needs to call I2C_MasterGetTransferCount to poll the transfer status to check whether the transfer is finished, if the return status is not kStatus_I2C_Busy, the transfer is finished.
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_master_handle_t structure which stores the transfer state. |
xfer | pointer to i2c_master_transfer_t structure. |
- Return values
-
kStatus_Success | Sucessully start the data transmission. |
kStatus_I2C_Busy | Previous transmission still not finished. |
kStatus_I2C_Timeout | Transfer error, wait signal timeout. |
status_t I2C_MasterTransferGetCount |
( |
I2C_Type * |
base, |
|
|
i2c_master_handle_t * |
handle, |
|
|
size_t * |
count |
|
) |
| |
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_master_handle_t structure which stores the transfer state. |
count | Number of bytes transferred so far by the non-blocking transaction. |
- Return values
-
kStatus_InvalidArgument | count is Invalid. |
kStatus_Success | Successfully return the count. |
void I2C_MasterTransferAbort |
( |
I2C_Type * |
base, |
|
|
i2c_master_handle_t * |
handle |
|
) |
| |
- Note
- This API can be called at any time when an interrupt non-blocking transfer initiates to abort the transfer early.
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_master_handle_t structure which stores the transfer state |
void I2C_MasterTransferHandleIRQ |
( |
I2C_Type * |
base, |
|
|
void * |
i2cHandle |
|
) |
| |
- Parameters
-
base | I2C base pointer. |
i2cHandle | pointer to i2c_master_handle_t structure. |
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_slave_handle_t structure to store the transfer state. |
callback | pointer to user callback function. |
userData | user parameter passed to the callback function. |
status_t I2C_SlaveTransferNonBlocking |
( |
I2C_Type * |
base, |
|
|
i2c_slave_handle_t * |
handle, |
|
|
uint32_t |
eventMask |
|
) |
| |
Call this API after calling the I2C_SlaveInit() and I2C_SlaveTransferCreateHandle() to start processing transactions driven by an I2C master. The slave monitors the I2C bus and passes events to the callback that was passed into the call to I2C_SlaveTransferCreateHandle(). The callback is always invoked from the interrupt context.
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 kLPI2C_SlaveReceiveEvent events are always enabled and do not need to be included in the mask. Alternatively, 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
-
base | The I2C peripheral base address. |
handle | Pointer to #i2c_slave_handle_t structure which stores the transfer state. |
eventMask | Bit 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_Success | Slave transfers were successfully started. |
kStatus_I2C_Busy | Slave transfers have already been started on this handle. |
void I2C_SlaveTransferAbort |
( |
I2C_Type * |
base, |
|
|
i2c_slave_handle_t * |
handle |
|
) |
| |
- Note
- This API can be called at any time to stop slave for handling the bus events.
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_slave_handle_t structure which stores the transfer state. |
status_t I2C_SlaveTransferGetCount |
( |
I2C_Type * |
base, |
|
|
i2c_slave_handle_t * |
handle, |
|
|
size_t * |
count |
|
) |
| |
- Parameters
-
base | I2C base pointer. |
handle | pointer to i2c_slave_handle_t structure. |
count | Number of bytes transferred so far by the non-blocking transaction. |
- Return values
-
kStatus_InvalidArgument | count is Invalid. |
kStatus_Success | Successfully return the count. |
void I2C_SlaveTransferHandleIRQ |
( |
I2C_Type * |
base, |
|
|
void * |
i2cHandle |
|
) |
| |
- Parameters
-
base | I2C base pointer. |
i2cHandle | pointer to i2c_slave_handle_t structure which stores the transfer state |