mbed official / mbed

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
AnnaBridge 161:aa5281ff4a02 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34 #ifndef _FSL_LPI2C_H_
AnnaBridge 161:aa5281ff4a02 35 #define _FSL_LPI2C_H_
AnnaBridge 161:aa5281ff4a02 36
AnnaBridge 161:aa5281ff4a02 37 #include <stddef.h>
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_device_registers.h"
AnnaBridge 161:aa5281ff4a02 39 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 40
AnnaBridge 161:aa5281ff4a02 41 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 42 * Definitions
AnnaBridge 161:aa5281ff4a02 43 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*!
AnnaBridge 161:aa5281ff4a02 46 * @addtogroup lpi2c
AnnaBridge 161:aa5281ff4a02 47 * @{
AnnaBridge 161:aa5281ff4a02 48 */
AnnaBridge 161:aa5281ff4a02 49
AnnaBridge 161:aa5281ff4a02 50 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 51 /*@{*/
AnnaBridge 170:e95d10626187 52 /*! @brief LPI2C driver version 2.1.5. */
AnnaBridge 170:e95d10626187 53 #define FSL_LPI2C_DRIVER_VERSION (MAKE_VERSION(2, 1, 5))
AnnaBridge 161:aa5281ff4a02 54 /*@}*/
AnnaBridge 161:aa5281ff4a02 55
AnnaBridge 161:aa5281ff4a02 56 /*! @brief Timeout times for waiting flag. */
AnnaBridge 161:aa5281ff4a02 57 #ifndef LPI2C_WAIT_TIMEOUT
AnnaBridge 161:aa5281ff4a02 58 #define LPI2C_WAIT_TIMEOUT 0U /* Define to zero means keep waiting until the flag is assert/deassert. */
AnnaBridge 161:aa5281ff4a02 59 #endif
AnnaBridge 161:aa5281ff4a02 60
AnnaBridge 161:aa5281ff4a02 61 /*! @brief LPI2C status return codes. */
AnnaBridge 161:aa5281ff4a02 62 enum _lpi2c_status
AnnaBridge 161:aa5281ff4a02 63 {
AnnaBridge 161:aa5281ff4a02 64 kStatus_LPI2C_Busy = MAKE_STATUS(kStatusGroup_LPI2C, 0), /*!< The master is already performing a transfer. */
AnnaBridge 161:aa5281ff4a02 65 kStatus_LPI2C_Idle = MAKE_STATUS(kStatusGroup_LPI2C, 1), /*!< The slave driver is idle. */
AnnaBridge 161:aa5281ff4a02 66 kStatus_LPI2C_Nak = MAKE_STATUS(kStatusGroup_LPI2C, 2), /*!< The slave device sent a NAK in response to a byte. */
AnnaBridge 161:aa5281ff4a02 67 kStatus_LPI2C_FifoError = MAKE_STATUS(kStatusGroup_LPI2C, 3), /*!< FIFO under run or overrun. */
AnnaBridge 161:aa5281ff4a02 68 kStatus_LPI2C_BitError = MAKE_STATUS(kStatusGroup_LPI2C, 4), /*!< Transferred bit was not seen on the bus. */
AnnaBridge 161:aa5281ff4a02 69 kStatus_LPI2C_ArbitrationLost = MAKE_STATUS(kStatusGroup_LPI2C, 5), /*!< Arbitration lost error. */
AnnaBridge 161:aa5281ff4a02 70 kStatus_LPI2C_PinLowTimeout =
AnnaBridge 161:aa5281ff4a02 71 MAKE_STATUS(kStatusGroup_LPI2C, 6), /*!< SCL or SDA were held low longer than the timeout. */
AnnaBridge 161:aa5281ff4a02 72 kStatus_LPI2C_NoTransferInProgress =
AnnaBridge 161:aa5281ff4a02 73 MAKE_STATUS(kStatusGroup_LPI2C, 7), /*!< Attempt to abort a transfer when one is not in progress. */
AnnaBridge 161:aa5281ff4a02 74 kStatus_LPI2C_DmaRequestFail = MAKE_STATUS(kStatusGroup_LPI2C, 8), /*!< DMA request failed. */
AnnaBridge 161:aa5281ff4a02 75 kStatus_LPI2C_Timeout = MAKE_STATUS(kStatusGroup_LPI2C, 9), /*!< Timeout poling status flags. */
AnnaBridge 161:aa5281ff4a02 76 };
AnnaBridge 161:aa5281ff4a02 77
AnnaBridge 161:aa5281ff4a02 78 /*! @} */
AnnaBridge 161:aa5281ff4a02 79
AnnaBridge 161:aa5281ff4a02 80 /*!
AnnaBridge 161:aa5281ff4a02 81 * @addtogroup lpi2c_master_driver
AnnaBridge 161:aa5281ff4a02 82 * @{
AnnaBridge 161:aa5281ff4a02 83 */
AnnaBridge 161:aa5281ff4a02 84
AnnaBridge 161:aa5281ff4a02 85 /*!
AnnaBridge 161:aa5281ff4a02 86 * @brief LPI2C master peripheral flags.
AnnaBridge 161:aa5281ff4a02 87 *
AnnaBridge 161:aa5281ff4a02 88 * The following status register flags can be cleared:
AnnaBridge 161:aa5281ff4a02 89 * - #kLPI2C_MasterEndOfPacketFlag
AnnaBridge 161:aa5281ff4a02 90 * - #kLPI2C_MasterStopDetectFlag
AnnaBridge 161:aa5281ff4a02 91 * - #kLPI2C_MasterNackDetectFlag
AnnaBridge 161:aa5281ff4a02 92 * - #kLPI2C_MasterArbitrationLostFlag
AnnaBridge 161:aa5281ff4a02 93 * - #kLPI2C_MasterFifoErrFlag
AnnaBridge 161:aa5281ff4a02 94 * - #kLPI2C_MasterPinLowTimeoutFlag
AnnaBridge 161:aa5281ff4a02 95 * - #kLPI2C_MasterDataMatchFlag
AnnaBridge 161:aa5281ff4a02 96 *
AnnaBridge 161:aa5281ff4a02 97 * All flags except #kLPI2C_MasterBusyFlag and #kLPI2C_MasterBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 98 * interrupts.
AnnaBridge 161:aa5281ff4a02 99 *
AnnaBridge 161:aa5281ff4a02 100 * @note These enums are meant to be OR'd together to form a bit mask.
AnnaBridge 161:aa5281ff4a02 101 */
AnnaBridge 161:aa5281ff4a02 102 enum _lpi2c_master_flags
AnnaBridge 161:aa5281ff4a02 103 {
AnnaBridge 161:aa5281ff4a02 104 kLPI2C_MasterTxReadyFlag = LPI2C_MSR_TDF_MASK, /*!< Transmit data flag */
AnnaBridge 161:aa5281ff4a02 105 kLPI2C_MasterRxReadyFlag = LPI2C_MSR_RDF_MASK, /*!< Receive data flag */
AnnaBridge 161:aa5281ff4a02 106 kLPI2C_MasterEndOfPacketFlag = LPI2C_MSR_EPF_MASK, /*!< End Packet flag */
AnnaBridge 161:aa5281ff4a02 107 kLPI2C_MasterStopDetectFlag = LPI2C_MSR_SDF_MASK, /*!< Stop detect flag */
AnnaBridge 161:aa5281ff4a02 108 kLPI2C_MasterNackDetectFlag = LPI2C_MSR_NDF_MASK, /*!< NACK detect flag */
AnnaBridge 161:aa5281ff4a02 109 kLPI2C_MasterArbitrationLostFlag = LPI2C_MSR_ALF_MASK, /*!< Arbitration lost flag */
AnnaBridge 161:aa5281ff4a02 110 kLPI2C_MasterFifoErrFlag = LPI2C_MSR_FEF_MASK, /*!< FIFO error flag */
AnnaBridge 161:aa5281ff4a02 111 kLPI2C_MasterPinLowTimeoutFlag = LPI2C_MSR_PLTF_MASK, /*!< Pin low timeout flag */
AnnaBridge 161:aa5281ff4a02 112 kLPI2C_MasterDataMatchFlag = LPI2C_MSR_DMF_MASK, /*!< Data match flag */
AnnaBridge 161:aa5281ff4a02 113 kLPI2C_MasterBusyFlag = LPI2C_MSR_MBF_MASK, /*!< Master busy flag */
AnnaBridge 161:aa5281ff4a02 114 kLPI2C_MasterBusBusyFlag = LPI2C_MSR_BBF_MASK /*!< Bus busy flag */
AnnaBridge 161:aa5281ff4a02 115 };
AnnaBridge 161:aa5281ff4a02 116
AnnaBridge 161:aa5281ff4a02 117 /*! @brief Direction of master and slave transfers. */
AnnaBridge 161:aa5281ff4a02 118 typedef enum _lpi2c_direction
AnnaBridge 161:aa5281ff4a02 119 {
AnnaBridge 161:aa5281ff4a02 120 kLPI2C_Write = 0U, /*!< Master transmit. */
AnnaBridge 161:aa5281ff4a02 121 kLPI2C_Read = 1U /*!< Master receive. */
AnnaBridge 161:aa5281ff4a02 122 } lpi2c_direction_t;
AnnaBridge 161:aa5281ff4a02 123
AnnaBridge 161:aa5281ff4a02 124 /*! @brief LPI2C pin configuration. */
AnnaBridge 161:aa5281ff4a02 125 typedef enum _lpi2c_master_pin_config
AnnaBridge 161:aa5281ff4a02 126 {
AnnaBridge 161:aa5281ff4a02 127 kLPI2C_2PinOpenDrain = 0x0U, /*!< LPI2C Configured for 2-pin open drain mode */
AnnaBridge 161:aa5281ff4a02 128 kLPI2C_2PinOutputOnly = 0x1U, /*!< LPI2C Configured for 2-pin output only mode (ultra-fast mode) */
AnnaBridge 161:aa5281ff4a02 129 kLPI2C_2PinPushPull = 0x2U, /*!< LPI2C Configured for 2-pin push-pull mode */
AnnaBridge 161:aa5281ff4a02 130 kLPI2C_4PinPushPull = 0x3U, /*!< LPI2C Configured for 4-pin push-pull mode */
AnnaBridge 161:aa5281ff4a02 131 kLPI2C_2PinOpenDrainWithSeparateSlave =
AnnaBridge 161:aa5281ff4a02 132 0x4U, /*!< LPI2C Configured for 2-pin open drain mode with separate LPI2C slave */
AnnaBridge 161:aa5281ff4a02 133 kLPI2C_2PinOutputOnlyWithSeparateSlave =
AnnaBridge 161:aa5281ff4a02 134 0x5U, /*!< LPI2C Configured for 2-pin output only mode(ultra-fast mode) with separate LPI2C slave */
AnnaBridge 161:aa5281ff4a02 135 kLPI2C_2PinPushPullWithSeparateSlave =
AnnaBridge 161:aa5281ff4a02 136 0x6U, /*!< LPI2C Configured for 2-pin push-pull mode with separate LPI2C slave */
AnnaBridge 161:aa5281ff4a02 137 kLPI2C_4PinPushPullWithInvertedOutput = 0x7U /*!< LPI2C Configured for 4-pin push-pull mode(inverted outputs) */
AnnaBridge 161:aa5281ff4a02 138 } lpi2c_master_pin_config_t;
AnnaBridge 161:aa5281ff4a02 139
AnnaBridge 161:aa5281ff4a02 140 /*! @brief LPI2C master host request selection. */
AnnaBridge 161:aa5281ff4a02 141 typedef enum _lpi2c_host_request_source
AnnaBridge 161:aa5281ff4a02 142 {
AnnaBridge 161:aa5281ff4a02 143 kLPI2C_HostRequestExternalPin = 0x0U, /*!< Select the LPI2C_HREQ pin as the host request input */
AnnaBridge 161:aa5281ff4a02 144 kLPI2C_HostRequestInputTrigger = 0x1U, /*!< Select the input trigger as the host request input */
AnnaBridge 161:aa5281ff4a02 145 } lpi2c_host_request_source_t;
AnnaBridge 161:aa5281ff4a02 146
AnnaBridge 161:aa5281ff4a02 147 /*! @brief LPI2C master host request pin polarity configuration. */
AnnaBridge 161:aa5281ff4a02 148 typedef enum _lpi2c_host_request_polarity
AnnaBridge 161:aa5281ff4a02 149 {
AnnaBridge 161:aa5281ff4a02 150 kLPI2C_HostRequestPinActiveLow = 0x0U, /*!< Configure the LPI2C_HREQ pin active low */
AnnaBridge 161:aa5281ff4a02 151 kLPI2C_HostRequestPinActiveHigh = 0x1U /*!< Configure the LPI2C_HREQ pin active high */
AnnaBridge 161:aa5281ff4a02 152 } lpi2c_host_request_polarity_t;
AnnaBridge 161:aa5281ff4a02 153
AnnaBridge 161:aa5281ff4a02 154 /*!
AnnaBridge 161:aa5281ff4a02 155 * @brief Structure with settings to initialize the LPI2C master module.
AnnaBridge 161:aa5281ff4a02 156 *
AnnaBridge 161:aa5281ff4a02 157 * This structure holds configuration settings for the LPI2C peripheral. To initialize this
AnnaBridge 161:aa5281ff4a02 158 * structure to reasonable defaults, call the LPI2C_MasterGetDefaultConfig() function and
AnnaBridge 161:aa5281ff4a02 159 * pass a pointer to your configuration structure instance.
AnnaBridge 161:aa5281ff4a02 160 *
AnnaBridge 161:aa5281ff4a02 161 * The configuration structure can be made constant so it resides in flash.
AnnaBridge 161:aa5281ff4a02 162 */
AnnaBridge 161:aa5281ff4a02 163 typedef struct _lpi2c_master_config
AnnaBridge 161:aa5281ff4a02 164 {
AnnaBridge 161:aa5281ff4a02 165 bool enableMaster; /*!< Whether to enable master mode. */
AnnaBridge 161:aa5281ff4a02 166 bool enableDoze; /*!< Whether master is enabled in doze mode. */
AnnaBridge 161:aa5281ff4a02 167 bool debugEnable; /*!< Enable transfers to continue when halted in debug mode. */
AnnaBridge 161:aa5281ff4a02 168 bool ignoreAck; /*!< Whether to ignore ACK/NACK. */
AnnaBridge 161:aa5281ff4a02 169 lpi2c_master_pin_config_t pinConfig; /*!< The pin configuration option. */
AnnaBridge 161:aa5281ff4a02 170 uint32_t baudRate_Hz; /*!< Desired baud rate in Hertz. */
AnnaBridge 161:aa5281ff4a02 171 uint32_t busIdleTimeout_ns; /*!< Bus idle timeout in nanoseconds. Set to 0 to disable. */
AnnaBridge 161:aa5281ff4a02 172 uint32_t pinLowTimeout_ns; /*!< Pin low timeout in nanoseconds. Set to 0 to disable. */
AnnaBridge 161:aa5281ff4a02 173 uint8_t sdaGlitchFilterWidth_ns; /*!< Width in nanoseconds of glitch filter on SDA pin. Set to 0 to disable. */
AnnaBridge 161:aa5281ff4a02 174 uint8_t sclGlitchFilterWidth_ns; /*!< Width in nanoseconds of glitch filter on SCL pin. Set to 0 to disable. */
AnnaBridge 161:aa5281ff4a02 175 struct
AnnaBridge 161:aa5281ff4a02 176 {
AnnaBridge 161:aa5281ff4a02 177 bool enable; /*!< Enable host request. */
AnnaBridge 161:aa5281ff4a02 178 lpi2c_host_request_source_t source; /*!< Host request source. */
AnnaBridge 161:aa5281ff4a02 179 lpi2c_host_request_polarity_t polarity; /*!< Host request pin polarity. */
AnnaBridge 161:aa5281ff4a02 180 } hostRequest; /*!< Host request options. */
AnnaBridge 161:aa5281ff4a02 181 } lpi2c_master_config_t;
AnnaBridge 161:aa5281ff4a02 182
AnnaBridge 161:aa5281ff4a02 183 /*! @brief LPI2C master data match configuration modes. */
AnnaBridge 161:aa5281ff4a02 184 typedef enum _lpi2c_data_match_config_mode
AnnaBridge 161:aa5281ff4a02 185 {
AnnaBridge 161:aa5281ff4a02 186 kLPI2C_MatchDisabled = 0x0U, /*!< LPI2C Match Disabled */
AnnaBridge 161:aa5281ff4a02 187 kLPI2C_1stWordEqualsM0OrM1 = 0x2U, /*!< LPI2C Match Enabled and 1st data word equals MATCH0 OR MATCH1 */
AnnaBridge 161:aa5281ff4a02 188 kLPI2C_AnyWordEqualsM0OrM1 = 0x3U, /*!< LPI2C Match Enabled and any data word equals MATCH0 OR MATCH1 */
AnnaBridge 161:aa5281ff4a02 189 kLPI2C_1stWordEqualsM0And2ndWordEqualsM1 =
AnnaBridge 161:aa5281ff4a02 190 0x4U, /*!< LPI2C Match Enabled and 1st data word equals MATCH0, 2nd data equals MATCH1 */
AnnaBridge 161:aa5281ff4a02 191 kLPI2C_AnyWordEqualsM0AndNextWordEqualsM1 =
AnnaBridge 161:aa5281ff4a02 192 0x5U, /*!< LPI2C Match Enabled and any data word equals MATCH0, next data equals MATCH1 */
AnnaBridge 161:aa5281ff4a02 193 kLPI2C_1stWordAndM1EqualsM0AndM1 =
AnnaBridge 161:aa5281ff4a02 194 0x6U, /*!< LPI2C Match Enabled and 1st data word and MATCH0 equals MATCH0 and MATCH1 */
AnnaBridge 161:aa5281ff4a02 195 kLPI2C_AnyWordAndM1EqualsM0AndM1 =
AnnaBridge 161:aa5281ff4a02 196 0x7U /*!< LPI2C Match Enabled and any data word and MATCH0 equals MATCH0 and MATCH1 */
AnnaBridge 161:aa5281ff4a02 197 } lpi2c_data_match_config_mode_t;
AnnaBridge 161:aa5281ff4a02 198
AnnaBridge 161:aa5281ff4a02 199 /*! @brief LPI2C master data match configuration structure. */
AnnaBridge 161:aa5281ff4a02 200 typedef struct _lpi2c_match_config
AnnaBridge 161:aa5281ff4a02 201 {
AnnaBridge 161:aa5281ff4a02 202 lpi2c_data_match_config_mode_t matchMode; /*!< Data match configuration setting. */
AnnaBridge 161:aa5281ff4a02 203 bool rxDataMatchOnly; /*!< When set to true, received data is ignored until a successful match. */
AnnaBridge 161:aa5281ff4a02 204 uint32_t match0; /*!< Match value 0. */
AnnaBridge 161:aa5281ff4a02 205 uint32_t match1; /*!< Match value 1. */
AnnaBridge 161:aa5281ff4a02 206 } lpi2c_data_match_config_t;
AnnaBridge 161:aa5281ff4a02 207
AnnaBridge 161:aa5281ff4a02 208 /* Forward declaration of the transfer descriptor and handle typedefs. */
AnnaBridge 161:aa5281ff4a02 209 typedef struct _lpi2c_master_transfer lpi2c_master_transfer_t;
AnnaBridge 161:aa5281ff4a02 210 typedef struct _lpi2c_master_handle lpi2c_master_handle_t;
AnnaBridge 161:aa5281ff4a02 211
AnnaBridge 161:aa5281ff4a02 212 /*!
AnnaBridge 161:aa5281ff4a02 213 * @brief Master completion callback function pointer type.
AnnaBridge 161:aa5281ff4a02 214 *
AnnaBridge 161:aa5281ff4a02 215 * This callback is used only for the non-blocking master transfer API. Specify the callback you wish to use
AnnaBridge 161:aa5281ff4a02 216 * in the call to LPI2C_MasterTransferCreateHandle().
AnnaBridge 161:aa5281ff4a02 217 *
AnnaBridge 161:aa5281ff4a02 218 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 219 * @param completionStatus Either #kStatus_Success or an error code describing how the transfer completed.
AnnaBridge 161:aa5281ff4a02 220 * @param userData Arbitrary pointer-sized value passed from the application.
AnnaBridge 161:aa5281ff4a02 221 */
AnnaBridge 161:aa5281ff4a02 222 typedef void (*lpi2c_master_transfer_callback_t)(LPI2C_Type *base,
AnnaBridge 161:aa5281ff4a02 223 lpi2c_master_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 224 status_t completionStatus,
AnnaBridge 161:aa5281ff4a02 225 void *userData);
AnnaBridge 161:aa5281ff4a02 226
AnnaBridge 161:aa5281ff4a02 227 /*!
AnnaBridge 161:aa5281ff4a02 228 * @brief Transfer option flags.
AnnaBridge 161:aa5281ff4a02 229 *
AnnaBridge 161:aa5281ff4a02 230 * @note These enumerations are intended to be OR'd together to form a bit mask of options for
AnnaBridge 161:aa5281ff4a02 231 * the #_lpi2c_master_transfer::flags field.
AnnaBridge 161:aa5281ff4a02 232 */
AnnaBridge 161:aa5281ff4a02 233 enum _lpi2c_master_transfer_flags
AnnaBridge 161:aa5281ff4a02 234 {
AnnaBridge 161:aa5281ff4a02 235 kLPI2C_TransferDefaultFlag = 0x00U, /*!< Transfer starts with a start signal, stops with a stop signal. */
AnnaBridge 161:aa5281ff4a02 236 kLPI2C_TransferNoStartFlag = 0x01U, /*!< Don't send a start condition, address, and sub address */
AnnaBridge 161:aa5281ff4a02 237 kLPI2C_TransferRepeatedStartFlag = 0x02U, /*!< Send a repeated start condition */
AnnaBridge 161:aa5281ff4a02 238 kLPI2C_TransferNoStopFlag = 0x04U, /*!< Don't send a stop condition. */
AnnaBridge 161:aa5281ff4a02 239 };
AnnaBridge 161:aa5281ff4a02 240
AnnaBridge 161:aa5281ff4a02 241 /*!
AnnaBridge 161:aa5281ff4a02 242 * @brief Non-blocking transfer descriptor structure.
AnnaBridge 161:aa5281ff4a02 243 *
AnnaBridge 161:aa5281ff4a02 244 * This structure is used to pass transaction parameters to the LPI2C_MasterTransferNonBlocking() API.
AnnaBridge 161:aa5281ff4a02 245 */
AnnaBridge 161:aa5281ff4a02 246 struct _lpi2c_master_transfer
AnnaBridge 161:aa5281ff4a02 247 {
AnnaBridge 161:aa5281ff4a02 248 uint32_t
AnnaBridge 161:aa5281ff4a02 249 flags; /*!< Bit mask of options for the transfer. See enumeration #_lpi2c_master_transfer_flags for available
AnnaBridge 161:aa5281ff4a02 250 options. Set to 0 or #kLPI2C_TransferDefaultFlag for normal transfers. */
AnnaBridge 161:aa5281ff4a02 251 uint16_t slaveAddress; /*!< The 7-bit slave address. */
AnnaBridge 161:aa5281ff4a02 252 lpi2c_direction_t direction; /*!< Either #kLPI2C_Read or #kLPI2C_Write. */
AnnaBridge 161:aa5281ff4a02 253 uint32_t subaddress; /*!< Sub address. Transferred MSB first. */
AnnaBridge 161:aa5281ff4a02 254 size_t subaddressSize; /*!< Length of sub address to send in bytes. Maximum size is 4 bytes. */
AnnaBridge 161:aa5281ff4a02 255 void *data; /*!< Pointer to data to transfer. */
AnnaBridge 161:aa5281ff4a02 256 size_t dataSize; /*!< Number of bytes to transfer. */
AnnaBridge 161:aa5281ff4a02 257 };
AnnaBridge 161:aa5281ff4a02 258
AnnaBridge 161:aa5281ff4a02 259 /*!
AnnaBridge 161:aa5281ff4a02 260 * @brief Driver handle for master non-blocking APIs.
AnnaBridge 161:aa5281ff4a02 261 * @note The contents of this structure are private and subject to change.
AnnaBridge 161:aa5281ff4a02 262 */
AnnaBridge 161:aa5281ff4a02 263 struct _lpi2c_master_handle
AnnaBridge 161:aa5281ff4a02 264 {
AnnaBridge 161:aa5281ff4a02 265 uint8_t state; /*!< Transfer state machine current state. */
AnnaBridge 161:aa5281ff4a02 266 uint16_t remainingBytes; /*!< Remaining byte count in current state. */
AnnaBridge 161:aa5281ff4a02 267 uint8_t *buf; /*!< Buffer pointer for current state. */
AnnaBridge 161:aa5281ff4a02 268 uint16_t commandBuffer[7]; /*!< LPI2C command sequence. */
AnnaBridge 161:aa5281ff4a02 269 lpi2c_master_transfer_t transfer; /*!< Copy of the current transfer info. */
AnnaBridge 161:aa5281ff4a02 270 lpi2c_master_transfer_callback_t completionCallback; /*!< Callback function pointer. */
AnnaBridge 161:aa5281ff4a02 271 void *userData; /*!< Application data passed to callback. */
AnnaBridge 161:aa5281ff4a02 272 };
AnnaBridge 161:aa5281ff4a02 273
AnnaBridge 161:aa5281ff4a02 274 /*! @} */
AnnaBridge 161:aa5281ff4a02 275
AnnaBridge 161:aa5281ff4a02 276 /*!
AnnaBridge 161:aa5281ff4a02 277 * @addtogroup lpi2c_slave_driver
AnnaBridge 161:aa5281ff4a02 278 * @{
AnnaBridge 161:aa5281ff4a02 279 */
AnnaBridge 161:aa5281ff4a02 280
AnnaBridge 161:aa5281ff4a02 281 /*!
AnnaBridge 161:aa5281ff4a02 282 * @brief LPI2C slave peripheral flags.
AnnaBridge 161:aa5281ff4a02 283 *
AnnaBridge 161:aa5281ff4a02 284 * The following status register flags can be cleared:
AnnaBridge 161:aa5281ff4a02 285 * - #kLPI2C_SlaveRepeatedStartDetectFlag
AnnaBridge 161:aa5281ff4a02 286 * - #kLPI2C_SlaveStopDetectFlag
AnnaBridge 161:aa5281ff4a02 287 * - #kLPI2C_SlaveBitErrFlag
AnnaBridge 161:aa5281ff4a02 288 * - #kLPI2C_SlaveFifoErrFlag
AnnaBridge 161:aa5281ff4a02 289 *
AnnaBridge 161:aa5281ff4a02 290 * All flags except #kLPI2C_SlaveBusyFlag and #kLPI2C_SlaveBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 291 * interrupts.
AnnaBridge 161:aa5281ff4a02 292 *
AnnaBridge 161:aa5281ff4a02 293 * @note These enumerations are meant to be OR'd together to form a bit mask.
AnnaBridge 161:aa5281ff4a02 294 */
AnnaBridge 161:aa5281ff4a02 295 enum _lpi2c_slave_flags
AnnaBridge 161:aa5281ff4a02 296 {
AnnaBridge 161:aa5281ff4a02 297 kLPI2C_SlaveTxReadyFlag = LPI2C_SSR_TDF_MASK, /*!< Transmit data flag */
AnnaBridge 161:aa5281ff4a02 298 kLPI2C_SlaveRxReadyFlag = LPI2C_SSR_RDF_MASK, /*!< Receive data flag */
AnnaBridge 161:aa5281ff4a02 299 kLPI2C_SlaveAddressValidFlag = LPI2C_SSR_AVF_MASK, /*!< Address valid flag */
AnnaBridge 161:aa5281ff4a02 300 kLPI2C_SlaveTransmitAckFlag = LPI2C_SSR_TAF_MASK, /*!< Transmit ACK flag */
AnnaBridge 161:aa5281ff4a02 301 kLPI2C_SlaveRepeatedStartDetectFlag = LPI2C_SSR_RSF_MASK, /*!< Repeated start detect flag */
AnnaBridge 161:aa5281ff4a02 302 kLPI2C_SlaveStopDetectFlag = LPI2C_SSR_SDF_MASK, /*!< Stop detect flag */
AnnaBridge 161:aa5281ff4a02 303 kLPI2C_SlaveBitErrFlag = LPI2C_SSR_BEF_MASK, /*!< Bit error flag */
AnnaBridge 161:aa5281ff4a02 304 kLPI2C_SlaveFifoErrFlag = LPI2C_SSR_FEF_MASK, /*!< FIFO error flag */
AnnaBridge 161:aa5281ff4a02 305 kLPI2C_SlaveAddressMatch0Flag = LPI2C_SSR_AM0F_MASK, /*!< Address match 0 flag */
AnnaBridge 161:aa5281ff4a02 306 kLPI2C_SlaveAddressMatch1Flag = LPI2C_SSR_AM1F_MASK, /*!< Address match 1 flag */
AnnaBridge 161:aa5281ff4a02 307 kLPI2C_SlaveGeneralCallFlag = LPI2C_SSR_GCF_MASK, /*!< General call flag */
AnnaBridge 161:aa5281ff4a02 308 kLPI2C_SlaveBusyFlag = LPI2C_SSR_SBF_MASK, /*!< Master busy flag */
AnnaBridge 161:aa5281ff4a02 309 kLPI2C_SlaveBusBusyFlag = LPI2C_SSR_BBF_MASK, /*!< Bus busy flag */
AnnaBridge 161:aa5281ff4a02 310 };
AnnaBridge 161:aa5281ff4a02 311
AnnaBridge 161:aa5281ff4a02 312 /*! @brief LPI2C slave address match options. */
AnnaBridge 161:aa5281ff4a02 313 typedef enum _lpi2c_slave_address_match
AnnaBridge 161:aa5281ff4a02 314 {
AnnaBridge 161:aa5281ff4a02 315 kLPI2C_MatchAddress0 = 0U, /*!< Match only address 0. */
AnnaBridge 161:aa5281ff4a02 316 kLPI2C_MatchAddress0OrAddress1 = 2U, /*!< Match either address 0 or address 1. */
AnnaBridge 161:aa5281ff4a02 317 kLPI2C_MatchAddress0ThroughAddress1 = 6U, /*!< Match a range of slave addresses from address 0 through address 1. */
AnnaBridge 161:aa5281ff4a02 318 } lpi2c_slave_address_match_t;
AnnaBridge 161:aa5281ff4a02 319
AnnaBridge 161:aa5281ff4a02 320 /*!
AnnaBridge 161:aa5281ff4a02 321 * @brief Structure with settings to initialize the LPI2C slave module.
AnnaBridge 161:aa5281ff4a02 322 *
AnnaBridge 161:aa5281ff4a02 323 * This structure holds configuration settings for the LPI2C slave peripheral. To initialize this
AnnaBridge 161:aa5281ff4a02 324 * structure to reasonable defaults, call the LPI2C_SlaveGetDefaultConfig() function and
AnnaBridge 161:aa5281ff4a02 325 * pass a pointer to your configuration structure instance.
AnnaBridge 161:aa5281ff4a02 326 *
AnnaBridge 161:aa5281ff4a02 327 * The configuration structure can be made constant so it resides in flash.
AnnaBridge 161:aa5281ff4a02 328 */
AnnaBridge 161:aa5281ff4a02 329 typedef struct _lpi2c_slave_config
AnnaBridge 161:aa5281ff4a02 330 {
AnnaBridge 161:aa5281ff4a02 331 bool enableSlave; /*!< Enable slave mode. */
AnnaBridge 161:aa5281ff4a02 332 uint8_t address0; /*!< Slave's 7-bit address. */
AnnaBridge 161:aa5281ff4a02 333 uint8_t address1; /*!< Alternate slave 7-bit address. */
AnnaBridge 161:aa5281ff4a02 334 lpi2c_slave_address_match_t addressMatchMode; /*!< Address matching options. */
AnnaBridge 161:aa5281ff4a02 335 bool filterDozeEnable; /*!< Enable digital glitch filter in doze mode. */
AnnaBridge 161:aa5281ff4a02 336 bool filterEnable; /*!< Enable digital glitch filter. */
AnnaBridge 161:aa5281ff4a02 337 bool enableGeneralCall; /*!< Enable general call address matching. */
AnnaBridge 161:aa5281ff4a02 338 struct
AnnaBridge 161:aa5281ff4a02 339 {
AnnaBridge 161:aa5281ff4a02 340 bool enableAck; /*!< Enables SCL clock stretching during slave-transmit address byte(s)
AnnaBridge 161:aa5281ff4a02 341 and slave-receiver address and data byte(s) to allow software to
AnnaBridge 161:aa5281ff4a02 342 write the Transmit ACK Register before the ACK or NACK is transmitted.
AnnaBridge 161:aa5281ff4a02 343 Clock stretching occurs when transmitting the 9th bit. When
AnnaBridge 161:aa5281ff4a02 344 enableAckSCLStall is enabled, there is no need to set either
AnnaBridge 161:aa5281ff4a02 345 enableRxDataSCLStall or enableAddressSCLStall. */
AnnaBridge 161:aa5281ff4a02 346 bool enableTx; /*!< Enables SCL clock stretching when the transmit data flag is set
AnnaBridge 161:aa5281ff4a02 347 during a slave-transmit transfer. */
AnnaBridge 161:aa5281ff4a02 348 bool enableRx; /*!< Enables SCL clock stretching when receive data flag is set during
AnnaBridge 161:aa5281ff4a02 349 a slave-receive transfer. */
AnnaBridge 161:aa5281ff4a02 350 bool enableAddress; /*!< Enables SCL clock stretching when the address valid flag is asserted. */
AnnaBridge 161:aa5281ff4a02 351 } sclStall;
AnnaBridge 161:aa5281ff4a02 352 bool ignoreAck; /*!< Continue transfers after a NACK is detected. */
AnnaBridge 161:aa5281ff4a02 353 bool enableReceivedAddressRead; /*!< Enable reading the address received address as the first byte of data. */
AnnaBridge 161:aa5281ff4a02 354 uint32_t sdaGlitchFilterWidth_ns; /*!< Width in nanoseconds of the digital filter on the SDA signal. */
AnnaBridge 161:aa5281ff4a02 355 uint32_t sclGlitchFilterWidth_ns; /*!< Width in nanoseconds of the digital filter on the SCL signal. */
AnnaBridge 161:aa5281ff4a02 356 uint32_t dataValidDelay_ns; /*!< Width in nanoseconds of the data valid delay. */
AnnaBridge 161:aa5281ff4a02 357 uint32_t clockHoldTime_ns; /*!< Width in nanoseconds of the clock hold time. */
AnnaBridge 161:aa5281ff4a02 358 } lpi2c_slave_config_t;
AnnaBridge 161:aa5281ff4a02 359
AnnaBridge 161:aa5281ff4a02 360 /*!
AnnaBridge 161:aa5281ff4a02 361 * @brief Set of events sent to the callback for non blocking slave transfers.
AnnaBridge 161:aa5281ff4a02 362 *
AnnaBridge 161:aa5281ff4a02 363 * These event enumerations are used for two related purposes. First, a bit mask created by OR'ing together
AnnaBridge 161:aa5281ff4a02 364 * events is passed to LPI2C_SlaveTransferNonBlocking() in order to specify which events to enable.
AnnaBridge 161:aa5281ff4a02 365 * Then, when the slave callback is invoked, it is passed the current event through its @a transfer
AnnaBridge 161:aa5281ff4a02 366 * parameter.
AnnaBridge 161:aa5281ff4a02 367 *
AnnaBridge 161:aa5281ff4a02 368 * @note These enumerations are meant to be OR'd together to form a bit mask of events.
AnnaBridge 161:aa5281ff4a02 369 */
AnnaBridge 161:aa5281ff4a02 370 typedef enum _lpi2c_slave_transfer_event
AnnaBridge 161:aa5281ff4a02 371 {
AnnaBridge 161:aa5281ff4a02 372 kLPI2C_SlaveAddressMatchEvent = 0x01U, /*!< Received the slave address after a start or repeated start. */
AnnaBridge 161:aa5281ff4a02 373 kLPI2C_SlaveTransmitEvent = 0x02U, /*!< Callback is requested to provide data to transmit
AnnaBridge 161:aa5281ff4a02 374 (slave-transmitter role). */
AnnaBridge 161:aa5281ff4a02 375 kLPI2C_SlaveReceiveEvent = 0x04U, /*!< Callback is requested to provide a buffer in which to place received
AnnaBridge 161:aa5281ff4a02 376 data (slave-receiver role). */
AnnaBridge 161:aa5281ff4a02 377 kLPI2C_SlaveTransmitAckEvent = 0x08U, /*!< Callback needs to either transmit an ACK or NACK. */
AnnaBridge 161:aa5281ff4a02 378 kLPI2C_SlaveRepeatedStartEvent = 0x10U, /*!< A repeated start was detected. */
AnnaBridge 161:aa5281ff4a02 379 kLPI2C_SlaveCompletionEvent = 0x20U, /*!< A stop was detected, completing the transfer. */
AnnaBridge 161:aa5281ff4a02 380
AnnaBridge 161:aa5281ff4a02 381 /*! Bit mask of all available events. */
AnnaBridge 161:aa5281ff4a02 382 kLPI2C_SlaveAllEvents = kLPI2C_SlaveAddressMatchEvent | kLPI2C_SlaveTransmitEvent | kLPI2C_SlaveReceiveEvent |
AnnaBridge 161:aa5281ff4a02 383 kLPI2C_SlaveTransmitAckEvent | kLPI2C_SlaveRepeatedStartEvent | kLPI2C_SlaveCompletionEvent,
AnnaBridge 161:aa5281ff4a02 384 } lpi2c_slave_transfer_event_t;
AnnaBridge 161:aa5281ff4a02 385
AnnaBridge 161:aa5281ff4a02 386 /*! @brief LPI2C slave transfer structure */
AnnaBridge 161:aa5281ff4a02 387 typedef struct _lpi2c_slave_transfer
AnnaBridge 161:aa5281ff4a02 388 {
AnnaBridge 161:aa5281ff4a02 389 lpi2c_slave_transfer_event_t event; /*!< Reason the callback is being invoked. */
AnnaBridge 161:aa5281ff4a02 390 uint8_t receivedAddress; /*!< Matching address send by master. */
AnnaBridge 161:aa5281ff4a02 391 uint8_t *data; /*!< Transfer buffer */
AnnaBridge 161:aa5281ff4a02 392 size_t dataSize; /*!< Transfer size */
AnnaBridge 161:aa5281ff4a02 393 status_t completionStatus; /*!< Success or error code describing how the transfer completed. Only applies for
AnnaBridge 161:aa5281ff4a02 394 #kLPI2C_SlaveCompletionEvent. */
AnnaBridge 161:aa5281ff4a02 395 size_t transferredCount; /*!< Number of bytes actually transferred since start or last repeated start. */
AnnaBridge 161:aa5281ff4a02 396 } lpi2c_slave_transfer_t;
AnnaBridge 161:aa5281ff4a02 397
AnnaBridge 161:aa5281ff4a02 398 /* Forward declaration. */
AnnaBridge 161:aa5281ff4a02 399 typedef struct _lpi2c_slave_handle lpi2c_slave_handle_t;
AnnaBridge 161:aa5281ff4a02 400
AnnaBridge 161:aa5281ff4a02 401 /*!
AnnaBridge 161:aa5281ff4a02 402 * @brief Slave event callback function pointer type.
AnnaBridge 161:aa5281ff4a02 403 *
AnnaBridge 161:aa5281ff4a02 404 * This callback is used only for the slave non-blocking transfer API. To install a callback,
AnnaBridge 161:aa5281ff4a02 405 * use the LPI2C_SlaveSetCallback() function after you have created a handle.
AnnaBridge 161:aa5281ff4a02 406 *
AnnaBridge 161:aa5281ff4a02 407 * @param base Base address for the LPI2C instance on which the event occurred.
AnnaBridge 161:aa5281ff4a02 408 * @param transfer Pointer to transfer descriptor containing values passed to and/or from the callback.
AnnaBridge 161:aa5281ff4a02 409 * @param userData Arbitrary pointer-sized value passed from the application.
AnnaBridge 161:aa5281ff4a02 410 */
AnnaBridge 161:aa5281ff4a02 411 typedef void (*lpi2c_slave_transfer_callback_t)(LPI2C_Type *base, lpi2c_slave_transfer_t *transfer, void *userData);
AnnaBridge 161:aa5281ff4a02 412
AnnaBridge 161:aa5281ff4a02 413 /*!
AnnaBridge 161:aa5281ff4a02 414 * @brief LPI2C slave handle structure.
AnnaBridge 161:aa5281ff4a02 415 * @note The contents of this structure are private and subject to change.
AnnaBridge 161:aa5281ff4a02 416 */
AnnaBridge 161:aa5281ff4a02 417 struct _lpi2c_slave_handle
AnnaBridge 161:aa5281ff4a02 418 {
AnnaBridge 161:aa5281ff4a02 419 lpi2c_slave_transfer_t transfer; /*!< LPI2C slave transfer copy. */
AnnaBridge 161:aa5281ff4a02 420 bool isBusy; /*!< Whether transfer is busy. */
AnnaBridge 161:aa5281ff4a02 421 bool wasTransmit; /*!< Whether the last transfer was a transmit. */
AnnaBridge 161:aa5281ff4a02 422 uint32_t eventMask; /*!< Mask of enabled events. */
AnnaBridge 161:aa5281ff4a02 423 uint32_t transferredCount; /*!< Count of bytes transferred. */
AnnaBridge 161:aa5281ff4a02 424 lpi2c_slave_transfer_callback_t callback; /*!< Callback function called at transfer event. */
AnnaBridge 161:aa5281ff4a02 425 void *userData; /*!< Callback parameter passed to callback. */
AnnaBridge 161:aa5281ff4a02 426 };
AnnaBridge 161:aa5281ff4a02 427
AnnaBridge 161:aa5281ff4a02 428 /*! @} */
AnnaBridge 161:aa5281ff4a02 429
AnnaBridge 161:aa5281ff4a02 430 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 431 * API
AnnaBridge 161:aa5281ff4a02 432 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 433
AnnaBridge 161:aa5281ff4a02 434 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 435 extern "C" {
AnnaBridge 161:aa5281ff4a02 436 #endif
AnnaBridge 161:aa5281ff4a02 437
AnnaBridge 161:aa5281ff4a02 438 /*!
AnnaBridge 161:aa5281ff4a02 439 * @addtogroup lpi2c_master_driver
AnnaBridge 161:aa5281ff4a02 440 * @{
AnnaBridge 161:aa5281ff4a02 441 */
AnnaBridge 161:aa5281ff4a02 442
AnnaBridge 161:aa5281ff4a02 443 /*! @name Initialization and deinitialization */
AnnaBridge 161:aa5281ff4a02 444 /*@{*/
AnnaBridge 161:aa5281ff4a02 445
AnnaBridge 161:aa5281ff4a02 446 /*!
AnnaBridge 161:aa5281ff4a02 447 * @brief Provides a default configuration for the LPI2C master peripheral.
AnnaBridge 161:aa5281ff4a02 448 *
AnnaBridge 161:aa5281ff4a02 449 * This function provides the following default configuration for the LPI2C master peripheral:
AnnaBridge 161:aa5281ff4a02 450 * @code
AnnaBridge 161:aa5281ff4a02 451 * masterConfig->enableMaster = true;
AnnaBridge 161:aa5281ff4a02 452 * masterConfig->debugEnable = false;
AnnaBridge 161:aa5281ff4a02 453 * masterConfig->ignoreAck = false;
AnnaBridge 161:aa5281ff4a02 454 * masterConfig->pinConfig = kLPI2C_2PinOpenDrain;
AnnaBridge 161:aa5281ff4a02 455 * masterConfig->baudRate_Hz = 100000U;
AnnaBridge 161:aa5281ff4a02 456 * masterConfig->busIdleTimeout_ns = 0;
AnnaBridge 161:aa5281ff4a02 457 * masterConfig->pinLowTimeout_ns = 0;
AnnaBridge 161:aa5281ff4a02 458 * masterConfig->sdaGlitchFilterWidth_ns = 0;
AnnaBridge 161:aa5281ff4a02 459 * masterConfig->sclGlitchFilterWidth_ns = 0;
AnnaBridge 161:aa5281ff4a02 460 * masterConfig->hostRequest.enable = false;
AnnaBridge 161:aa5281ff4a02 461 * masterConfig->hostRequest.source = kLPI2C_HostRequestExternalPin;
AnnaBridge 161:aa5281ff4a02 462 * masterConfig->hostRequest.polarity = kLPI2C_HostRequestPinActiveHigh;
AnnaBridge 161:aa5281ff4a02 463 * @endcode
AnnaBridge 161:aa5281ff4a02 464 *
AnnaBridge 161:aa5281ff4a02 465 * After calling this function, you can override any settings in order to customize the configuration,
AnnaBridge 161:aa5281ff4a02 466 * prior to initializing the master driver with LPI2C_MasterInit().
AnnaBridge 161:aa5281ff4a02 467 *
AnnaBridge 161:aa5281ff4a02 468 * @param[out] masterConfig User provided configuration structure for default values. Refer to #lpi2c_master_config_t.
AnnaBridge 161:aa5281ff4a02 469 */
AnnaBridge 161:aa5281ff4a02 470 void LPI2C_MasterGetDefaultConfig(lpi2c_master_config_t *masterConfig);
AnnaBridge 161:aa5281ff4a02 471
AnnaBridge 161:aa5281ff4a02 472 /*!
AnnaBridge 161:aa5281ff4a02 473 * @brief Initializes the LPI2C master peripheral.
AnnaBridge 161:aa5281ff4a02 474 *
AnnaBridge 161:aa5281ff4a02 475 * This function enables the peripheral clock and initializes the LPI2C master peripheral as described by the user
AnnaBridge 161:aa5281ff4a02 476 * provided configuration. A software reset is performed prior to configuration.
AnnaBridge 161:aa5281ff4a02 477 *
AnnaBridge 161:aa5281ff4a02 478 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 479 * @param masterConfig User provided peripheral configuration. Use LPI2C_MasterGetDefaultConfig() to get a set of
AnnaBridge 161:aa5281ff4a02 480 * defaults
AnnaBridge 161:aa5281ff4a02 481 * that you can override.
AnnaBridge 161:aa5281ff4a02 482 * @param sourceClock_Hz Frequency in Hertz of the LPI2C functional clock. Used to calculate the baud rate divisors,
AnnaBridge 161:aa5281ff4a02 483 * filter widths, and timeout periods.
AnnaBridge 161:aa5281ff4a02 484 */
AnnaBridge 161:aa5281ff4a02 485 void LPI2C_MasterInit(LPI2C_Type *base, const lpi2c_master_config_t *masterConfig, uint32_t sourceClock_Hz);
AnnaBridge 161:aa5281ff4a02 486
AnnaBridge 161:aa5281ff4a02 487 /*!
AnnaBridge 161:aa5281ff4a02 488 * @brief Deinitializes the LPI2C master peripheral.
AnnaBridge 161:aa5281ff4a02 489 *
AnnaBridge 161:aa5281ff4a02 490 * This function disables the LPI2C master peripheral and gates the clock. It also performs a software
AnnaBridge 161:aa5281ff4a02 491 * reset to restore the peripheral to reset conditions.
AnnaBridge 161:aa5281ff4a02 492 *
AnnaBridge 161:aa5281ff4a02 493 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 494 */
AnnaBridge 161:aa5281ff4a02 495 void LPI2C_MasterDeinit(LPI2C_Type *base);
AnnaBridge 161:aa5281ff4a02 496
AnnaBridge 161:aa5281ff4a02 497 /*!
AnnaBridge 161:aa5281ff4a02 498 * @brief Configures LPI2C master data match feature.
AnnaBridge 161:aa5281ff4a02 499 *
AnnaBridge 161:aa5281ff4a02 500 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 501 * @param config Settings for the data match feature.
AnnaBridge 161:aa5281ff4a02 502 */
AnnaBridge 161:aa5281ff4a02 503 void LPI2C_MasterConfigureDataMatch(LPI2C_Type *base, const lpi2c_data_match_config_t *config);
AnnaBridge 161:aa5281ff4a02 504
AnnaBridge 170:e95d10626187 505 /* Not static so it can be used from fsl_lpi2c_edma.c. */
AnnaBridge 170:e95d10626187 506 status_t LPI2C_MasterCheckAndClearError(LPI2C_Type *base, uint32_t status);
AnnaBridge 170:e95d10626187 507
AnnaBridge 170:e95d10626187 508 /* Not static so it can be used from fsl_lpi2c_edma.c. */
AnnaBridge 170:e95d10626187 509 status_t LPI2C_CheckForBusyBus(LPI2C_Type *base);
AnnaBridge 170:e95d10626187 510
AnnaBridge 161:aa5281ff4a02 511 /*!
AnnaBridge 161:aa5281ff4a02 512 * @brief Performs a software reset.
AnnaBridge 161:aa5281ff4a02 513 *
AnnaBridge 161:aa5281ff4a02 514 * Restores the LPI2C master peripheral to reset conditions.
AnnaBridge 161:aa5281ff4a02 515 *
AnnaBridge 161:aa5281ff4a02 516 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 517 */
AnnaBridge 161:aa5281ff4a02 518 static inline void LPI2C_MasterReset(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 519 {
AnnaBridge 161:aa5281ff4a02 520 base->MCR = LPI2C_MCR_RST_MASK;
AnnaBridge 161:aa5281ff4a02 521 base->MCR = 0;
AnnaBridge 161:aa5281ff4a02 522 }
AnnaBridge 161:aa5281ff4a02 523
AnnaBridge 161:aa5281ff4a02 524 /*!
AnnaBridge 161:aa5281ff4a02 525 * @brief Enables or disables the LPI2C module as master.
AnnaBridge 161:aa5281ff4a02 526 *
AnnaBridge 161:aa5281ff4a02 527 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 528 * @param enable Pass true to enable or false to disable the specified LPI2C as master.
AnnaBridge 161:aa5281ff4a02 529 */
AnnaBridge 161:aa5281ff4a02 530 static inline void LPI2C_MasterEnable(LPI2C_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 531 {
AnnaBridge 161:aa5281ff4a02 532 base->MCR = (base->MCR & ~LPI2C_MCR_MEN_MASK) | LPI2C_MCR_MEN(enable);
AnnaBridge 161:aa5281ff4a02 533 }
AnnaBridge 161:aa5281ff4a02 534
AnnaBridge 161:aa5281ff4a02 535 /*@}*/
AnnaBridge 161:aa5281ff4a02 536
AnnaBridge 161:aa5281ff4a02 537 /*! @name Status */
AnnaBridge 161:aa5281ff4a02 538 /*@{*/
AnnaBridge 161:aa5281ff4a02 539
AnnaBridge 161:aa5281ff4a02 540 /*!
AnnaBridge 161:aa5281ff4a02 541 * @brief Gets the LPI2C master status flags.
AnnaBridge 161:aa5281ff4a02 542 *
AnnaBridge 161:aa5281ff4a02 543 * A bit mask with the state of all LPI2C master status flags is returned. For each flag, the corresponding bit
AnnaBridge 161:aa5281ff4a02 544 * in the return value is set if the flag is asserted.
AnnaBridge 161:aa5281ff4a02 545 *
AnnaBridge 161:aa5281ff4a02 546 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 547 * @return State of the status flags:
AnnaBridge 161:aa5281ff4a02 548 * - 1: related status flag is set.
AnnaBridge 161:aa5281ff4a02 549 * - 0: related status flag is not set.
AnnaBridge 161:aa5281ff4a02 550 * @see _lpi2c_master_flags
AnnaBridge 161:aa5281ff4a02 551 */
AnnaBridge 161:aa5281ff4a02 552 static inline uint32_t LPI2C_MasterGetStatusFlags(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 553 {
AnnaBridge 161:aa5281ff4a02 554 return base->MSR;
AnnaBridge 161:aa5281ff4a02 555 }
AnnaBridge 161:aa5281ff4a02 556
AnnaBridge 161:aa5281ff4a02 557 /*!
AnnaBridge 161:aa5281ff4a02 558 * @brief Clears the LPI2C master status flag state.
AnnaBridge 161:aa5281ff4a02 559 *
AnnaBridge 161:aa5281ff4a02 560 * The following status register flags can be cleared:
AnnaBridge 161:aa5281ff4a02 561 * - #kLPI2C_MasterEndOfPacketFlag
AnnaBridge 161:aa5281ff4a02 562 * - #kLPI2C_MasterStopDetectFlag
AnnaBridge 161:aa5281ff4a02 563 * - #kLPI2C_MasterNackDetectFlag
AnnaBridge 161:aa5281ff4a02 564 * - #kLPI2C_MasterArbitrationLostFlag
AnnaBridge 161:aa5281ff4a02 565 * - #kLPI2C_MasterFifoErrFlag
AnnaBridge 161:aa5281ff4a02 566 * - #kLPI2C_MasterPinLowTimeoutFlag
AnnaBridge 161:aa5281ff4a02 567 * - #kLPI2C_MasterDataMatchFlag
AnnaBridge 161:aa5281ff4a02 568 *
AnnaBridge 161:aa5281ff4a02 569 * Attempts to clear other flags has no effect.
AnnaBridge 161:aa5281ff4a02 570 *
AnnaBridge 161:aa5281ff4a02 571 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 572 * @param statusMask A bitmask of status flags that are to be cleared. The mask is composed of
AnnaBridge 161:aa5281ff4a02 573 * #_lpi2c_master_flags enumerators OR'd together. You may pass the result of a previous call to
AnnaBridge 161:aa5281ff4a02 574 * LPI2C_MasterGetStatusFlags().
AnnaBridge 161:aa5281ff4a02 575 * @see _lpi2c_master_flags.
AnnaBridge 161:aa5281ff4a02 576 */
AnnaBridge 161:aa5281ff4a02 577 static inline void LPI2C_MasterClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
AnnaBridge 161:aa5281ff4a02 578 {
AnnaBridge 161:aa5281ff4a02 579 base->MSR = statusMask;
AnnaBridge 161:aa5281ff4a02 580 }
AnnaBridge 161:aa5281ff4a02 581
AnnaBridge 161:aa5281ff4a02 582 /*@}*/
AnnaBridge 161:aa5281ff4a02 583
AnnaBridge 161:aa5281ff4a02 584 /*! @name Interrupts */
AnnaBridge 161:aa5281ff4a02 585 /*@{*/
AnnaBridge 161:aa5281ff4a02 586
AnnaBridge 161:aa5281ff4a02 587 /*!
AnnaBridge 161:aa5281ff4a02 588 * @brief Enables the LPI2C master interrupt requests.
AnnaBridge 161:aa5281ff4a02 589 *
AnnaBridge 161:aa5281ff4a02 590 * All flags except #kLPI2C_MasterBusyFlag and #kLPI2C_MasterBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 591 * interrupts.
AnnaBridge 161:aa5281ff4a02 592 *
AnnaBridge 161:aa5281ff4a02 593 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 594 * @param interruptMask Bit mask of interrupts to enable. See #_lpi2c_master_flags for the set
AnnaBridge 161:aa5281ff4a02 595 * of constants that should be OR'd together to form the bit mask.
AnnaBridge 161:aa5281ff4a02 596 */
AnnaBridge 161:aa5281ff4a02 597 static inline void LPI2C_MasterEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
AnnaBridge 161:aa5281ff4a02 598 {
AnnaBridge 161:aa5281ff4a02 599 base->MIER |= interruptMask;
AnnaBridge 161:aa5281ff4a02 600 }
AnnaBridge 161:aa5281ff4a02 601
AnnaBridge 161:aa5281ff4a02 602 /*!
AnnaBridge 161:aa5281ff4a02 603 * @brief Disables the LPI2C master interrupt requests.
AnnaBridge 161:aa5281ff4a02 604 *
AnnaBridge 161:aa5281ff4a02 605 * All flags except #kLPI2C_MasterBusyFlag and #kLPI2C_MasterBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 606 * interrupts.
AnnaBridge 161:aa5281ff4a02 607 *
AnnaBridge 161:aa5281ff4a02 608 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 609 * @param interruptMask Bit mask of interrupts to disable. See #_lpi2c_master_flags for the set
AnnaBridge 161:aa5281ff4a02 610 * of constants that should be OR'd together to form the bit mask.
AnnaBridge 161:aa5281ff4a02 611 */
AnnaBridge 161:aa5281ff4a02 612 static inline void LPI2C_MasterDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
AnnaBridge 161:aa5281ff4a02 613 {
AnnaBridge 161:aa5281ff4a02 614 base->MIER &= ~interruptMask;
AnnaBridge 161:aa5281ff4a02 615 }
AnnaBridge 161:aa5281ff4a02 616
AnnaBridge 161:aa5281ff4a02 617 /*!
AnnaBridge 161:aa5281ff4a02 618 * @brief Returns the set of currently enabled LPI2C master interrupt requests.
AnnaBridge 161:aa5281ff4a02 619 *
AnnaBridge 161:aa5281ff4a02 620 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 621 * @return A bitmask composed of #_lpi2c_master_flags enumerators OR'd together to indicate the
AnnaBridge 161:aa5281ff4a02 622 * set of enabled interrupts.
AnnaBridge 161:aa5281ff4a02 623 */
AnnaBridge 161:aa5281ff4a02 624 static inline uint32_t LPI2C_MasterGetEnabledInterrupts(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 625 {
AnnaBridge 161:aa5281ff4a02 626 return base->MIER;
AnnaBridge 161:aa5281ff4a02 627 }
AnnaBridge 161:aa5281ff4a02 628
AnnaBridge 161:aa5281ff4a02 629 /*@}*/
AnnaBridge 161:aa5281ff4a02 630
AnnaBridge 161:aa5281ff4a02 631 /*! @name DMA control */
AnnaBridge 161:aa5281ff4a02 632 /*@{*/
AnnaBridge 161:aa5281ff4a02 633
AnnaBridge 161:aa5281ff4a02 634 /*!
AnnaBridge 161:aa5281ff4a02 635 * @brief Enables or disables LPI2C master DMA requests.
AnnaBridge 161:aa5281ff4a02 636 *
AnnaBridge 161:aa5281ff4a02 637 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 638 * @param enableTx Enable flag for transmit DMA request. Pass true for enable, false for disable.
AnnaBridge 161:aa5281ff4a02 639 * @param enableRx Enable flag for receive DMA request. Pass true for enable, false for disable.
AnnaBridge 161:aa5281ff4a02 640 */
AnnaBridge 161:aa5281ff4a02 641 static inline void LPI2C_MasterEnableDMA(LPI2C_Type *base, bool enableTx, bool enableRx)
AnnaBridge 161:aa5281ff4a02 642 {
AnnaBridge 161:aa5281ff4a02 643 base->MDER = LPI2C_MDER_TDDE(enableTx) | LPI2C_MDER_RDDE(enableRx);
AnnaBridge 161:aa5281ff4a02 644 }
AnnaBridge 161:aa5281ff4a02 645
AnnaBridge 161:aa5281ff4a02 646 /*!
AnnaBridge 161:aa5281ff4a02 647 * @brief Gets LPI2C master transmit data register address for DMA transfer.
AnnaBridge 161:aa5281ff4a02 648 *
AnnaBridge 161:aa5281ff4a02 649 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 650 * @return The LPI2C Master Transmit Data Register address.
AnnaBridge 161:aa5281ff4a02 651 */
AnnaBridge 161:aa5281ff4a02 652 static inline uint32_t LPI2C_MasterGetTxFifoAddress(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 653 {
AnnaBridge 161:aa5281ff4a02 654 return (uint32_t)&base->MTDR;
AnnaBridge 161:aa5281ff4a02 655 }
AnnaBridge 161:aa5281ff4a02 656
AnnaBridge 161:aa5281ff4a02 657 /*!
AnnaBridge 161:aa5281ff4a02 658 * @brief Gets LPI2C master receive data register address for DMA transfer.
AnnaBridge 161:aa5281ff4a02 659 *
AnnaBridge 161:aa5281ff4a02 660 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 661 * @return The LPI2C Master Receive Data Register address.
AnnaBridge 161:aa5281ff4a02 662 */
AnnaBridge 161:aa5281ff4a02 663 static inline uint32_t LPI2C_MasterGetRxFifoAddress(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 664 {
AnnaBridge 161:aa5281ff4a02 665 return (uint32_t)&base->MRDR;
AnnaBridge 161:aa5281ff4a02 666 }
AnnaBridge 161:aa5281ff4a02 667
AnnaBridge 161:aa5281ff4a02 668 /*@}*/
AnnaBridge 161:aa5281ff4a02 669
AnnaBridge 161:aa5281ff4a02 670 /*! @name FIFO control */
AnnaBridge 161:aa5281ff4a02 671 /*@{*/
AnnaBridge 161:aa5281ff4a02 672
AnnaBridge 161:aa5281ff4a02 673 /*!
AnnaBridge 161:aa5281ff4a02 674 * @brief Sets the watermarks for LPI2C master FIFOs.
AnnaBridge 161:aa5281ff4a02 675 *
AnnaBridge 161:aa5281ff4a02 676 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 677 * @param txWords Transmit FIFO watermark value in words. The #kLPI2C_MasterTxReadyFlag flag is set whenever
AnnaBridge 161:aa5281ff4a02 678 * the number of words in the transmit FIFO is equal or less than @a txWords. Writing a value equal or
AnnaBridge 161:aa5281ff4a02 679 * greater than the FIFO size is truncated.
AnnaBridge 161:aa5281ff4a02 680 * @param rxWords Receive FIFO watermark value in words. The #kLPI2C_MasterRxReadyFlag flag is set whenever
AnnaBridge 161:aa5281ff4a02 681 * the number of words in the receive FIFO is greater than @a rxWords. Writing a value equal or greater
AnnaBridge 161:aa5281ff4a02 682 * than the FIFO size is truncated.
AnnaBridge 161:aa5281ff4a02 683 */
AnnaBridge 161:aa5281ff4a02 684 static inline void LPI2C_MasterSetWatermarks(LPI2C_Type *base, size_t txWords, size_t rxWords)
AnnaBridge 161:aa5281ff4a02 685 {
AnnaBridge 161:aa5281ff4a02 686 base->MFCR = LPI2C_MFCR_TXWATER(txWords) | LPI2C_MFCR_RXWATER(rxWords);
AnnaBridge 161:aa5281ff4a02 687 }
AnnaBridge 161:aa5281ff4a02 688
AnnaBridge 161:aa5281ff4a02 689 /*!
AnnaBridge 161:aa5281ff4a02 690 * @brief Gets the current number of words in the LPI2C master FIFOs.
AnnaBridge 161:aa5281ff4a02 691 *
AnnaBridge 161:aa5281ff4a02 692 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 693 * @param[out] txCount Pointer through which the current number of words in the transmit FIFO is returned.
AnnaBridge 161:aa5281ff4a02 694 * Pass NULL if this value is not required.
AnnaBridge 161:aa5281ff4a02 695 * @param[out] rxCount Pointer through which the current number of words in the receive FIFO is returned.
AnnaBridge 161:aa5281ff4a02 696 * Pass NULL if this value is not required.
AnnaBridge 161:aa5281ff4a02 697 */
AnnaBridge 161:aa5281ff4a02 698 static inline void LPI2C_MasterGetFifoCounts(LPI2C_Type *base, size_t *rxCount, size_t *txCount)
AnnaBridge 161:aa5281ff4a02 699 {
AnnaBridge 161:aa5281ff4a02 700 if (txCount)
AnnaBridge 161:aa5281ff4a02 701 {
AnnaBridge 161:aa5281ff4a02 702 *txCount = (base->MFSR & LPI2C_MFSR_TXCOUNT_MASK) >> LPI2C_MFSR_TXCOUNT_SHIFT;
AnnaBridge 161:aa5281ff4a02 703 }
AnnaBridge 161:aa5281ff4a02 704 if (rxCount)
AnnaBridge 161:aa5281ff4a02 705 {
AnnaBridge 161:aa5281ff4a02 706 *rxCount = (base->MFSR & LPI2C_MFSR_RXCOUNT_MASK) >> LPI2C_MFSR_RXCOUNT_SHIFT;
AnnaBridge 161:aa5281ff4a02 707 }
AnnaBridge 161:aa5281ff4a02 708 }
AnnaBridge 161:aa5281ff4a02 709
AnnaBridge 161:aa5281ff4a02 710 /*@}*/
AnnaBridge 161:aa5281ff4a02 711
AnnaBridge 161:aa5281ff4a02 712 /*! @name Bus operations */
AnnaBridge 161:aa5281ff4a02 713 /*@{*/
AnnaBridge 161:aa5281ff4a02 714
AnnaBridge 161:aa5281ff4a02 715 /*!
AnnaBridge 161:aa5281ff4a02 716 * @brief Sets the I2C bus frequency for master transactions.
AnnaBridge 161:aa5281ff4a02 717 *
AnnaBridge 161:aa5281ff4a02 718 * The LPI2C master is automatically disabled and re-enabled as necessary to configure the baud
AnnaBridge 161:aa5281ff4a02 719 * rate. Do not call this function during a transfer, or the transfer is aborted.
AnnaBridge 161:aa5281ff4a02 720 *
AnnaBridge 170:e95d10626187 721 * @note Please note that the second parameter is the clock frequency of LPI2C module, the third
AnnaBridge 170:e95d10626187 722 * parameter means user configured bus baudrate, this implementation is different from other I2C drivers
AnnaBridge 170:e95d10626187 723 * which use baudrate configuration as second parameter and source clock frequency as third parameter.
AnnaBridge 170:e95d10626187 724 *
AnnaBridge 161:aa5281ff4a02 725 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 726 * @param sourceClock_Hz LPI2C functional clock frequency in Hertz.
AnnaBridge 161:aa5281ff4a02 727 * @param baudRate_Hz Requested bus frequency in Hertz.
AnnaBridge 161:aa5281ff4a02 728 */
AnnaBridge 161:aa5281ff4a02 729 void LPI2C_MasterSetBaudRate(LPI2C_Type *base, uint32_t sourceClock_Hz, uint32_t baudRate_Hz);
AnnaBridge 161:aa5281ff4a02 730
AnnaBridge 161:aa5281ff4a02 731 /*!
AnnaBridge 161:aa5281ff4a02 732 * @brief Returns whether the bus is idle.
AnnaBridge 161:aa5281ff4a02 733 *
AnnaBridge 161:aa5281ff4a02 734 * Requires the master mode to be enabled.
AnnaBridge 161:aa5281ff4a02 735 *
AnnaBridge 161:aa5281ff4a02 736 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 737 * @retval true Bus is busy.
AnnaBridge 161:aa5281ff4a02 738 * @retval false Bus is idle.
AnnaBridge 161:aa5281ff4a02 739 */
AnnaBridge 161:aa5281ff4a02 740 static inline bool LPI2C_MasterGetBusIdleState(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 741 {
AnnaBridge 161:aa5281ff4a02 742 return (base->MSR & LPI2C_MSR_BBF_MASK) >> LPI2C_MSR_BBF_SHIFT;
AnnaBridge 161:aa5281ff4a02 743 }
AnnaBridge 161:aa5281ff4a02 744
AnnaBridge 161:aa5281ff4a02 745 /*!
AnnaBridge 161:aa5281ff4a02 746 * @brief Sends a START signal and slave address on the I2C bus.
AnnaBridge 161:aa5281ff4a02 747 *
AnnaBridge 161:aa5281ff4a02 748 * This function is used to initiate a new master mode transfer. First, the bus state is checked to ensure
AnnaBridge 161:aa5281ff4a02 749 * that another master is not occupying the bus. Then a START signal is transmitted, followed by the
AnnaBridge 161:aa5281ff4a02 750 * 7-bit address specified in the @a address parameter. Note that this function does not actually wait
AnnaBridge 161:aa5281ff4a02 751 * until the START and address are successfully sent on the bus before returning.
AnnaBridge 161:aa5281ff4a02 752 *
AnnaBridge 161:aa5281ff4a02 753 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 754 * @param address 7-bit slave device address, in bits [6:0].
AnnaBridge 161:aa5281ff4a02 755 * @param dir Master transfer direction, either #kLPI2C_Read or #kLPI2C_Write. This parameter is used to set
AnnaBridge 161:aa5281ff4a02 756 * the R/w bit (bit 0) in the transmitted slave address.
AnnaBridge 161:aa5281ff4a02 757 * @retval #kStatus_Success START signal and address were successfully enqueued in the transmit FIFO.
AnnaBridge 161:aa5281ff4a02 758 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 759 */
AnnaBridge 161:aa5281ff4a02 760 status_t LPI2C_MasterStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir);
AnnaBridge 161:aa5281ff4a02 761
AnnaBridge 161:aa5281ff4a02 762 /*!
AnnaBridge 161:aa5281ff4a02 763 * @brief Sends a repeated START signal and slave address on the I2C bus.
AnnaBridge 161:aa5281ff4a02 764 *
AnnaBridge 161:aa5281ff4a02 765 * This function is used to send a Repeated START signal when a transfer is already in progress. Like
AnnaBridge 161:aa5281ff4a02 766 * LPI2C_MasterStart(), it also sends the specified 7-bit address.
AnnaBridge 161:aa5281ff4a02 767 *
AnnaBridge 161:aa5281ff4a02 768 * @note This function exists primarily to maintain compatible APIs between LPI2C and I2C drivers,
AnnaBridge 161:aa5281ff4a02 769 * as well as to better document the intent of code that uses these APIs.
AnnaBridge 161:aa5281ff4a02 770 *
AnnaBridge 161:aa5281ff4a02 771 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 772 * @param address 7-bit slave device address, in bits [6:0].
AnnaBridge 161:aa5281ff4a02 773 * @param dir Master transfer direction, either #kLPI2C_Read or #kLPI2C_Write. This parameter is used to set
AnnaBridge 161:aa5281ff4a02 774 * the R/w bit (bit 0) in the transmitted slave address.
AnnaBridge 161:aa5281ff4a02 775 * @retval #kStatus_Success Repeated START signal and address were successfully enqueued in the transmit FIFO.
AnnaBridge 161:aa5281ff4a02 776 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 777 */
AnnaBridge 161:aa5281ff4a02 778 static inline status_t LPI2C_MasterRepeatedStart(LPI2C_Type *base, uint8_t address, lpi2c_direction_t dir)
AnnaBridge 161:aa5281ff4a02 779 {
AnnaBridge 161:aa5281ff4a02 780 return LPI2C_MasterStart(base, address, dir);
AnnaBridge 161:aa5281ff4a02 781 }
AnnaBridge 161:aa5281ff4a02 782
AnnaBridge 161:aa5281ff4a02 783 /*!
AnnaBridge 161:aa5281ff4a02 784 * @brief Performs a polling send transfer on the I2C bus.
AnnaBridge 161:aa5281ff4a02 785 *
AnnaBridge 161:aa5281ff4a02 786 * Sends up to @a txSize number of bytes to the previously addressed slave device. The slave may
AnnaBridge 161:aa5281ff4a02 787 * reply with a NAK to any byte in order to terminate the transfer early. If this happens, this
AnnaBridge 161:aa5281ff4a02 788 * function returns #kStatus_LPI2C_Nak.
AnnaBridge 161:aa5281ff4a02 789 *
AnnaBridge 161:aa5281ff4a02 790 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 791 * @param txBuff The pointer to the data to be transferred.
AnnaBridge 161:aa5281ff4a02 792 * @param txSize The length in bytes of the data to be transferred.
AnnaBridge 161:aa5281ff4a02 793 * @retval #kStatus_Success Data was sent successfully.
AnnaBridge 161:aa5281ff4a02 794 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 795 * @retval #kStatus_LPI2C_Nak The slave device sent a NAK in response to a byte.
AnnaBridge 161:aa5281ff4a02 796 * @retval #kStatus_LPI2C_FifoError FIFO under run or over run.
AnnaBridge 161:aa5281ff4a02 797 * @retval #kStatus_LPI2C_ArbitrationLost Arbitration lost error.
AnnaBridge 161:aa5281ff4a02 798 * @retval #kStatus_LPI2C_PinLowTimeout SCL or SDA were held low longer than the timeout.
AnnaBridge 161:aa5281ff4a02 799 */
AnnaBridge 161:aa5281ff4a02 800 status_t LPI2C_MasterSend(LPI2C_Type *base, const void *txBuff, size_t txSize);
AnnaBridge 161:aa5281ff4a02 801
AnnaBridge 161:aa5281ff4a02 802 /*!
AnnaBridge 161:aa5281ff4a02 803 * @brief Performs a polling receive transfer on the I2C bus.
AnnaBridge 161:aa5281ff4a02 804 *
AnnaBridge 161:aa5281ff4a02 805 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 806 * @param rxBuff The pointer to the data to be transferred.
AnnaBridge 161:aa5281ff4a02 807 * @param rxSize The length in bytes of the data to be transferred.
AnnaBridge 161:aa5281ff4a02 808 * @retval #kStatus_Success Data was received successfully.
AnnaBridge 161:aa5281ff4a02 809 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 810 * @retval #kStatus_LPI2C_Nak The slave device sent a NAK in response to a byte.
AnnaBridge 161:aa5281ff4a02 811 * @retval #kStatus_LPI2C_FifoError FIFO under run or overrun.
AnnaBridge 161:aa5281ff4a02 812 * @retval #kStatus_LPI2C_ArbitrationLost Arbitration lost error.
AnnaBridge 161:aa5281ff4a02 813 * @retval #kStatus_LPI2C_PinLowTimeout SCL or SDA were held low longer than the timeout.
AnnaBridge 161:aa5281ff4a02 814 */
AnnaBridge 161:aa5281ff4a02 815 status_t LPI2C_MasterReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize);
AnnaBridge 161:aa5281ff4a02 816
AnnaBridge 161:aa5281ff4a02 817 /*!
AnnaBridge 161:aa5281ff4a02 818 * @brief Sends a STOP signal on the I2C bus.
AnnaBridge 161:aa5281ff4a02 819 *
AnnaBridge 161:aa5281ff4a02 820 * This function does not return until the STOP signal is seen on the bus, or an error occurs.
AnnaBridge 161:aa5281ff4a02 821 *
AnnaBridge 161:aa5281ff4a02 822 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 823 * @retval #kStatus_Success The STOP signal was successfully sent on the bus and the transaction terminated.
AnnaBridge 161:aa5281ff4a02 824 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 825 * @retval #kStatus_LPI2C_Nak The slave device sent a NAK in response to a byte.
AnnaBridge 161:aa5281ff4a02 826 * @retval #kStatus_LPI2C_FifoError FIFO under run or overrun.
AnnaBridge 161:aa5281ff4a02 827 * @retval #kStatus_LPI2C_ArbitrationLost Arbitration lost error.
AnnaBridge 161:aa5281ff4a02 828 * @retval #kStatus_LPI2C_PinLowTimeout SCL or SDA were held low longer than the timeout.
AnnaBridge 161:aa5281ff4a02 829 */
AnnaBridge 161:aa5281ff4a02 830 status_t LPI2C_MasterStop(LPI2C_Type *base);
AnnaBridge 161:aa5281ff4a02 831
AnnaBridge 161:aa5281ff4a02 832 /*!
AnnaBridge 161:aa5281ff4a02 833 * @brief Performs a master polling transfer on the I2C bus.
AnnaBridge 161:aa5281ff4a02 834 *
AnnaBridge 161:aa5281ff4a02 835 * @note The API does not return until the transfer succeeds or fails due
AnnaBridge 161:aa5281ff4a02 836 * to error happens during transfer.
AnnaBridge 161:aa5281ff4a02 837 *
AnnaBridge 161:aa5281ff4a02 838 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 839 * @param transfer Pointer to the transfer structure.
AnnaBridge 161:aa5281ff4a02 840 * @retval #kStatus_Success Data was received successfully.
AnnaBridge 161:aa5281ff4a02 841 * @retval #kStatus_LPI2C_Busy Another master is currently utilizing the bus.
AnnaBridge 161:aa5281ff4a02 842 * @retval #kStatus_LPI2C_Nak The slave device sent a NAK in response to a byte.
AnnaBridge 161:aa5281ff4a02 843 * @retval #kStatus_LPI2C_FifoError FIFO under run or overrun.
AnnaBridge 161:aa5281ff4a02 844 * @retval #kStatus_LPI2C_ArbitrationLost Arbitration lost error.
AnnaBridge 161:aa5281ff4a02 845 * @retval #kStatus_LPI2C_PinLowTimeout SCL or SDA were held low longer than the timeout.
AnnaBridge 161:aa5281ff4a02 846 */
AnnaBridge 161:aa5281ff4a02 847 status_t LPI2C_MasterTransferBlocking(LPI2C_Type *base, lpi2c_master_transfer_t *transfer);
AnnaBridge 161:aa5281ff4a02 848
AnnaBridge 161:aa5281ff4a02 849 /*@}*/
AnnaBridge 161:aa5281ff4a02 850
AnnaBridge 161:aa5281ff4a02 851 /*! @name Non-blocking */
AnnaBridge 161:aa5281ff4a02 852 /*@{*/
AnnaBridge 161:aa5281ff4a02 853
AnnaBridge 161:aa5281ff4a02 854 /*!
AnnaBridge 161:aa5281ff4a02 855 * @brief Creates a new handle for the LPI2C master non-blocking APIs.
AnnaBridge 161:aa5281ff4a02 856 *
AnnaBridge 161:aa5281ff4a02 857 * The creation of a handle is for use with the non-blocking APIs. Once a handle
AnnaBridge 161:aa5281ff4a02 858 * is created, there is not a corresponding destroy handle. If the user wants to
AnnaBridge 161:aa5281ff4a02 859 * terminate a transfer, the LPI2C_MasterTransferAbort() API shall be called.
AnnaBridge 161:aa5281ff4a02 860 *
AnnaBridge 170:e95d10626187 861 *
AnnaBridge 170:e95d10626187 862 * @note The function also enables the NVIC IRQ for the input LPI2C. Need to notice
AnnaBridge 170:e95d10626187 863 * that on some SoCs the LPI2C IRQ is connected to INTMUX, in this case user needs to
AnnaBridge 170:e95d10626187 864 * enable the associated INTMUX IRQ in application.
AnnaBridge 170:e95d10626187 865 *
AnnaBridge 161:aa5281ff4a02 866 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 867 * @param[out] handle Pointer to the LPI2C master driver handle.
AnnaBridge 161:aa5281ff4a02 868 * @param callback User provided pointer to the asynchronous callback function.
AnnaBridge 161:aa5281ff4a02 869 * @param userData User provided pointer to the application callback data.
AnnaBridge 161:aa5281ff4a02 870 */
AnnaBridge 161:aa5281ff4a02 871 void LPI2C_MasterTransferCreateHandle(LPI2C_Type *base,
AnnaBridge 161:aa5281ff4a02 872 lpi2c_master_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 873 lpi2c_master_transfer_callback_t callback,
AnnaBridge 161:aa5281ff4a02 874 void *userData);
AnnaBridge 161:aa5281ff4a02 875
AnnaBridge 161:aa5281ff4a02 876 /*!
AnnaBridge 161:aa5281ff4a02 877 * @brief Performs a non-blocking transaction on the I2C bus.
AnnaBridge 161:aa5281ff4a02 878 *
AnnaBridge 161:aa5281ff4a02 879 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 880 * @param handle Pointer to the LPI2C master driver handle.
AnnaBridge 161:aa5281ff4a02 881 * @param transfer The pointer to the transfer descriptor.
AnnaBridge 161:aa5281ff4a02 882 * @retval #kStatus_Success The transaction was started successfully.
AnnaBridge 161:aa5281ff4a02 883 * @retval #kStatus_LPI2C_Busy Either another master is currently utilizing the bus, or a non-blocking
AnnaBridge 161:aa5281ff4a02 884 * transaction is already in progress.
AnnaBridge 161:aa5281ff4a02 885 */
AnnaBridge 161:aa5281ff4a02 886 status_t LPI2C_MasterTransferNonBlocking(LPI2C_Type *base,
AnnaBridge 161:aa5281ff4a02 887 lpi2c_master_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 888 lpi2c_master_transfer_t *transfer);
AnnaBridge 161:aa5281ff4a02 889
AnnaBridge 161:aa5281ff4a02 890 /*!
AnnaBridge 161:aa5281ff4a02 891 * @brief Returns number of bytes transferred so far.
AnnaBridge 161:aa5281ff4a02 892 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 893 * @param handle Pointer to the LPI2C master driver handle.
AnnaBridge 161:aa5281ff4a02 894 * @param[out] count Number of bytes transferred so far by the non-blocking transaction.
AnnaBridge 161:aa5281ff4a02 895 * @retval #kStatus_Success
AnnaBridge 161:aa5281ff4a02 896 * @retval #kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
AnnaBridge 161:aa5281ff4a02 897 */
AnnaBridge 161:aa5281ff4a02 898 status_t LPI2C_MasterTransferGetCount(LPI2C_Type *base, lpi2c_master_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 899
AnnaBridge 161:aa5281ff4a02 900 /*!
AnnaBridge 161:aa5281ff4a02 901 * @brief Terminates a non-blocking LPI2C master transmission early.
AnnaBridge 161:aa5281ff4a02 902 *
AnnaBridge 161:aa5281ff4a02 903 * @note It is not safe to call this function from an IRQ handler that has a higher priority than the
AnnaBridge 161:aa5281ff4a02 904 * LPI2C peripheral's IRQ priority.
AnnaBridge 161:aa5281ff4a02 905 *
AnnaBridge 161:aa5281ff4a02 906 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 907 * @param handle Pointer to the LPI2C master driver handle.
AnnaBridge 161:aa5281ff4a02 908 * @retval #kStatus_Success A transaction was successfully aborted.
AnnaBridge 161:aa5281ff4a02 909 * @retval #kStatus_LPI2C_Idle There is not a non-blocking transaction currently in progress.
AnnaBridge 161:aa5281ff4a02 910 */
AnnaBridge 161:aa5281ff4a02 911 void LPI2C_MasterTransferAbort(LPI2C_Type *base, lpi2c_master_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 912
AnnaBridge 161:aa5281ff4a02 913 /*@}*/
AnnaBridge 161:aa5281ff4a02 914
AnnaBridge 161:aa5281ff4a02 915 /*! @name IRQ handler */
AnnaBridge 161:aa5281ff4a02 916 /*@{*/
AnnaBridge 161:aa5281ff4a02 917
AnnaBridge 161:aa5281ff4a02 918 /*!
AnnaBridge 161:aa5281ff4a02 919 * @brief Reusable routine to handle master interrupts.
AnnaBridge 161:aa5281ff4a02 920 * @note This function does not need to be called unless you are reimplementing the
AnnaBridge 161:aa5281ff4a02 921 * nonblocking API's interrupt handler routines to add special functionality.
AnnaBridge 161:aa5281ff4a02 922 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 923 * @param handle Pointer to the LPI2C master driver handle.
AnnaBridge 161:aa5281ff4a02 924 */
AnnaBridge 161:aa5281ff4a02 925 void LPI2C_MasterTransferHandleIRQ(LPI2C_Type *base, lpi2c_master_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 926
AnnaBridge 161:aa5281ff4a02 927 /*@}*/
AnnaBridge 161:aa5281ff4a02 928
AnnaBridge 161:aa5281ff4a02 929 /*! @} */
AnnaBridge 161:aa5281ff4a02 930
AnnaBridge 161:aa5281ff4a02 931 /*!
AnnaBridge 161:aa5281ff4a02 932 * @addtogroup lpi2c_slave_driver
AnnaBridge 161:aa5281ff4a02 933 * @{
AnnaBridge 161:aa5281ff4a02 934 */
AnnaBridge 161:aa5281ff4a02 935
AnnaBridge 161:aa5281ff4a02 936 /*! @name Slave initialization and deinitialization */
AnnaBridge 161:aa5281ff4a02 937 /*@{*/
AnnaBridge 161:aa5281ff4a02 938
AnnaBridge 161:aa5281ff4a02 939 /*!
AnnaBridge 161:aa5281ff4a02 940 * @brief Provides a default configuration for the LPI2C slave peripheral.
AnnaBridge 161:aa5281ff4a02 941 *
AnnaBridge 161:aa5281ff4a02 942 * This function provides the following default configuration for the LPI2C slave peripheral:
AnnaBridge 161:aa5281ff4a02 943 * @code
AnnaBridge 161:aa5281ff4a02 944 * slaveConfig->enableSlave = true;
AnnaBridge 161:aa5281ff4a02 945 * slaveConfig->address0 = 0U;
AnnaBridge 161:aa5281ff4a02 946 * slaveConfig->address1 = 0U;
AnnaBridge 161:aa5281ff4a02 947 * slaveConfig->addressMatchMode = kLPI2C_MatchAddress0;
AnnaBridge 161:aa5281ff4a02 948 * slaveConfig->filterDozeEnable = true;
AnnaBridge 161:aa5281ff4a02 949 * slaveConfig->filterEnable = true;
AnnaBridge 161:aa5281ff4a02 950 * slaveConfig->enableGeneralCall = false;
AnnaBridge 161:aa5281ff4a02 951 * slaveConfig->sclStall.enableAck = false;
AnnaBridge 161:aa5281ff4a02 952 * slaveConfig->sclStall.enableTx = true;
AnnaBridge 161:aa5281ff4a02 953 * slaveConfig->sclStall.enableRx = true;
AnnaBridge 161:aa5281ff4a02 954 * slaveConfig->sclStall.enableAddress = true;
AnnaBridge 161:aa5281ff4a02 955 * slaveConfig->ignoreAck = false;
AnnaBridge 161:aa5281ff4a02 956 * slaveConfig->enableReceivedAddressRead = false;
AnnaBridge 170:e95d10626187 957 * slaveConfig->sdaGlitchFilterWidth_ns = 0;
AnnaBridge 161:aa5281ff4a02 958 * slaveConfig->sclGlitchFilterWidth_ns = 0;
AnnaBridge 161:aa5281ff4a02 959 * slaveConfig->dataValidDelay_ns = 0;
AnnaBridge 161:aa5281ff4a02 960 * slaveConfig->clockHoldTime_ns = 0;
AnnaBridge 161:aa5281ff4a02 961 * @endcode
AnnaBridge 161:aa5281ff4a02 962 *
AnnaBridge 161:aa5281ff4a02 963 * After calling this function, override any settings to customize the configuration,
AnnaBridge 161:aa5281ff4a02 964 * prior to initializing the master driver with LPI2C_SlaveInit(). Be sure to override at least the @a
AnnaBridge 161:aa5281ff4a02 965 * address0 member of the configuration structure with the desired slave address.
AnnaBridge 161:aa5281ff4a02 966 *
AnnaBridge 161:aa5281ff4a02 967 * @param[out] slaveConfig User provided configuration structure that is set to default values. Refer to
AnnaBridge 161:aa5281ff4a02 968 * #lpi2c_slave_config_t.
AnnaBridge 161:aa5281ff4a02 969 */
AnnaBridge 161:aa5281ff4a02 970 void LPI2C_SlaveGetDefaultConfig(lpi2c_slave_config_t *slaveConfig);
AnnaBridge 161:aa5281ff4a02 971
AnnaBridge 161:aa5281ff4a02 972 /*!
AnnaBridge 161:aa5281ff4a02 973 * @brief Initializes the LPI2C slave peripheral.
AnnaBridge 161:aa5281ff4a02 974 *
AnnaBridge 161:aa5281ff4a02 975 * This function enables the peripheral clock and initializes the LPI2C slave peripheral as described by the user
AnnaBridge 161:aa5281ff4a02 976 * provided configuration.
AnnaBridge 161:aa5281ff4a02 977 *
AnnaBridge 161:aa5281ff4a02 978 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 979 * @param slaveConfig User provided peripheral configuration. Use LPI2C_SlaveGetDefaultConfig() to get a set of defaults
AnnaBridge 161:aa5281ff4a02 980 * that you can override.
AnnaBridge 161:aa5281ff4a02 981 * @param sourceClock_Hz Frequency in Hertz of the LPI2C functional clock. Used to calculate the filter widths,
AnnaBridge 161:aa5281ff4a02 982 * data valid delay, and clock hold time.
AnnaBridge 161:aa5281ff4a02 983 */
AnnaBridge 161:aa5281ff4a02 984 void LPI2C_SlaveInit(LPI2C_Type *base, const lpi2c_slave_config_t *slaveConfig, uint32_t sourceClock_Hz);
AnnaBridge 161:aa5281ff4a02 985
AnnaBridge 161:aa5281ff4a02 986 /*!
AnnaBridge 161:aa5281ff4a02 987 * @brief Deinitializes the LPI2C slave peripheral.
AnnaBridge 161:aa5281ff4a02 988 *
AnnaBridge 161:aa5281ff4a02 989 * This function disables the LPI2C slave peripheral and gates the clock. It also performs a software
AnnaBridge 161:aa5281ff4a02 990 * reset to restore the peripheral to reset conditions.
AnnaBridge 161:aa5281ff4a02 991 *
AnnaBridge 161:aa5281ff4a02 992 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 993 */
AnnaBridge 161:aa5281ff4a02 994 void LPI2C_SlaveDeinit(LPI2C_Type *base);
AnnaBridge 161:aa5281ff4a02 995
AnnaBridge 161:aa5281ff4a02 996 /*!
AnnaBridge 161:aa5281ff4a02 997 * @brief Performs a software reset of the LPI2C slave peripheral.
AnnaBridge 161:aa5281ff4a02 998 *
AnnaBridge 161:aa5281ff4a02 999 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1000 */
AnnaBridge 161:aa5281ff4a02 1001 static inline void LPI2C_SlaveReset(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 1002 {
AnnaBridge 161:aa5281ff4a02 1003 base->SCR = LPI2C_SCR_RST_MASK;
AnnaBridge 161:aa5281ff4a02 1004 base->SCR = 0;
AnnaBridge 161:aa5281ff4a02 1005 }
AnnaBridge 161:aa5281ff4a02 1006
AnnaBridge 161:aa5281ff4a02 1007 /*!
AnnaBridge 161:aa5281ff4a02 1008 * @brief Enables or disables the LPI2C module as slave.
AnnaBridge 161:aa5281ff4a02 1009 *
AnnaBridge 161:aa5281ff4a02 1010 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1011 * @param enable Pass true to enable or false to disable the specified LPI2C as slave.
AnnaBridge 161:aa5281ff4a02 1012 */
AnnaBridge 161:aa5281ff4a02 1013 static inline void LPI2C_SlaveEnable(LPI2C_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 1014 {
AnnaBridge 161:aa5281ff4a02 1015 base->SCR = (base->SCR & ~LPI2C_SCR_SEN_MASK) | LPI2C_SCR_SEN(enable);
AnnaBridge 161:aa5281ff4a02 1016 }
AnnaBridge 161:aa5281ff4a02 1017
AnnaBridge 161:aa5281ff4a02 1018 /*@}*/
AnnaBridge 161:aa5281ff4a02 1019
AnnaBridge 161:aa5281ff4a02 1020 /*! @name Slave status */
AnnaBridge 161:aa5281ff4a02 1021 /*@{*/
AnnaBridge 161:aa5281ff4a02 1022
AnnaBridge 161:aa5281ff4a02 1023 /*!
AnnaBridge 161:aa5281ff4a02 1024 * @brief Gets the LPI2C slave status flags.
AnnaBridge 161:aa5281ff4a02 1025 *
AnnaBridge 161:aa5281ff4a02 1026 * A bit mask with the state of all LPI2C slave status flags is returned. For each flag, the corresponding bit
AnnaBridge 161:aa5281ff4a02 1027 * in the return value is set if the flag is asserted.
AnnaBridge 161:aa5281ff4a02 1028 *
AnnaBridge 161:aa5281ff4a02 1029 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1030 * @return State of the status flags:
AnnaBridge 161:aa5281ff4a02 1031 * - 1: related status flag is set.
AnnaBridge 161:aa5281ff4a02 1032 * - 0: related status flag is not set.
AnnaBridge 161:aa5281ff4a02 1033 * @see _lpi2c_slave_flags
AnnaBridge 161:aa5281ff4a02 1034 */
AnnaBridge 161:aa5281ff4a02 1035 static inline uint32_t LPI2C_SlaveGetStatusFlags(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 1036 {
AnnaBridge 161:aa5281ff4a02 1037 return base->SSR;
AnnaBridge 161:aa5281ff4a02 1038 }
AnnaBridge 161:aa5281ff4a02 1039
AnnaBridge 161:aa5281ff4a02 1040 /*!
AnnaBridge 161:aa5281ff4a02 1041 * @brief Clears the LPI2C status flag state.
AnnaBridge 161:aa5281ff4a02 1042 *
AnnaBridge 161:aa5281ff4a02 1043 * The following status register flags can be cleared:
AnnaBridge 161:aa5281ff4a02 1044 * - #kLPI2C_SlaveRepeatedStartDetectFlag
AnnaBridge 161:aa5281ff4a02 1045 * - #kLPI2C_SlaveStopDetectFlag
AnnaBridge 161:aa5281ff4a02 1046 * - #kLPI2C_SlaveBitErrFlag
AnnaBridge 161:aa5281ff4a02 1047 * - #kLPI2C_SlaveFifoErrFlag
AnnaBridge 161:aa5281ff4a02 1048 *
AnnaBridge 161:aa5281ff4a02 1049 * Attempts to clear other flags has no effect.
AnnaBridge 161:aa5281ff4a02 1050 *
AnnaBridge 161:aa5281ff4a02 1051 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1052 * @param statusMask A bitmask of status flags that are to be cleared. The mask is composed of
AnnaBridge 161:aa5281ff4a02 1053 * #_lpi2c_slave_flags enumerators OR'd together. You may pass the result of a previous call to
AnnaBridge 161:aa5281ff4a02 1054 * LPI2C_SlaveGetStatusFlags().
AnnaBridge 161:aa5281ff4a02 1055 * @see _lpi2c_slave_flags.
AnnaBridge 161:aa5281ff4a02 1056 */
AnnaBridge 161:aa5281ff4a02 1057 static inline void LPI2C_SlaveClearStatusFlags(LPI2C_Type *base, uint32_t statusMask)
AnnaBridge 161:aa5281ff4a02 1058 {
AnnaBridge 161:aa5281ff4a02 1059 base->SSR = statusMask;
AnnaBridge 161:aa5281ff4a02 1060 }
AnnaBridge 161:aa5281ff4a02 1061
AnnaBridge 161:aa5281ff4a02 1062 /*@}*/
AnnaBridge 161:aa5281ff4a02 1063
AnnaBridge 161:aa5281ff4a02 1064 /*! @name Slave interrupts */
AnnaBridge 161:aa5281ff4a02 1065 /*@{*/
AnnaBridge 161:aa5281ff4a02 1066
AnnaBridge 161:aa5281ff4a02 1067 /*!
AnnaBridge 161:aa5281ff4a02 1068 * @brief Enables the LPI2C slave interrupt requests.
AnnaBridge 161:aa5281ff4a02 1069 *
AnnaBridge 161:aa5281ff4a02 1070 * All flags except #kLPI2C_SlaveBusyFlag and #kLPI2C_SlaveBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 1071 * interrupts.
AnnaBridge 161:aa5281ff4a02 1072 *
AnnaBridge 161:aa5281ff4a02 1073 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1074 * @param interruptMask Bit mask of interrupts to enable. See #_lpi2c_slave_flags for the set
AnnaBridge 161:aa5281ff4a02 1075 * of constants that should be OR'd together to form the bit mask.
AnnaBridge 161:aa5281ff4a02 1076 */
AnnaBridge 161:aa5281ff4a02 1077 static inline void LPI2C_SlaveEnableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
AnnaBridge 161:aa5281ff4a02 1078 {
AnnaBridge 161:aa5281ff4a02 1079 base->SIER |= interruptMask;
AnnaBridge 161:aa5281ff4a02 1080 }
AnnaBridge 161:aa5281ff4a02 1081
AnnaBridge 161:aa5281ff4a02 1082 /*!
AnnaBridge 161:aa5281ff4a02 1083 * @brief Disables the LPI2C slave interrupt requests.
AnnaBridge 161:aa5281ff4a02 1084 *
AnnaBridge 161:aa5281ff4a02 1085 * All flags except #kLPI2C_SlaveBusyFlag and #kLPI2C_SlaveBusBusyFlag can be enabled as
AnnaBridge 161:aa5281ff4a02 1086 * interrupts.
AnnaBridge 161:aa5281ff4a02 1087 *
AnnaBridge 161:aa5281ff4a02 1088 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1089 * @param interruptMask Bit mask of interrupts to disable. See #_lpi2c_slave_flags for the set
AnnaBridge 161:aa5281ff4a02 1090 * of constants that should be OR'd together to form the bit mask.
AnnaBridge 161:aa5281ff4a02 1091 */
AnnaBridge 161:aa5281ff4a02 1092 static inline void LPI2C_SlaveDisableInterrupts(LPI2C_Type *base, uint32_t interruptMask)
AnnaBridge 161:aa5281ff4a02 1093 {
AnnaBridge 161:aa5281ff4a02 1094 base->SIER &= ~interruptMask;
AnnaBridge 161:aa5281ff4a02 1095 }
AnnaBridge 161:aa5281ff4a02 1096
AnnaBridge 161:aa5281ff4a02 1097 /*!
AnnaBridge 161:aa5281ff4a02 1098 * @brief Returns the set of currently enabled LPI2C slave interrupt requests.
AnnaBridge 161:aa5281ff4a02 1099 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1100 * @return A bitmask composed of #_lpi2c_slave_flags enumerators OR'd together to indicate the
AnnaBridge 161:aa5281ff4a02 1101 * set of enabled interrupts.
AnnaBridge 161:aa5281ff4a02 1102 */
AnnaBridge 161:aa5281ff4a02 1103 static inline uint32_t LPI2C_SlaveGetEnabledInterrupts(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 1104 {
AnnaBridge 161:aa5281ff4a02 1105 return base->SIER;
AnnaBridge 161:aa5281ff4a02 1106 }
AnnaBridge 161:aa5281ff4a02 1107
AnnaBridge 161:aa5281ff4a02 1108 /*@}*/
AnnaBridge 161:aa5281ff4a02 1109
AnnaBridge 161:aa5281ff4a02 1110 /*! @name Slave DMA control */
AnnaBridge 161:aa5281ff4a02 1111 /*@{*/
AnnaBridge 161:aa5281ff4a02 1112
AnnaBridge 161:aa5281ff4a02 1113 /*!
AnnaBridge 161:aa5281ff4a02 1114 * @brief Enables or disables the LPI2C slave peripheral DMA requests.
AnnaBridge 161:aa5281ff4a02 1115 *
AnnaBridge 161:aa5281ff4a02 1116 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1117 * @param enableAddressValid Enable flag for the address valid DMA request. Pass true for enable, false for disable.
AnnaBridge 161:aa5281ff4a02 1118 * The address valid DMA request is shared with the receive data DMA request.
AnnaBridge 161:aa5281ff4a02 1119 * @param enableRx Enable flag for the receive data DMA request. Pass true for enable, false for disable.
AnnaBridge 161:aa5281ff4a02 1120 * @param enableTx Enable flag for the transmit data DMA request. Pass true for enable, false for disable.
AnnaBridge 161:aa5281ff4a02 1121 */
AnnaBridge 161:aa5281ff4a02 1122 static inline void LPI2C_SlaveEnableDMA(LPI2C_Type *base, bool enableAddressValid, bool enableRx, bool enableTx)
AnnaBridge 161:aa5281ff4a02 1123 {
AnnaBridge 161:aa5281ff4a02 1124 base->SDER = (base->SDER & ~(LPI2C_SDER_AVDE_MASK | LPI2C_SDER_RDDE_MASK | LPI2C_SDER_TDDE_MASK)) |
AnnaBridge 161:aa5281ff4a02 1125 LPI2C_SDER_AVDE(enableAddressValid) | LPI2C_SDER_RDDE(enableRx) | LPI2C_SDER_TDDE(enableTx);
AnnaBridge 161:aa5281ff4a02 1126 }
AnnaBridge 161:aa5281ff4a02 1127
AnnaBridge 161:aa5281ff4a02 1128 /*@}*/
AnnaBridge 161:aa5281ff4a02 1129
AnnaBridge 161:aa5281ff4a02 1130 /*! @name Slave bus operations */
AnnaBridge 161:aa5281ff4a02 1131 /*@{*/
AnnaBridge 161:aa5281ff4a02 1132
AnnaBridge 161:aa5281ff4a02 1133 /*!
AnnaBridge 161:aa5281ff4a02 1134 * @brief Returns whether the bus is idle.
AnnaBridge 161:aa5281ff4a02 1135 *
AnnaBridge 161:aa5281ff4a02 1136 * Requires the slave mode to be enabled.
AnnaBridge 161:aa5281ff4a02 1137 *
AnnaBridge 161:aa5281ff4a02 1138 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1139 * @retval true Bus is busy.
AnnaBridge 161:aa5281ff4a02 1140 * @retval false Bus is idle.
AnnaBridge 161:aa5281ff4a02 1141 */
AnnaBridge 161:aa5281ff4a02 1142 static inline bool LPI2C_SlaveGetBusIdleState(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 1143 {
AnnaBridge 161:aa5281ff4a02 1144 return (base->SSR & LPI2C_SSR_BBF_MASK) >> LPI2C_SSR_BBF_SHIFT;
AnnaBridge 161:aa5281ff4a02 1145 }
AnnaBridge 161:aa5281ff4a02 1146
AnnaBridge 161:aa5281ff4a02 1147 /*!
AnnaBridge 161:aa5281ff4a02 1148 * @brief Transmits either an ACK or NAK on the I2C bus in response to a byte from the master.
AnnaBridge 161:aa5281ff4a02 1149 *
AnnaBridge 161:aa5281ff4a02 1150 * Use this function to send an ACK or NAK when the #kLPI2C_SlaveTransmitAckFlag is asserted. This
AnnaBridge 161:aa5281ff4a02 1151 * only happens if you enable the sclStall.enableAck field of the ::lpi2c_slave_config_t configuration
AnnaBridge 161:aa5281ff4a02 1152 * structure used to initialize the slave peripheral.
AnnaBridge 161:aa5281ff4a02 1153 *
AnnaBridge 161:aa5281ff4a02 1154 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1155 * @param ackOrNack Pass true for an ACK or false for a NAK.
AnnaBridge 161:aa5281ff4a02 1156 */
AnnaBridge 161:aa5281ff4a02 1157 static inline void LPI2C_SlaveTransmitAck(LPI2C_Type *base, bool ackOrNack)
AnnaBridge 161:aa5281ff4a02 1158 {
AnnaBridge 161:aa5281ff4a02 1159 base->STAR = LPI2C_STAR_TXNACK(!ackOrNack);
AnnaBridge 161:aa5281ff4a02 1160 }
AnnaBridge 161:aa5281ff4a02 1161
AnnaBridge 161:aa5281ff4a02 1162 /*!
AnnaBridge 161:aa5281ff4a02 1163 * @brief Returns the slave address sent by the I2C master.
AnnaBridge 161:aa5281ff4a02 1164 *
AnnaBridge 161:aa5281ff4a02 1165 * This function should only be called if the #kLPI2C_SlaveAddressValidFlag is asserted.
AnnaBridge 161:aa5281ff4a02 1166 *
AnnaBridge 161:aa5281ff4a02 1167 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1168 * @return The 8-bit address matched by the LPI2C slave. Bit 0 contains the R/w direction bit, and
AnnaBridge 161:aa5281ff4a02 1169 * the 7-bit slave address is in the upper 7 bits.
AnnaBridge 161:aa5281ff4a02 1170 */
AnnaBridge 161:aa5281ff4a02 1171 static inline uint32_t LPI2C_SlaveGetReceivedAddress(LPI2C_Type *base)
AnnaBridge 161:aa5281ff4a02 1172 {
AnnaBridge 161:aa5281ff4a02 1173 return base->SASR & LPI2C_SASR_RADDR_MASK;
AnnaBridge 161:aa5281ff4a02 1174 }
AnnaBridge 161:aa5281ff4a02 1175
AnnaBridge 161:aa5281ff4a02 1176 /*!
AnnaBridge 161:aa5281ff4a02 1177 * @brief Performs a polling send transfer on the I2C bus.
AnnaBridge 161:aa5281ff4a02 1178 *
AnnaBridge 161:aa5281ff4a02 1179 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1180 * @param txBuff The pointer to the data to be transferred.
AnnaBridge 161:aa5281ff4a02 1181 * @param txSize The length in bytes of the data to be transferred.
AnnaBridge 161:aa5281ff4a02 1182 * @param[out] actualTxSize
AnnaBridge 161:aa5281ff4a02 1183 * @return Error or success status returned by API.
AnnaBridge 161:aa5281ff4a02 1184 */
AnnaBridge 161:aa5281ff4a02 1185 status_t LPI2C_SlaveSend(LPI2C_Type *base, const void *txBuff, size_t txSize, size_t *actualTxSize);
AnnaBridge 161:aa5281ff4a02 1186
AnnaBridge 161:aa5281ff4a02 1187 /*!
AnnaBridge 161:aa5281ff4a02 1188 * @brief Performs a polling receive transfer on the I2C bus.
AnnaBridge 161:aa5281ff4a02 1189 *
AnnaBridge 161:aa5281ff4a02 1190 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1191 * @param rxBuff The pointer to the data to be transferred.
AnnaBridge 161:aa5281ff4a02 1192 * @param rxSize The length in bytes of the data to be transferred.
AnnaBridge 161:aa5281ff4a02 1193 * @param[out] actualRxSize
AnnaBridge 161:aa5281ff4a02 1194 * @return Error or success status returned by API.
AnnaBridge 161:aa5281ff4a02 1195 */
AnnaBridge 161:aa5281ff4a02 1196 status_t LPI2C_SlaveReceive(LPI2C_Type *base, void *rxBuff, size_t rxSize, size_t *actualRxSize);
AnnaBridge 161:aa5281ff4a02 1197
AnnaBridge 161:aa5281ff4a02 1198 /*@}*/
AnnaBridge 161:aa5281ff4a02 1199
AnnaBridge 161:aa5281ff4a02 1200 /*! @name Slave non-blocking */
AnnaBridge 161:aa5281ff4a02 1201 /*@{*/
AnnaBridge 161:aa5281ff4a02 1202
AnnaBridge 161:aa5281ff4a02 1203 /*!
AnnaBridge 161:aa5281ff4a02 1204 * @brief Creates a new handle for the LPI2C slave non-blocking APIs.
AnnaBridge 161:aa5281ff4a02 1205 *
AnnaBridge 161:aa5281ff4a02 1206 * The creation of a handle is for use with the non-blocking APIs. Once a handle
AnnaBridge 161:aa5281ff4a02 1207 * is created, there is not a corresponding destroy handle. If the user wants to
AnnaBridge 161:aa5281ff4a02 1208 * terminate a transfer, the LPI2C_SlaveTransferAbort() API shall be called.
AnnaBridge 161:aa5281ff4a02 1209 *
AnnaBridge 170:e95d10626187 1210 * @note The function also enables the NVIC IRQ for the input LPI2C. Need to notice
AnnaBridge 170:e95d10626187 1211 * that on some SoCs the LPI2C IRQ is connected to INTMUX, in this case user needs to
AnnaBridge 170:e95d10626187 1212 * enable the associated INTMUX IRQ in application.
AnnaBridge 170:e95d10626187 1213
AnnaBridge 161:aa5281ff4a02 1214 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1215 * @param[out] handle Pointer to the LPI2C slave driver handle.
AnnaBridge 161:aa5281ff4a02 1216 * @param callback User provided pointer to the asynchronous callback function.
AnnaBridge 161:aa5281ff4a02 1217 * @param userData User provided pointer to the application callback data.
AnnaBridge 161:aa5281ff4a02 1218 */
AnnaBridge 161:aa5281ff4a02 1219 void LPI2C_SlaveTransferCreateHandle(LPI2C_Type *base,
AnnaBridge 161:aa5281ff4a02 1220 lpi2c_slave_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 1221 lpi2c_slave_transfer_callback_t callback,
AnnaBridge 161:aa5281ff4a02 1222 void *userData);
AnnaBridge 161:aa5281ff4a02 1223
AnnaBridge 161:aa5281ff4a02 1224 /*!
AnnaBridge 161:aa5281ff4a02 1225 * @brief Starts accepting slave transfers.
AnnaBridge 161:aa5281ff4a02 1226 *
AnnaBridge 161:aa5281ff4a02 1227 * Call this API after calling I2C_SlaveInit() and LPI2C_SlaveTransferCreateHandle() to start processing
AnnaBridge 161:aa5281ff4a02 1228 * transactions driven by an I2C master. The slave monitors the I2C bus and pass events to the
AnnaBridge 161:aa5281ff4a02 1229 * callback that was passed into the call to LPI2C_SlaveTransferCreateHandle(). The callback is always invoked
AnnaBridge 161:aa5281ff4a02 1230 * from the interrupt context.
AnnaBridge 161:aa5281ff4a02 1231 *
AnnaBridge 161:aa5281ff4a02 1232 * The set of events received by the callback is customizable. To do so, set the @a eventMask parameter to
AnnaBridge 161:aa5281ff4a02 1233 * the OR'd combination of #lpi2c_slave_transfer_event_t enumerators for the events you wish to receive.
AnnaBridge 161:aa5281ff4a02 1234 * The #kLPI2C_SlaveTransmitEvent and #kLPI2C_SlaveReceiveEvent events are always enabled and do not need
AnnaBridge 161:aa5281ff4a02 1235 * to be included in the mask. Alternatively, you can pass 0 to get a default set of only the transmit and
AnnaBridge 161:aa5281ff4a02 1236 * receive events that are always enabled. In addition, the #kLPI2C_SlaveAllEvents constant is provided as
AnnaBridge 161:aa5281ff4a02 1237 * a convenient way to enable all events.
AnnaBridge 161:aa5281ff4a02 1238 *
AnnaBridge 161:aa5281ff4a02 1239 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1240 * @param handle Pointer to #lpi2c_slave_handle_t structure which stores the transfer state.
AnnaBridge 161:aa5281ff4a02 1241 * @param eventMask Bit mask formed by OR'ing together #lpi2c_slave_transfer_event_t enumerators to specify
AnnaBridge 161:aa5281ff4a02 1242 * which events to send to the callback. Other accepted values are 0 to get a default set of
AnnaBridge 161:aa5281ff4a02 1243 * only the transmit and receive events, and #kLPI2C_SlaveAllEvents to enable all events.
AnnaBridge 161:aa5281ff4a02 1244 *
AnnaBridge 161:aa5281ff4a02 1245 * @retval #kStatus_Success Slave transfers were successfully started.
AnnaBridge 161:aa5281ff4a02 1246 * @retval #kStatus_LPI2C_Busy Slave transfers have already been started on this handle.
AnnaBridge 161:aa5281ff4a02 1247 */
AnnaBridge 161:aa5281ff4a02 1248 status_t LPI2C_SlaveTransferNonBlocking(LPI2C_Type *base, lpi2c_slave_handle_t *handle, uint32_t eventMask);
AnnaBridge 161:aa5281ff4a02 1249
AnnaBridge 161:aa5281ff4a02 1250 /*!
AnnaBridge 161:aa5281ff4a02 1251 * @brief Gets the slave transfer status during a non-blocking transfer.
AnnaBridge 161:aa5281ff4a02 1252 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1253 * @param handle Pointer to i2c_slave_handle_t structure.
AnnaBridge 161:aa5281ff4a02 1254 * @param[out] count Pointer to a value to hold the number of bytes transferred. May be NULL if the count is not
AnnaBridge 161:aa5281ff4a02 1255 * required.
AnnaBridge 161:aa5281ff4a02 1256 * @retval #kStatus_Success
AnnaBridge 161:aa5281ff4a02 1257 * @retval #kStatus_NoTransferInProgress
AnnaBridge 161:aa5281ff4a02 1258 */
AnnaBridge 161:aa5281ff4a02 1259 status_t LPI2C_SlaveTransferGetCount(LPI2C_Type *base, lpi2c_slave_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 1260
AnnaBridge 161:aa5281ff4a02 1261 /*!
AnnaBridge 161:aa5281ff4a02 1262 * @brief Aborts the slave non-blocking transfers.
AnnaBridge 161:aa5281ff4a02 1263 * @note This API could be called at any time to stop slave for handling the bus events.
AnnaBridge 161:aa5281ff4a02 1264 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1265 * @param handle Pointer to #lpi2c_slave_handle_t structure which stores the transfer state.
AnnaBridge 161:aa5281ff4a02 1266 * @retval #kStatus_Success
AnnaBridge 161:aa5281ff4a02 1267 * @retval #kStatus_LPI2C_Idle
AnnaBridge 161:aa5281ff4a02 1268 */
AnnaBridge 161:aa5281ff4a02 1269 void LPI2C_SlaveTransferAbort(LPI2C_Type *base, lpi2c_slave_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 1270
AnnaBridge 161:aa5281ff4a02 1271 /*@}*/
AnnaBridge 161:aa5281ff4a02 1272
AnnaBridge 161:aa5281ff4a02 1273 /*! @name Slave IRQ handler */
AnnaBridge 161:aa5281ff4a02 1274 /*@{*/
AnnaBridge 161:aa5281ff4a02 1275
AnnaBridge 161:aa5281ff4a02 1276 /*!
AnnaBridge 161:aa5281ff4a02 1277 * @brief Reusable routine to handle slave interrupts.
AnnaBridge 161:aa5281ff4a02 1278 * @note This function does not need to be called unless you are reimplementing the
AnnaBridge 161:aa5281ff4a02 1279 * non blocking API's interrupt handler routines to add special functionality.
AnnaBridge 161:aa5281ff4a02 1280 * @param base The LPI2C peripheral base address.
AnnaBridge 161:aa5281ff4a02 1281 * @param handle Pointer to #lpi2c_slave_handle_t structure which stores the transfer state.
AnnaBridge 161:aa5281ff4a02 1282 */
AnnaBridge 161:aa5281ff4a02 1283 void LPI2C_SlaveTransferHandleIRQ(LPI2C_Type *base, lpi2c_slave_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 1284
AnnaBridge 161:aa5281ff4a02 1285 /*@}*/
AnnaBridge 161:aa5281ff4a02 1286
AnnaBridge 161:aa5281ff4a02 1287 /*! @} */
AnnaBridge 161:aa5281ff4a02 1288
AnnaBridge 161:aa5281ff4a02 1289 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 1290 }
AnnaBridge 161:aa5281ff4a02 1291 #endif
AnnaBridge 161:aa5281ff4a02 1292
AnnaBridge 161:aa5281ff4a02 1293 #endif /* _FSL_LPI2C_H_ */