i2c_pal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 NXP
3  * All rights reserved.
4  *
5  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
6  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
7  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
8  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
9  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
10  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
11  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
12  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
13  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
14  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
15  * THE POSSIBILITY OF SUCH DAMAGE.
16  */
17 
30 #ifndef SOURCES_I2C_PAL_H_
31 #define SOURCES_I2C_PAL_H_
32 
33 #include "i2c_pal_cfg.h"
34 #include "i2c_pal_mapping.h"
35 #include "status.h"
36 #include "callbacks.h"
37 
47 /*******************************************************************************
48  * Definitions
49  ******************************************************************************/
50 
55 typedef enum
56 {
60 
65 typedef struct
66 {
67  uint8_t sclPin;
68  uint8_t sdaPin;
70 
71 
72 #if defined(I2C_OVER_SWI2C)
73 
77 typedef struct
78 {
79  swi2c_pin_t *sclPin; /* SCL pin for SWI2C */
80  swi2c_pin_t *sdaPin; /* SDA pin for SWI2C */
81  swi2c_pin_t *sdaReadPin; /* SDA read pin for SWI2C */
82  swi2c_pin_t *sclReadPin; /* SCL read pin for SWI2C */
83 }extension_swi2c_for_i2c_t;
84 #endif
85 
90 typedef enum
91 {
98 
99 
104 typedef struct
105 {
106  uint16_t slaveAddress;
107  bool is10bitAddr;
108  uint32_t baudRate;
109  uint8_t dmaChannel1;
110  uint8_t dmaChannel2;
119  void *extension;
121 } i2c_master_t;
122 
127 typedef struct
128 {
129  uint16_t slaveAddress;
130  bool is10bitAddr;
134  uint8_t dmaChannel;
139 }i2c_slave_t;
140 
141 /*******************************************************************************
142  * API
143  ******************************************************************************/
144 
145 #if defined(__cplusplus)
146 extern "C" {
147 #endif
148 
159 status_t I2C_MasterInit(const i2c_instance_t * const instance, const i2c_master_t *config);
160 
174 status_t I2C_MasterSendData(const i2c_instance_t * const instance, const uint8_t *txBuff, uint32_t txSize, bool sendStop);
175 
189 status_t I2C_MasterSendDataBlocking(const i2c_instance_t * const instance, const uint8_t *txBuff, uint32_t txSize, bool sendStop, uint32_t timeout);
190 
204 status_t I2C_MasterReceiveData(const i2c_instance_t * const instance, uint8_t *rxBuff, uint32_t rxSize, bool sendStop);
205 
219 status_t I2C_MasterReceiveDataBlocking(const i2c_instance_t * const instance, uint8_t *rxBuff, uint32_t rxSize, bool sendStop, uint32_t timeout);
220 
230 status_t I2C_MasterSetSlaveAddress(const i2c_instance_t * const instance, const uint16_t address, const bool is10bitAddr);
231 
240 status_t I2C_MasterDeinit(const i2c_instance_t * const instance);
241 
251 
271 status_t I2C_SlaveInit(const i2c_instance_t * const instance, const i2c_slave_t *config);
272 
286 status_t I2C_SlaveSendData(const i2c_instance_t * const instance, const uint8_t *txBuff, uint32_t txSize);
287 
302 status_t I2C_SlaveSendDataBlocking(const i2c_instance_t * const instance, const uint8_t *txBuff, uint32_t txSize, uint32_t timeout);
303 
317 status_t I2C_SlaveReceiveData(const i2c_instance_t * const instance, uint8_t *rxBuff, uint32_t rxSize);
318 
333 status_t I2C_SlaveReceiveDataBlocking(const i2c_instance_t * const instance, uint8_t *rxBuff,uint32_t rxSize, uint32_t timeout);
334 
348 status_t I2C_SlaveSetRxBuffer(const i2c_instance_t * const instance, uint8_t *rxBuff, uint32_t rxSize);
349 
363 status_t I2C_SlaveSetTxBuffer(const i2c_instance_t * const instance, const uint8_t *txBuff, uint32_t txSize);
364 
373 status_t I2C_SlaveDeinit(const i2c_instance_t * const instance);
374 
385 status_t I2C_MasterGetTransferStatus(const i2c_instance_t * const instance, uint32_t *bytesRemaining);
386 
397 status_t I2C_SlaveGetTransferStatus(const i2c_instance_t * const instance, uint32_t *bytesRemaining);
398 
407 status_t I2C_MasterSetBaudRate(const i2c_instance_t * const instance, const i2c_master_t *config, uint32_t baudRate);
408 
417 status_t I2C_MasterGetBaudRate(const i2c_instance_t * const instance, uint32_t *baudRate);
418 
425 status_t I2C_MasterAbortTransfer(const i2c_instance_t * const instance);
426 
433 status_t I2C_SlaveAbortTransfer(const i2c_instance_t * const instance);
434 
436 #if defined(__cplusplus)
437 }
438 #endif
439 
442 #endif /* SOURCES_I2C_PAL_H_ */
443 
444 /*******************************************************************************
445  * EOF
446  ******************************************************************************/
447 
void * callbackParam
Definition: i2c_pal.h:118
status_t I2C_SlaveReceiveData(const i2c_instance_t *const instance, uint8_t *rxBuff, uint32_t rxSize)
Perform a non-blocking receive transaction on the I2C bus.
Definition: i2c_pal.c:1034
status_t I2C_MasterAbortTransfer(const i2c_instance_t *const instance)
Abort a non-blocking I2C Master transmission or reception.
Definition: i2c_pal.c:1388
void * extension
Definition: i2c_pal.h:119
status_t I2C_SlaveGetTransferStatus(const i2c_instance_t *const instance, uint32_t *bytesRemaining)
Return the current status of the I2C slave transfer.
Definition: i2c_pal.c:1340
status_t I2C_SlaveSendData(const i2c_instance_t *const instance, const uint8_t *txBuff, uint32_t txSize)
Perform a non-blocking send transaction on the I2C bus.
Definition: i2c_pal.c:934
i2c_pal_transfer_type_t
Defines the mechanism to update the rx or tx buffers Implements : i2c_pal_transfer_type_t_Class.
Definition: i2c_pal.h:55
status_t I2C_SlaveAbortTransfer(const i2c_instance_t *const instance)
Abort a non-blocking I2C slave transmission or reception.
Definition: i2c_pal.c:1441
status_t I2C_GetDefaultSlaveConfig(i2c_slave_t *config)
Gets the default configuration structure for slave.
Definition: i2c_pal.c:916
void * callbackParam
Definition: i2c_pal.h:137
i2c_master_callback_t callback
Definition: i2c_pal.h:114
status_t I2C_SlaveReceiveDataBlocking(const i2c_instance_t *const instance, uint8_t *rxBuff, uint32_t rxSize, uint32_t timeout)
Perform a blocking receive transaction on the I2C bus.
Definition: i2c_pal.c:1084
status_t I2C_SlaveSendDataBlocking(const i2c_instance_t *const instance, const uint8_t *txBuff, uint32_t txSize, uint32_t timeout)
Perform a blocking send transaction on the I2C bus.
Definition: i2c_pal.c:983
status_t I2C_MasterSendData(const i2c_instance_t *const instance, const uint8_t *txBuff, uint32_t txSize, bool sendStop)
Perform a non-blocking send transaction on the I2C bus.
Definition: i2c_pal.c:429
Defines the configuration structure for I2C slave Implements: i2c_slave_t_Class.
Definition: i2c_pal.h:127
i2c_operating_mode_t operatingMode
Definition: i2c_pal.h:132
status_t I2C_SlaveSetRxBuffer(const i2c_instance_t *const instance, uint8_t *rxBuff, uint32_t rxSize)
Provide a buffer for receiving data.
Definition: i2c_pal.c:1136
void(* i2c_master_callback_t)(i2c_master_event_t event, void *userData)
Definition: callbacks.h:70
status_t I2C_MasterSendDataBlocking(const i2c_instance_t *const instance, const uint8_t *txBuff, uint32_t txSize, bool sendStop, uint32_t timeout)
Perform a blocking send transaction on the I2C bus.
Definition: i2c_pal.c:486
status_t I2C_MasterInit(const i2c_instance_t *const instance, const i2c_master_t *config)
Initializes the I2C module in master mode.
Definition: i2c_pal.c:213
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:44
status_t I2C_MasterGetTransferStatus(const i2c_instance_t *const instance, uint32_t *bytesRemaining)
Return the current status of the I2C master transfer.
Definition: i2c_pal.c:1283
i2c_pal_transfer_type_t transferType
Definition: i2c_pal.h:112
Structure storing PAL instance information.
status_t I2C_GetDefaultMasterConfig(i2c_master_t *config)
Gets the default configuration structure for master.
Definition: i2c_pal.c:889
status_t I2C_MasterSetSlaveAddress(const i2c_instance_t *const instance, const uint16_t address, const bool is10bitAddr)
Set the slave address for the I2C communication.
Definition: i2c_pal.c:702
uint16_t slaveAddress
Definition: i2c_pal.h:106
i2c_operating_mode_t operatingMode
Definition: i2c_pal.h:113
status_t I2C_MasterReceiveDataBlocking(const i2c_instance_t *const instance, uint8_t *rxBuff, uint32_t rxSize, bool sendStop, uint32_t timeout)
Perform a blocking receive transaction on the I2C bus.
Definition: i2c_pal.c:592
Defines the configuration structure for I2C master Implements : i2c_master_t_Class.
Definition: i2c_pal.h:104
i2c_slave_callback_t callback
Definition: i2c_pal.h:136
uint8_t dmaChannel
Definition: i2c_pal.h:134
uint8_t dmaChannel1
Definition: i2c_pal.h:109
i2c_operating_mode_t
Defines the operation mode of the i2c pal Implements : i2c_operating_mode_t_Class.
Definition: i2c_pal.h:90
status_t I2C_MasterGetBaudRate(const i2c_instance_t *const instance, uint32_t *baudRate)
Get the master baud rate for the I2C communication.
Definition: i2c_pal.c:834
status_t I2C_SlaveSetTxBuffer(const i2c_instance_t *const instance, const uint8_t *txBuff, uint32_t txSize)
Provide a buffer for transmitting data.
Definition: i2c_pal.c:1184
status_t I2C_SlaveDeinit(const i2c_instance_t *const instance)
De-initializes the i2c slave module.
Definition: i2c_pal.c:1234
void(* i2c_slave_callback_t)(i2c_slave_event_t event, void *userData)
Definition: callbacks.h:67
status_t I2C_MasterReceiveData(const i2c_instance_t *const instance, uint8_t *rxBuff, uint32_t rxSize, bool sendStop)
Perform a non-blocking receive transaction on the I2C bus.
Definition: i2c_pal.c:540
uint32_t baudRate
Definition: i2c_pal.h:108
bool is10bitAddr
Definition: i2c_pal.h:130
bool is10bitAddr
Definition: i2c_pal.h:107
status_t I2C_SlaveInit(const i2c_instance_t *const instance, const i2c_slave_t *config)
Initializes the I2C module in slave mode.
Definition: i2c_pal.c:358
uint16_t slaveAddress
Definition: i2c_pal.h:129
status_t I2C_MasterSetBaudRate(const i2c_instance_t *const instance, const i2c_master_t *config, uint32_t baudRate)
Set the master baud rate for the I2C communication.
Definition: i2c_pal.c:755
status_t I2C_MasterDeinit(const i2c_instance_t *const instance)
De-initializes the I2C master module.
Definition: i2c_pal.c:642
Defines the extension structure for the I2C over FLEXIO Implements : extension_flexio_for_i2c_t_Class...
Definition: i2c_pal.h:65
bool slaveListening
Definition: i2c_pal.h:131
i2c_pal_transfer_type_t transferType
Definition: i2c_pal.h:133
uint8_t dmaChannel2
Definition: i2c_pal.h:110