33 #include "fsl_common.h" 45 #define FSL_I2C_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) 47 #if (defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT || \ 48 defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT) 49 #define I2C_HAS_STOP_DETECT 84 #ifdef I2C_HAS_STOP_DETECT 88 #if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT 98 #if defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT 102 #if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT 108 typedef enum _i2c_direction
115 typedef enum _i2c_slave_address_mode
140 typedef enum _i2c_slave_transfer_event
148 #if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT 155 #if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT 162 typedef struct _i2c_master_config
165 #if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION 168 #if defined(FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF) && FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF 176 typedef struct _i2c_slave_config
181 #if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION 195 i2c_master_handle_t *handle,
203 typedef struct _i2c_master_transfer
225 typedef struct _i2c_slave_transfer
252 #if defined(__cplusplus) 368 base->C1 |= I2C_C1_IICEN_MASK;
372 base->C1 &= ~I2C_C1_IICEN_MASK;
418 #if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT 422 base->FLT |= (uint8_t)(statusMask >> 8U);
426 #ifdef I2C_HAS_STOP_DETECT 430 base->FLT |= (uint8_t)(statusMask >> 8U);
434 base->S = (uint8_t)statusMask;
490 #if defined(FSL_FEATURE_I2C_HAS_DMA_SUPPORT) && FSL_FEATURE_I2C_HAS_DMA_SUPPORT 501 base->C1 |= I2C_C1_DMAEN_MASK;
505 base->C1 &= ~I2C_C1_DMAEN_MASK;
520 return (uint32_t)(&(base->D));
651 i2c_master_handle_t *handle,
711 i2c_slave_handle_t *handle,
771 #if defined(__cplusplus) Definition: fsl_i2c.h:117
I2C master user config.
Definition: fsl_i2c.h:162
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.
Definition: fsl_i2c.c:747
status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *xfer)
Performs a master polling transfer on the I2C bus.
Definition: fsl_i2c.c:806
i2c_slave_transfer_t transfer
Definition: fsl_i2c.h:242
status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint32_t eventMask)
Start accepting slave transfers.
Definition: fsl_i2c.c:1208
uint8_t subaddressSize
Definition: fsl_i2c.h:209
void I2C_MasterInit(I2C_Type *base, const i2c_master_config_t *masterConfig, uint32_t srcClock_Hz)
Initialize the I2C peripheral, call this API to ungate the i2c clock and configure the I2C with maste...
Definition: fsl_i2c.c:412
bool enableHighDrive
Definition: fsl_i2c.h:166
_i2c_status
I2C status return codes.
Definition: fsl_i2c.h:53
static void I2C_EnableDMA(I2C_Type *base, bool enable)
Enables/disables the I2C DMA interrupt.
Definition: fsl_i2c.h:497
void(* i2c_master_transfer_callback_t)(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData)
I2C master transfer callback typedef.
Definition: fsl_i2c.h:194
Definition: fsl_i2c.h:126
void I2C_MasterDeinit(I2C_Type *base)
De-initialize the I2C master peripheral, call thi API will gate the i2c clock, so the I2C master modu...
Definition: fsl_i2c.c:462
bool enableBaudRateCtl
Definition: fsl_i2c.h:184
i2c_direction_t direction
Definition: fsl_i2c.h:207
I2C master handle structure.
Definition: fsl_i2c.h:215
Definition: fsl_i2c.h:103
i2c_master_transfer_callback_t completionCallback
Definition: fsl_i2c.h:220
status_t completionStatus
Definition: fsl_i2c.h:230
bool enableWakeUp
Definition: fsl_i2c.h:180
static void I2C_Enable(I2C_Type *base, bool enable)
Enable or disables the I2C peripheral operation.
Definition: fsl_i2c.h:364
Definition: fsl_i2c.h:145
void I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle)
Abort a interrupt non-blocking transfer in a early time.
Definition: fsl_i2c.c:1005
void * userData
Definition: fsl_i2c.h:221
status_t I2C_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count)
Get slave transfer remaining bytes during a interrupt non-blocking transfer.
Definition: fsl_i2c.c:1258
Definition: fsl_common.h:76
Definition: fsl_i2c.h:125
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.
Definition: fsl_i2c.c:693
uint32_t eventMask
Definition: fsl_i2c.h:243
status_t I2C_MasterStart(I2C_Type *base, uint8_t address, i2c_direction_t direction)
Sends a START on the I2C bus.
Definition: fsl_i2c.c:581
bool isBusy
Definition: fsl_i2c.h:241
bool enableStopHold
Definition: fsl_i2c.h:169
status_t I2C_MasterRepeatedStart(I2C_Type *base, uint8_t address, i2c_direction_t direction)
Sends a REPEATED START on the I2C bus.
Definition: fsl_i2c.c:608
I2C slave handle structure.
Definition: fsl_i2c.h:239
i2c_master_transfer_t transfer
Definition: fsl_i2c.h:217
i2c_slave_transfer_callback_t callback
Definition: fsl_i2c.h:244
void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle)
Slave interrupt handler.
Definition: fsl_i2c.c:1280
uint16_t slaveAddress
Definition: fsl_i2c.h:185
i2c_slave_address_mode_t addressingMode
Definition: fsl_i2c.h:187
uint32_t subaddress
Definition: fsl_i2c.h:208
Definition: fsl_i2c.h:147
uint32_t flags
Definition: fsl_i2c.h:205
i2c_slave_transfer_event_t event
Definition: fsl_i2c.h:227
Definition: fsl_i2c.h:124
uint8_t state
Definition: fsl_i2c.h:219
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.
Definition: fsl_i2c.c:978
Definition: fsl_i2c.h:110
void I2C_MasterGetDefaultConfig(i2c_master_config_t *masterConfig)
Set the I2C master configuration structure to default values.
Definition: fsl_i2c.c:471
i2c_slave_transfer_event_t
Set of events sent to the callback for nonblocking slave transfers.
Definition: fsl_i2c.h:140
static void I2C_SlaveClearStatusFlags(I2C_Type *base, uint32_t statusMask)
Clears the I2C status flag state.
Definition: fsl_i2c.h:450
void I2C_MasterSetBaudRate(I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz)
Sets the I2C master transfer baudrate.
Definition: fsl_i2c.c:539
I2C slave transfer structure.
Definition: fsl_i2c.h:225
uint32_t baudRate_Bps
Definition: fsl_i2c.h:171
volatile size_t dataSize
Definition: fsl_i2c.h:211
size_t transferSize
Definition: fsl_i2c.h:218
uint32_t I2C_MasterGetStatusFlags(I2C_Type *base)
Gets the I2C status flags.
Definition: fsl_i2c.c:670
I2C slave user config.
Definition: fsl_i2c.h:176
Definition: fsl_i2c.h:111
void I2C_MasterTransferCreateHandle(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_callback_t callback, void *userData)
Init the I2C handle which is used in transactional functions.
Definition: fsl_i2c.c:952
Definition: fsl_i2c.h:143
i2c_slave_address_mode_t
Addressing mode.
Definition: fsl_i2c.h:115
size_t transferredCount
Definition: fsl_i2c.h:232
void I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *rxBuff, size_t rxSize)
Performs a polling receive transaction on the I2C bus.
Definition: fsl_i2c.c:1154
static uint32_t I2C_GetDataRegAddr(I2C_Type *base)
Get I2C tx/rx data register address This API is used to provide transfer address for I2C DMA transfer...
Definition: fsl_i2c.h:518
bool enableSlave
Definition: fsl_i2c.h:178
_i2c_master_transfer_flags
I2C transfer control flag.
Definition: fsl_i2c.h:122
uint8_t *volatile data
Definition: fsl_i2c.h:210
uint8_t slaveAddress
Definition: fsl_i2c.h:206
Definition: fsl_i2c.h:154
uint16_t upperAddress
Definition: fsl_i2c.h:186
void I2C_DisableInterrupts(I2C_Type *base, uint32_t mask)
Disable I2C interrupt requests.
Definition: fsl_i2c.c:517
_i2c_interrupt_enable
I2C feature interrupt source.
Definition: fsl_i2c.h:94
void I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle)
Abort slave transfer.
Definition: fsl_i2c.c:1241
status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count)
Get master transfer status during a interrupt non-blocking transfer.
Definition: fsl_i2c.c:1016
status_t I2C_MasterStop(I2C_Type *base)
Sends a STOP signal on the I2C bus.
Definition: fsl_i2c.c:649
bool enableGeneralCall
Definition: fsl_i2c.h:179
i2c_direction_t
Direction of master and slave transfers.
Definition: fsl_i2c.h:108
bool enableMaster
Definition: fsl_i2c.h:164
static void I2C_MasterClearStatusFlags(I2C_Type *base, uint32_t statusMask)
Clears the I2C status flag state.
Definition: fsl_i2c.h:415
static uint32_t I2C_SlaveGetStatusFlags(I2C_Type *base)
Gets the I2C status flags.
Definition: fsl_i2c.h:397
Definition: fsl_i2c.h:151
void I2C_EnableInterrupts(I2C_Type *base, uint32_t mask)
Enable I2C interrupt requests.
Definition: fsl_i2c.c:495
void I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *slaveConfig)
Initialize the I2C peripheral, call this API to ungate the i2c clock and initializes the I2C with sla...
Definition: fsl_i2c.c:1073
Definition: fsl_i2c.h:149
Definition: fsl_i2c.h:127
Definition: fsl_i2c.h:118
_i2c_flags
I2C peripheral flags.
Definition: fsl_i2c.h:74
int32_t status_t
Type used for all status and error return values.
Definition: fsl_common.h:121
I2C master transfer structure.
Definition: fsl_i2c.h:203
void(* i2c_slave_transfer_callback_t)(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData)
I2C slave transfer callback typedef.
Definition: fsl_i2c.h:236
void I2C_SlaveDeinit(I2C_Type *base)
De-initialize the I2C slave peripheral, call thi API will gate the i2c clock, so the I2C slave module...
Definition: fsl_i2c.c:1115
uint8_t glitchFilterWidth
Definition: fsl_i2c.h:172
void I2C_SlaveTransferCreateHandle(I2C_Type *base, i2c_slave_handle_t *handle, i2c_slave_transfer_callback_t callback, void *userData)
Init the I2C handle which is used in transcational functions.
Definition: fsl_i2c.c:1182
Definition: fsl_i2c.h:142
status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *txBuff, size_t txSize)
Performs a polling send transaction on the I2C bus.
Definition: fsl_i2c.c:1149
void I2C_MasterTransferHandleIRQ(I2C_Type *base, void *i2cHandle)
Master interrupt handler.
Definition: fsl_i2c.c:1030
void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *slaveConfig)
Set the I2C slave configuration structure to default values.
Definition: fsl_i2c.c:1124