Kinetis Bootloader  2.0.0
Common bootloader for Kinetis devices
fsl_lpi2c.h
1 /*
2  * Copyright (c) 2015, Freescale Semiconductor, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without modification,
5  * are permitted provided that the following conditions are met:
6  *
7  * o Redistributions of source code must retain the above copyright notice, this list
8  * of conditions and the following disclaimer.
9  *
10  * o Redistributions in binary form must reproduce the above copyright notice, this
11  * list of conditions and the following disclaimer in the documentation and/or
12  * other materials provided with the distribution.
13  *
14  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from this
16  * software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 #ifndef _FSL_LPI2C_H_
30 #define _FSL_LPI2C_H_
31 
32 #include <stddef.h>
33 #include "fsl_device_registers.h"
34 #include "fsl_common.h"
35 
36 /*******************************************************************************
37  * Definitions
38  ******************************************************************************/
39 
48 #define FSL_LPI2C_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
49 
52 {
60  MAKE_STATUS(kStatusGroup_LPI2C, 6),
62  MAKE_STATUS(kStatusGroup_LPI2C, 7),
64 };
65 
91 {
92  kLPI2C_MasterTxReadyFlag = LPI2C_MSR_TDF_MASK,
93  kLPI2C_MasterRxReadyFlag = LPI2C_MSR_RDF_MASK,
94  kLPI2C_MasterEndOfPacketFlag = LPI2C_MSR_EPF_MASK,
95  kLPI2C_MasterStopDetectFlag = LPI2C_MSR_SDF_MASK,
96  kLPI2C_MasterNackDetectFlag = LPI2C_MSR_NDF_MASK,
97  kLPI2C_MasterArbitrationLostFlag = LPI2C_MSR_ALF_MASK,
98  kLPI2C_MasterFifoErrFlag = LPI2C_MSR_FEF_MASK,
99  kLPI2C_MasterPinLowTimeoutFlag = LPI2C_MSR_PLTF_MASK,
100  kLPI2C_MasterDataMatchFlag = LPI2C_MSR_DMF_MASK,
101  kLPI2C_MasterBusyFlag = LPI2C_MSR_MBF_MASK,
102  kLPI2C_MasterBusBusyFlag = LPI2C_MSR_BBF_MASK
103 };
104 
106 typedef enum _lpi2c_direction {
110 
112 typedef enum _lpi2c_master_pin_config {
118  0x4U,
120  0x5U,
122  0x6U,
125 
127 typedef enum _lpi2c_host_request_source {
131 
133 typedef enum _lpi2c_host_request_polarity {
137 
147 typedef struct _lpi2c_master_config
148 {
150  bool enableDoze;
151  bool debugEnable;
152  bool ignoreAck;
154  uint32_t baudRate_Hz;
155  uint32_t busIdleTimeout_ns;
156  uint32_t pinLowTimeout_ns;
159  struct
160  {
161  bool enable;
164  } hostRequest;
166 
168 typedef enum _lpi2c_data_match_config_mode {
173  0x4U,
175  0x5U,
177  0x6U,
179  0x7U
181 
183 typedef struct _lpi2c_match_config
184 {
187  uint32_t match0;
188  uint32_t match1;
190 
191 /* Forward declaration of the transfer descriptor and handle typedefs. */
192 typedef struct _lpi2c_master_transfer lpi2c_master_transfer_t;
193 typedef struct _lpi2c_master_handle lpi2c_master_handle_t;
194 
205 typedef void (*lpi2c_master_transfer_callback_t)(LPI2C_Type *base,
206  lpi2c_master_handle_t *handle,
207  status_t completionStatus,
208  void *userData);
209 
217 {
222 };
223 
230 {
231  uint32_t flags;
233  uint16_t slaveAddress;
235  uint32_t subaddress;
236  size_t subaddressSize;
237  void *data;
238  size_t dataSize;
239 };
240 
246 {
247  uint8_t state;
248  uint16_t remainingBytes;
249  uint8_t *buf;
250  uint16_t commandBuffer[7];
251  lpi2c_master_transfer_t transfer;
253  void *userData;
254 };
255 
278 {
279  kLPI2C_SlaveTxReadyFlag = LPI2C_SSR_TDF_MASK,
280  kLPI2C_SlaveRxReadyFlag = LPI2C_SSR_RDF_MASK,
281  kLPI2C_SlaveAddressValidFlag = LPI2C_SSR_AVF_MASK,
282  kLPI2C_SlaveTransmitAckFlag = LPI2C_SSR_TAF_MASK,
283  kLPI2C_SlaveRepeatedStartDetectFlag = LPI2C_SSR_RSF_MASK,
284  kLPI2C_SlaveStopDetectFlag = LPI2C_SSR_SDF_MASK,
285  kLPI2C_SlaveBitErrFlag = LPI2C_SSR_BEF_MASK,
286  kLPI2C_SlaveFifoErrFlag = LPI2C_SSR_FEF_MASK,
287  kLPI2C_SlaveAddressMatch0Flag = LPI2C_SSR_AM0F_MASK,
288  kLPI2C_SlaveAddressMatch1Flag = LPI2C_SSR_AM1F_MASK,
289  kLPI2C_SlaveGeneralCallFlag = LPI2C_SSR_GCF_MASK,
290  kLPI2C_SlaveBusyFlag = LPI2C_SSR_SBF_MASK,
291  kLPI2C_SlaveBusBusyFlag = LPI2C_SSR_BBF_MASK,
292 };
293 
295 typedef enum _lpi2c_slave_address_match {
300 
310 typedef struct _lpi2c_slave_config
311 {
312  bool enableSlave;
313  uint8_t address0;
314  uint8_t address1;
319  struct
320  {
321  bool enableAck;
327  bool enableTx;
329  bool enableRx;
331  bool enableAddress;
332  } sclStall;
333  bool ignoreAck;
337  uint32_t dataValidDelay_ns;
338  uint32_t clockHoldTime_ns;
340 
351 typedef enum _lpi2c_slave_transfer_event {
365 
367 typedef struct _lpi2c_slave_transfer
368 {
370  uint8_t receivedAddress;
371  uint8_t *data;
372  size_t dataSize;
377 
378 /* Forward declaration. */
379 typedef struct _lpi2c_slave_handle lpi2c_slave_handle_t;
380 
391 typedef void (*lpi2c_slave_transfer_callback_t)(LPI2C_Type *base, lpi2c_slave_transfer_t *transfer, void *userData);
392 
398 {
400  bool isBusy;
401  bool wasTransmit;
402  uint32_t eventMask;
403  uint32_t transferredCount;
405  void *userData;
406 };
407 
410 /*******************************************************************************
411  * API
412  ******************************************************************************/
413 
414 #if defined(__cplusplus)
415 extern "C" {
416 #endif
417 
425 
451 
465 void LPI2C_MasterInit(LPI2C_Type *base, const lpi2c_master_config_t *masterConfig, uint32_t sourceClock_Hz);
466 
475 void LPI2C_MasterDeinit(LPI2C_Type *base);
476 
483 void LPI2C_MasterConfigureDataMatch(LPI2C_Type *base, const lpi2c_data_match_config_t *config);
484 
492 static inline void LPI2C_MasterReset(LPI2C_Type *base)
493 {
494  base->MCR = LPI2C_MCR_RST_MASK;
495  base->MCR = 0;
496 }
497 
504 static inline void LPI2C_MasterEnable(LPI2C_Type *base, bool enable)
505 {
506  base->MCR = (base->MCR & ~LPI2C_MCR_MEN_MASK) | LPI2C_MCR_MEN(enable);
507 }
508 
513 
526 static inline uint32_t LPI2C_MasterGetStatusFlags(LPI2C_Type *base)
527 {
528  return base->MSR;
529 }
530 
551 static inline void LPI2C_MasterClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
552 {
553  base->MSR = statusMask;
554 }
555 
560 
571 static inline void LPI2C_MasterEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
572 {
573  base->MIER |= interruptMask;
574 }
575 
586 static inline void LPI2C_MasterDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
587 {
588  base->MIER &= ~interruptMask;
589 }
590 
598 static inline uint32_t LPI2C_MasterGetEnabledInterrupts(LPI2C_Type *base)
599 {
600  return base->MIER;
601 }
602 
607 
615 static inline void LPI2C_MasterEnableDMA(LPI2C_Type *base, bool enableTx, bool enableRx)
616 {
617  base->MDER = LPI2C_MDER_TDDE(enableTx) | LPI2C_MDER_RDDE(enableRx);
618 }
619 
626 static inline uint32_t LPI2C_MasterGetTxFifoAddress(LPI2C_Type *base)
627 {
628  return (uint32_t)&base->MTDR;
629 }
630 
637 static inline uint32_t LPI2C_MasterGetRxFifoAddress(LPI2C_Type *base)
638 {
639  return (uint32_t)&base->MRDR;
640 }
641 
646 
658 static inline void LPI2C_MasterSetWatermarks(LPI2C_Type *base, size_t txWords, size_t rxWords)
659 {
660  base->MFCR = LPI2C_MFCR_TXWATER(txWords) | LPI2C_MFCR_RXWATER(rxWords);
661 }
662 
672 static inline void LPI2C_MasterGetFifoCounts(LPI2C_Type *base, size_t *rxCount, size_t *txCount)
673 {
674  if (txCount)
675  {
676  *txCount = (base->MFSR & LPI2C_MFSR_TXCOUNT_MASK) >> LPI2C_MFSR_TXCOUNT_SHIFT;
677  }
678  if (rxCount)
679  {
680  *rxCount = (base->MFSR & LPI2C_MFSR_RXCOUNT_MASK) >> LPI2C_MFSR_RXCOUNT_SHIFT;
681  }
682 }
683 
688 
699 void LPI2C_MasterSetBaudRate(LPI2C_Type *base, uint32_t sourceClock_Hz, uint32_t baudRate_Hz);
700 
710 static inline bool LPI2C_MasterGetBusIdleState(LPI2C_Type *base)
711 {
712  return (base->MSR & LPI2C_MSR_BBF_MASK) >> LPI2C_MSR_BBF_SHIFT;
713 }
714 
730 status_t LPI2C_MasterStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir);
731 
748 static inline status_t LPI2C_MasterRepeatedStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir)
749 {
750  return LPI2C_MasterStart(base, address, dir);
751 }
752 
770 status_t LPI2C_MasterSend(LPI2C_Type *base, const void *txBuff, size_t txSize);
771 
785 status_t LPI2C_MasterReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize);
786 
800 status_t LPI2C_MasterStop(LPI2C_Type *base);
801 
806 
819 void LPI2C_MasterCreateHandle(LPI2C_Type *base,
820  lpi2c_master_handle_t *handle,
822  void *userData);
823 
835  lpi2c_master_handle_t *handle,
836  lpi2c_master_transfer_t *transfer);
837 
846 status_t LPI2C_MasterGetTransferCount(LPI2C_Type *base, lpi2c_master_handle_t *handle, size_t *count);
847 
859 void LPI2C_MasterAbortTransfer(LPI2C_Type *base, lpi2c_master_handle_t *handle);
860 
865 
873 void LPI2C_MasterHandleInterrupt(LPI2C_Type *base, lpi2c_master_handle_t *handle);
874 
886 
919 
932 void LPI2C_SlaveInit(LPI2C_Type *base, const lpi2c_slave_config_t *slaveConfig, uint32_t sourceClock_Hz);
933 
942 void LPI2C_SlaveDeinit(LPI2C_Type *base);
943 
949 static inline void LPI2C_SlaveReset(LPI2C_Type *base)
950 {
951  base->SCR = LPI2C_SCR_RST_MASK;
952  base->SCR = 0;
953 }
954 
961 static inline void LPI2C_SlaveEnable(LPI2C_Type *base, bool enable)
962 {
963  base->SCR = (base->SCR & ~LPI2C_SCR_SEN_MASK) | LPI2C_SCR_SEN(enable);
964 }
965 
970 
983 static inline uint32_t LPI2C_SlaveGetStatusFlags(LPI2C_Type *base)
984 {
985  return base->SSR;
986 }
987 
1005 static inline void LPI2C_SlaveClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
1006 {
1007  base->SSR = statusMask;
1008 }
1009 
1014 
1025 static inline void LPI2C_SlaveEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
1026 {
1027  base->SIER |= interruptMask;
1028 }
1029 
1040 static inline void LPI2C_SlaveDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
1041 {
1042  base->SIER &= ~interruptMask;
1043 }
1044 
1051 static inline uint32_t LPI2C_SlaveGetEnabledInterrupts(LPI2C_Type *base)
1052 {
1053  return base->SIER;
1054 }
1055 
1060 
1070 static inline void LPI2C_SlaveEnableDMA(LPI2C_Type *base, bool enableAddressValid, bool enableRx, bool enableTx)
1071 {
1072  base->SDER = (base->SDER & ~(LPI2C_SDER_AVDE_MASK | LPI2C_SDER_RDDE_MASK | LPI2C_SDER_TDDE_MASK)) |
1073  LPI2C_SDER_AVDE(enableAddressValid) | LPI2C_SDER_RDDE(enableRx) | LPI2C_SDER_TDDE(enableTx);
1074 }
1075 
1080 
1090 static inline bool LPI2C_SlaveGetBusIdleState(LPI2C_Type *base)
1091 {
1092  return (base->SSR & LPI2C_SSR_BBF_MASK) >> LPI2C_SSR_BBF_SHIFT;
1093 }
1094 
1105 static inline void LPI2C_SlaveTransmitAck(LPI2C_Type *base, bool ackOrNack)
1106 {
1107  base->STAR = LPI2C_STAR_TXNACK(!ackOrNack);
1108 }
1109 
1119 static inline uint32_t LPI2C_SlaveGetReceivedAddress(LPI2C_Type *base)
1120 {
1121  return base->SASR & LPI2C_SASR_RADDR_MASK;
1122 }
1123 
1133 status_t LPI2C_SlaveSend(LPI2C_Type *base, const void *txBuff, size_t txSize, size_t *actualTxSize);
1134 
1144 status_t LPI2C_SlaveReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize, size_t *actualRxSize);
1145 
1150 
1163 void LPI2C_SlaveCreateHandle(LPI2C_Type *base,
1164  lpi2c_slave_handle_t *handle,
1166  void *userData);
1167 
1192 status_t LPI2C_SlaveTransferNonBlocking(LPI2C_Type *base, lpi2c_slave_handle_t *handle, uint32_t eventMask);
1193 
1203 status_t LPI2C_SlaveGetTransferCount(LPI2C_Type *base, lpi2c_slave_handle_t *handle, size_t *count);
1204 
1213 void LPI2C_SlaveAbortTransfer(LPI2C_Type *base, lpi2c_slave_handle_t *handle);
1214 
1219 
1227 void LPI2C_SlaveHandleInterrupt(LPI2C_Type *base, lpi2c_slave_handle_t *handle);
1228 
1233 #if defined(__cplusplus)
1234 }
1235 #endif
1236 
1237 #endif /* _FSL_LPI2C_H_ */
status_t LPI2C_SlaveGetTransferCount(LPI2C_Type *base, lpi2c_slave_handle_t *handle, size_t *count)
Get slave transfer status during a non-blocking transfer.
Definition: fsl_lpi2c.c:1329
Definition: fsl_lpi2c.h:357
status_t LPI2C_MasterStop(LPI2C_Type *base)
Sends a STOP signal on the I2C bus.
Definition: fsl_lpi2c.c:540
Definition: fsl_lpi2c.h:178
bool debugEnable
Definition: fsl_lpi2c.h:151
void LPI2C_MasterAbortTransfer(LPI2C_Type *base, lpi2c_master_handle_t *handle)
Terminates a non-blocking LPI2C master transmission early.
Definition: fsl_lpi2c.c:1001
status_t LPI2C_SlaveTransferNonBlocking(LPI2C_Type *base, lpi2c_slave_handle_t *handle, uint32_t eventMask)
Start accepting slave transfers.
Definition: fsl_lpi2c.c:1286
Definition: fsl_lpi2c.h:97
status_t completionStatus
Definition: fsl_lpi2c.h:373
lpi2c_host_request_source_t
LPI2C master host request selection.
Definition: fsl_lpi2c.h:127
lpi2c_data_match_config_mode_t
LPI2C master data match configuration modes.
Definition: fsl_lpi2c.h:168
static void LPI2C_SlaveReset(LPI2C_Type *base)
Perform software reset of the LPI2C slave peripheral.
Definition: fsl_lpi2c.h:949
uint32_t subaddress
Definition: fsl_lpi2c.h:235
static uint32_t LPI2C_SlaveGetStatusFlags(LPI2C_Type *base)
Gets the LPI2C slave status flags.
Definition: fsl_lpi2c.h:983
static bool LPI2C_SlaveGetBusIdleState(LPI2C_Type *base)
Return whether the bus is idle.
Definition: fsl_lpi2c.h:1090
LPI2C slave transfer structure.
Definition: fsl_lpi2c.h:367
void(* lpi2c_slave_transfer_callback_t)(LPI2C_Type *base, lpi2c_slave_transfer_t *transfer, void *userData)
Slave event callback function pointer type.
Definition: fsl_lpi2c.h:391
uint32_t match1
Definition: fsl_lpi2c.h:188
Definition: fsl_lpi2c.h:99
bool filterEnable
Definition: fsl_lpi2c.h:317
Definition: fsl_lpi2c.h:134
static void LPI2C_MasterReset(LPI2C_Type *base)
Perform software reset.
Definition: fsl_lpi2c.h:492
static status_t LPI2C_MasterRepeatedStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir)
Sends a repeated START signal and slave address on the I2C bus.
Definition: fsl_lpi2c.h:748
lpi2c_slave_transfer_callback_t callback
Definition: fsl_lpi2c.h:404
Definition: fsl_lpi2c.h:102
Definition: fsl_lpi2c.h:58
void LPI2C_SlaveDeinit(LPI2C_Type *base)
Deinitializes the LPI2C slave peripheral.
Definition: fsl_lpi2c.c:1106
Definition: fsl_lpi2c.h:107
Definition: fsl_lpi2c.h:129
uint32_t baudRate_Hz
Definition: fsl_lpi2c.h:154
Definition: fsl_lpi2c.h:114
Definition: fsl_lpi2c.h:96
bool enableDoze
Definition: fsl_lpi2c.h:150
static uint32_t LPI2C_MasterGetTxFifoAddress(LPI2C_Type *base)
Gets LPI2C master transmit data register address for DMA transfer.
Definition: fsl_lpi2c.h:626
Definition: fsl_lpi2c.h:98
uint32_t clockHoldTime_ns
Definition: fsl_lpi2c.h:338
void LPI2C_MasterInit(LPI2C_Type *base, const lpi2c_master_config_t *masterConfig, uint32_t sourceClock_Hz)
Initializes the LPI2C master peripheral.
Definition: fsl_lpi2c.c:348
lpi2c_slave_transfer_event_t
Set of events sent to the callback for nonblocking slave transfers.
Definition: fsl_lpi2c.h:351
Definition: fsl_lpi2c.h:57
Definition: fsl_lpi2c.h:279
static void LPI2C_SlaveTransmitAck(LPI2C_Type *base, bool ackOrNack)
Transmit either an Ack or Nak on the I2C bus in response to a byte from the master.
Definition: fsl_lpi2c.h:1105
bool enableReceivedAddressRead
Definition: fsl_lpi2c.h:334
void LPI2C_SlaveGetDefaultConfig(lpi2c_slave_config_t *slaveConfig)
Provides a default configuration for the LPI2C slave peripheral.
Definition: fsl_lpi2c.c:1052
bool isBusy
Definition: fsl_lpi2c.h:400
Definition: fsl_lpi2c.h:353
bool rxDataMatchOnly
Definition: fsl_lpi2c.h:186
size_t dataSize
Definition: fsl_lpi2c.h:238
status_t LPI2C_MasterTransferNonBlocking(LPI2C_Type *base, lpi2c_master_handle_t *handle, lpi2c_master_transfer_t *transfer)
Performs a non-blocking transaction on the I2C bus.
Definition: fsl_lpi2c.c:898
Definition: fsl_lpi2c.h:121
void LPI2C_SlaveAbortTransfer(LPI2C_Type *base, lpi2c_slave_handle_t *handle)
Abort slave non-blocking transfers.
Definition: fsl_lpi2c.c:1351
void(* lpi2c_master_transfer_callback_t)(LPI2C_Type *base, lpi2c_master_handle_t *handle, status_t completionStatus, void *userData)
Master completion callback function pointer type.
Definition: fsl_lpi2c.h:205
void LPI2C_MasterDeinit(LPI2C_Type *base)
Deinitializes the LPI2C master peripheral.
Definition: fsl_lpi2c.c:417
Definition: fsl_lpi2c.h:170
lpi2c_slave_transfer_t transfer
Definition: fsl_lpi2c.h:399
Definition: fsl_lpi2c.h:56
Definition: fsl_lpi2c.h:123
Definition: fsl_lpi2c.h:94
static void LPI2C_MasterEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
Enable LPI2C master interrupt requests.
Definition: fsl_lpi2c.h:571
lpi2c_slave_address_match_t addressMatchMode
Definition: fsl_lpi2c.h:315
lpi2c_master_pin_config_t
LPI2C pin configuration.
Definition: fsl_lpi2c.h:112
status_t LPI2C_SlaveSend(LPI2C_Type *base, const void *txBuff, size_t txSize, size_t *actualTxSize)
Performs a polling send transfer on the I2C bus.
Definition: fsl_lpi2c.c:1149
void LPI2C_SlaveCreateHandle(LPI2C_Type *base, lpi2c_slave_handle_t *handle, lpi2c_slave_transfer_callback_t callback, void *userData)
Create a new handle for the LPI2C slave non-blocking APIs.
Definition: fsl_lpi2c.c:1253
static void LPI2C_SlaveEnable(LPI2C_Type *base, bool enable)
Enables or disables the LPI2C module as slave.
Definition: fsl_lpi2c.h:961
Definition: fsl_lpi2c.h:61
Definition: fsl_lpi2c.h:119
lpi2c_direction_t
Direction of master and slave transfers.
Definition: fsl_lpi2c.h:106
Definition: fsl_lpi2c.h:171
lpi2c_host_request_polarity_t
LPI2C master host request pin polarity configuration.
Definition: fsl_lpi2c.h:133
bool wasTransmit
Definition: fsl_lpi2c.h:401
Definition: fsl_lpi2c.h:219
_lpi2c_status
LPI2C status return codes.
Definition: fsl_lpi2c.h:51
uint8_t sclGlitchFilterWidth_ns
Definition: fsl_lpi2c.h:158
lpi2c_slave_address_match_t
LPI2C slave address match options.
Definition: fsl_lpi2c.h:295
Definition: fsl_lpi2c.h:59
size_t dataSize
Definition: fsl_lpi2c.h:372
Driver handle for master non-blocking APIs.
Definition: fsl_lpi2c.h:245
uint8_t receivedAddress
Definition: fsl_lpi2c.h:370
uint32_t busIdleTimeout_ns
Definition: fsl_lpi2c.h:155
uint8_t * data
Definition: fsl_lpi2c.h:371
Definition: fsl_lpi2c.h:176
Definition: fsl_lpi2c.h:115
uint8_t address0
Definition: fsl_lpi2c.h:313
static uint32_t LPI2C_SlaveGetEnabledInterrupts(LPI2C_Type *base)
Returns the set of currently enabled LPI2C slave interrupt requests.
Definition: fsl_lpi2c.h:1051
void LPI2C_MasterCreateHandle(LPI2C_Type *base, lpi2c_master_handle_t *handle, lpi2c_master_transfer_callback_t callback, void *userData)
Create a new handle for the LPI2C master non-blocking APIs.
Definition: fsl_lpi2c.c:644
Definition: fsl_lpi2c.h:220
status_t LPI2C_SlaveReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize, size_t *actualRxSize)
Performs a polling receive transfer on the I2C bus.
Definition: fsl_lpi2c.c:1201
uint32_t sdaGlitchFilterWidth_ns
Definition: fsl_lpi2c.h:335
lpi2c_direction_t direction
Definition: fsl_lpi2c.h:234
static void LPI2C_SlaveEnableDMA(LPI2C_Type *base, bool enableAddressValid, bool enableRx, bool enableTx)
Enable or disable LPI2C slave peripheral DMA requests.
Definition: fsl_lpi2c.h:1070
Definition: fsl_lpi2c.h:298
static bool LPI2C_MasterGetBusIdleState(LPI2C_Type *base)
Return whether the bus is idle.
Definition: fsl_lpi2c.h:710
static void LPI2C_MasterGetFifoCounts(LPI2C_Type *base, size_t *rxCount, size_t *txCount)
Get the current number of words in the LPI2C master FIFOs.
Definition: fsl_lpi2c.h:672
bool enableMaster
Definition: fsl_lpi2c.h:149
void LPI2C_MasterSetBaudRate(LPI2C_Type *base, uint32_t sourceClock_Hz, uint32_t baudRate_Hz)
Sets the I2C bus frequency for master transactions.
Definition: fsl_lpi2c.c:443
void * userData
Definition: fsl_lpi2c.h:253
lpi2c_data_match_config_mode_t matchMode
Definition: fsl_lpi2c.h:185
Definition: fsl_lpi2c.h:113
static uint32_t LPI2C_SlaveGetReceivedAddress(LPI2C_Type *base)
Returns the slave address sent by the I2C master.
Definition: fsl_lpi2c.h:1119
Definition: fsl_lpi2c.h:288
void LPI2C_MasterGetDefaultConfig(lpi2c_master_config_t *masterConfig)
Provides a default configuration for the LPI2C master peripheral.
Definition: fsl_lpi2c.c:332
static void LPI2C_MasterDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
Disable LPI2C master interrupt requests.
Definition: fsl_lpi2c.h:586
Definition: fsl_lpi2c.h:289
Definition: fsl_lpi2c.h:359
bool filterDozeEnable
Definition: fsl_lpi2c.h:316
static void LPI2C_SlaveEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
Enable LPI2C slave interrupt requests.
Definition: fsl_lpi2c.h:1025
size_t subaddressSize
Definition: fsl_lpi2c.h:236
void * userData
Definition: fsl_lpi2c.h:405
status_t LPI2C_MasterGetTransferCount(LPI2C_Type *base, lpi2c_master_handle_t *handle, size_t *count)
Returns number of bytes transferred so far.
Definition: fsl_lpi2c.c:949
void LPI2C_SlaveInit(LPI2C_Type *base, const lpi2c_slave_config_t *slaveConfig, uint32_t sourceClock_Hz)
Initializes the LPI2C slave peripheral.
Definition: fsl_lpi2c.c:1073
Structure with settings to initialize the LPI2C master module.
Definition: fsl_lpi2c.h:147
Definition: fsl_lpi2c.h:128
Definition: fsl_lpi2c.h:92
static void LPI2C_SlaveClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
Clears the LPI2C status flag state.
Definition: fsl_lpi2c.h:1005
Definition: fsl_lpi2c.h:296
static uint32_t LPI2C_MasterGetStatusFlags(LPI2C_Type *base)
Gets the LPI2C master status flags.
Definition: fsl_lpi2c.h:526
_lpi2c_master_flags
LPI2C master peripheral flags.
Definition: fsl_lpi2c.h:90
void * data
Definition: fsl_lpi2c.h:237
Definition: fsl_lpi2c.h:55
lpi2c_master_transfer_callback_t completionCallback
Definition: fsl_lpi2c.h:252
lpi2c_master_transfer_t transfer
Definition: fsl_lpi2c.h:251
static void LPI2C_MasterEnable(LPI2C_Type *base, bool enable)
Enables or disables the LPI2C module as master.
Definition: fsl_lpi2c.h:504
LPI2C master data match config struct.
Definition: fsl_lpi2c.h:183
static void LPI2C_MasterClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
Clears the LPI2C master status flag state.
Definition: fsl_lpi2c.h:551
Definition: fsl_lpi2c.h:280
_lpi2c_master_transfer_flags
Transfer option flags.
Definition: fsl_lpi2c.h:216
Definition: fsl_lpi2c.h:284
Definition: fsl_lpi2c.h:282
lpi2c_master_pin_config_t pinConfig
Definition: fsl_lpi2c.h:153
Definition: fsl_lpi2c.h:281
status_t LPI2C_MasterSend(LPI2C_Type *base, const void *txBuff, size_t txSize)
Performs a polling send transfer on the I2C bus.
Definition: fsl_lpi2c.c:621
uint32_t match0
Definition: fsl_lpi2c.h:187
Definition: fsl_lpi2c.h:287
_lpi2c_slave_flags
LPI2C slave peripheral flags.
Definition: fsl_lpi2c.h:277
Definition: fsl_lpi2c.h:358
lpi2c_slave_transfer_event_t event
Definition: fsl_lpi2c.h:369
size_t transferredCount
Definition: fsl_lpi2c.h:375
uint16_t remainingBytes
Definition: fsl_lpi2c.h:248
uint8_t state
Definition: fsl_lpi2c.h:247
uint16_t slaveAddress
Definition: fsl_lpi2c.h:233
Definition: fsl_lpi2c.h:362
uint8_t sdaGlitchFilterWidth_ns
Definition: fsl_lpi2c.h:157
uint8_t * buf
Definition: fsl_lpi2c.h:249
Definition: fsl_lpi2c.h:291
Definition: fsl_lpi2c.h:297
Definition: fsl_lpi2c.h:101
bool ignoreAck
Definition: fsl_lpi2c.h:333
bool ignoreAck
Definition: fsl_lpi2c.h:152
Definition: fsl_lpi2c.h:283
uint32_t pinLowTimeout_ns
Definition: fsl_lpi2c.h:156
uint32_t sclGlitchFilterWidth_ns
Definition: fsl_lpi2c.h:336
bool enableGeneralCall
Definition: fsl_lpi2c.h:318
Definition: fsl_lpi2c.h:53
Definition: fsl_lpi2c.h:108
void LPI2C_SlaveHandleInterrupt(LPI2C_Type *base, lpi2c_slave_handle_t *handle)
Reusable routine to handle slave interrupts.
Definition: fsl_lpi2c.c:1372
static void LPI2C_MasterSetWatermarks(LPI2C_Type *base, size_t txWords, size_t rxWords)
Set the watermarks for LPI2C master FIFOs.
Definition: fsl_lpi2c.h:658
uint32_t dataValidDelay_ns
Definition: fsl_lpi2c.h:337
uint32_t flags
Definition: fsl_lpi2c.h:231
static uint32_t LPI2C_MasterGetEnabledInterrupts(LPI2C_Type *base)
Returns the set of currently enabled LPI2C master interrupt requests.
Definition: fsl_lpi2c.h:598
Definition: fsl_lpi2c.h:169
Definition: fsl_lpi2c.h:286
bool enableSlave
Definition: fsl_lpi2c.h:312
Definition: fsl_lpi2c.h:100
Definition: fsl_lpi2c.h:172
Definition: fsl_lpi2c.h:290
status_t LPI2C_MasterReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize)
Performs a polling receive transfer on the I2C bus.
Definition: fsl_lpi2c.c:572
Definition: fsl_lpi2c.h:54
Definition: fsl_lpi2c.h:63
LPI2C slave handle structure.
Definition: fsl_lpi2c.h:397
static void LPI2C_SlaveDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
Disable LPI2C slave interrupt requests.
Definition: fsl_lpi2c.h:1040
status_t LPI2C_MasterStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir)
Sends a START signal and slave address on the I2C bus.
Definition: fsl_lpi2c.c:512
Definition: fsl_lpi2c.h:218
int32_t status_t
Type used for all status and error return values.
Definition: fsl_common.h:121
Definition: fsl_lpi2c.h:116
void LPI2C_MasterHandleInterrupt(LPI2C_Type *base, lpi2c_master_handle_t *handle)
Reusable routine to handle master interrupts.
Definition: fsl_lpi2c.c:1019
uint8_t address1
Definition: fsl_lpi2c.h:314
Definition: fsl_lpi2c.h:285
Definition: fsl_lpi2c.h:355
Definition: fsl_lpi2c.h:95
Structure with settings to initialize the LPI2C slave module.
Definition: fsl_lpi2c.h:310
Definition: fsl_lpi2c.h:135
static uint32_t LPI2C_MasterGetRxFifoAddress(LPI2C_Type *base)
Gets LPI2C master receive data register address for DMA transfer.
Definition: fsl_lpi2c.h:637
Definition: fsl_common.h:74
uint32_t eventMask
Definition: fsl_lpi2c.h:402
static void LPI2C_MasterEnableDMA(LPI2C_Type *base, bool enableTx, bool enableRx)
Enables or disables LPI2C master DMA requests.
Definition: fsl_lpi2c.h:615
uint32_t transferredCount
Definition: fsl_lpi2c.h:403
Definition: fsl_lpi2c.h:221
void LPI2C_MasterConfigureDataMatch(LPI2C_Type *base, const lpi2c_data_match_config_t *config)
Configure LPI2C master data match feature.
Definition: fsl_lpi2c.c:426
Definition: fsl_lpi2c.h:352
Definition: fsl_lpi2c.h:117
Non-blocking transfer descriptor structure.
Definition: fsl_lpi2c.h:229
Definition: fsl_lpi2c.h:93