mbed official / mbed

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /**
AnnaBridge 171:3a7713b1edbc 2 * @file
AnnaBridge 171:3a7713b1edbc 3 * @brief I2CM (Inter-Integrated Circuit Master) function prototypes and
AnnaBridge 171:3a7713b1edbc 4 * data types.
AnnaBridge 171:3a7713b1edbc 5 */
AnnaBridge 171:3a7713b1edbc 6
AnnaBridge 171:3a7713b1edbc 7 /* ****************************************************************************
AnnaBridge 171:3a7713b1edbc 8 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
AnnaBridge 171:3a7713b1edbc 9 *
AnnaBridge 171:3a7713b1edbc 10 * Permission is hereby granted, free of charge, to any person obtaining a
AnnaBridge 171:3a7713b1edbc 11 * copy of this software and associated documentation files (the "Software"),
AnnaBridge 171:3a7713b1edbc 12 * to deal in the Software without restriction, including without limitation
AnnaBridge 171:3a7713b1edbc 13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
AnnaBridge 171:3a7713b1edbc 14 * and/or sell copies of the Software, and to permit persons to whom the
AnnaBridge 171:3a7713b1edbc 15 * Software is furnished to do so, subject to the following conditions:
AnnaBridge 171:3a7713b1edbc 16 *
AnnaBridge 171:3a7713b1edbc 17 * The above copyright notice and this permission notice shall be included
AnnaBridge 171:3a7713b1edbc 18 * in all copies or substantial portions of the Software.
AnnaBridge 171:3a7713b1edbc 19 *
AnnaBridge 171:3a7713b1edbc 20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
AnnaBridge 171:3a7713b1edbc 21 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
AnnaBridge 171:3a7713b1edbc 22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
AnnaBridge 171:3a7713b1edbc 23 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
AnnaBridge 171:3a7713b1edbc 24 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
AnnaBridge 171:3a7713b1edbc 25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
AnnaBridge 171:3a7713b1edbc 26 * OTHER DEALINGS IN THE SOFTWARE.
AnnaBridge 171:3a7713b1edbc 27 *
AnnaBridge 171:3a7713b1edbc 28 * Except as contained in this notice, the name of Maxim Integrated
AnnaBridge 171:3a7713b1edbc 29 * Products, Inc. shall not be used except as stated in the Maxim Integrated
AnnaBridge 171:3a7713b1edbc 30 * Products, Inc. Branding Policy.
AnnaBridge 171:3a7713b1edbc 31 *
AnnaBridge 171:3a7713b1edbc 32 * The mere transfer of this software does not imply any licenses
AnnaBridge 171:3a7713b1edbc 33 * of trade secrets, proprietary technology, copyrights, patents,
AnnaBridge 171:3a7713b1edbc 34 * trademarks, maskwork rights, or any other form of intellectual
AnnaBridge 171:3a7713b1edbc 35 * property whatsoever. Maxim Integrated Products, Inc. retains all
AnnaBridge 171:3a7713b1edbc 36 * ownership rights.
AnnaBridge 171:3a7713b1edbc 37 *
AnnaBridge 171:3a7713b1edbc 38 * $Date: 2016-10-10 18:58:15 -0500 (Mon, 10 Oct 2016) $
AnnaBridge 171:3a7713b1edbc 39 * $Revision: 24660 $
AnnaBridge 171:3a7713b1edbc 40 *
AnnaBridge 171:3a7713b1edbc 41 *************************************************************************** */
AnnaBridge 171:3a7713b1edbc 42
AnnaBridge 171:3a7713b1edbc 43 /* Define to prevent redundant inclusion */
AnnaBridge 171:3a7713b1edbc 44 #ifndef _I2CM_H_
AnnaBridge 171:3a7713b1edbc 45 #define _I2CM_H_
AnnaBridge 171:3a7713b1edbc 46
AnnaBridge 171:3a7713b1edbc 47 /***** Includes *****/
AnnaBridge 171:3a7713b1edbc 48 #include "mxc_config.h"
AnnaBridge 171:3a7713b1edbc 49 #include "mxc_sys.h"
AnnaBridge 171:3a7713b1edbc 50 #include "i2cm_regs.h"
AnnaBridge 171:3a7713b1edbc 51
AnnaBridge 171:3a7713b1edbc 52 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 53 extern "C" {
AnnaBridge 171:3a7713b1edbc 54 #endif
AnnaBridge 171:3a7713b1edbc 55 /**
AnnaBridge 171:3a7713b1edbc 56 * @ingroup commperipherals
AnnaBridge 171:3a7713b1edbc 57 * @defgroup i2c_master_slave I2C
AnnaBridge 171:3a7713b1edbc 58 * @brief I2C Master and Slave Communications
AnnaBridge 171:3a7713b1edbc 59 */
AnnaBridge 171:3a7713b1edbc 60 /**
AnnaBridge 171:3a7713b1edbc 61 * @ingroup i2c_master_slave
AnnaBridge 171:3a7713b1edbc 62 * @defgroup i2cm I2C Master
AnnaBridge 171:3a7713b1edbc 63 * @brief I2C Master
AnnaBridge 171:3a7713b1edbc 64 * @{
AnnaBridge 171:3a7713b1edbc 65 */
AnnaBridge 171:3a7713b1edbc 66
AnnaBridge 171:3a7713b1edbc 67 /* **** Definitions **** */
AnnaBridge 171:3a7713b1edbc 68
AnnaBridge 171:3a7713b1edbc 69 /**
AnnaBridge 171:3a7713b1edbc 70 * Enumeration type to select supported I2CM frequencies.
AnnaBridge 171:3a7713b1edbc 71 */
AnnaBridge 171:3a7713b1edbc 72 typedef enum {
AnnaBridge 171:3a7713b1edbc 73 I2CM_SPEED_100KHZ = 0, /**< Use to select a bus communication speed of 100 kHz. */
AnnaBridge 171:3a7713b1edbc 74 I2CM_SPEED_400KHZ = 1 /**< Use to select a bus communication speed of 400 kHz. */
AnnaBridge 171:3a7713b1edbc 75 } i2cm_speed_t;
AnnaBridge 171:3a7713b1edbc 76
AnnaBridge 171:3a7713b1edbc 77 /**
AnnaBridge 171:3a7713b1edbc 78 * Structure type for an I2CM Transaction request.
AnnaBridge 171:3a7713b1edbc 79 */
AnnaBridge 171:3a7713b1edbc 80 typedef struct i2cm_req i2cm_req_t;
AnnaBridge 171:3a7713b1edbc 81
AnnaBridge 171:3a7713b1edbc 82 /**
AnnaBridge 171:3a7713b1edbc 83 * Function type for the I2C Master callback. The function declaration for the
AnnaBridge 171:3a7713b1edbc 84 * I2CM callback is:
AnnaBridge 171:3a7713b1edbc 85 * @code
AnnaBridge 171:3a7713b1edbc 86 * void callback(i2cm_req_t * req, int error_code);
AnnaBridge 171:3a7713b1edbc 87 * @endcode | | | | -----: |
AnnaBridge 171:3a7713b1edbc 88 * :----------------------------------------- | | @p req | Pointer to an
AnnaBridge 171:3a7713b1edbc 89 * #i2cm_req object representing the I2CM active transaction. | | @p error_code
AnnaBridge 171:3a7713b1edbc 90 * | An error code if the active transaction had a failure or #E_NO_ERROR if
AnnaBridge 171:3a7713b1edbc 91 * successful. |
AnnaBridge 171:3a7713b1edbc 92 *
AnnaBridge 171:3a7713b1edbc 93 * @addtogroup i2cm_async
AnnaBridge 171:3a7713b1edbc 94 * @{
AnnaBridge 171:3a7713b1edbc 95 */
AnnaBridge 171:3a7713b1edbc 96 typedef void (*i2cm_callback_fn)(i2cm_req_t * req, int error_code);
AnnaBridge 171:3a7713b1edbc 97 /**@}*/
AnnaBridge 171:3a7713b1edbc 98
AnnaBridge 171:3a7713b1edbc 99
AnnaBridge 171:3a7713b1edbc 100 /**
AnnaBridge 171:3a7713b1edbc 101 * I2CM Transaction request structure.
AnnaBridge 171:3a7713b1edbc 102 * @note Only supports 7-bit addressing. Driver will shift the address and
AnnaBridge 171:3a7713b1edbc 103 * add the read bit when necessary.
AnnaBridge 171:3a7713b1edbc 104 */
AnnaBridge 171:3a7713b1edbc 105 struct i2cm_req {
AnnaBridge 171:3a7713b1edbc 106 uint8_t addr; /**< 7-Bit unshifted address of the slave for communication. */
AnnaBridge 171:3a7713b1edbc 107 const uint8_t *cmd_data; /**< Pointer to a command data buffer to send to the slave before either a read or write transaction. */
AnnaBridge 171:3a7713b1edbc 108 uint32_t cmd_len; /**< Number of bytes in command. */
AnnaBridge 171:3a7713b1edbc 109 uint8_t *data; /**< Data to write or read. */
AnnaBridge 171:3a7713b1edbc 110 uint32_t data_len; /**< Length of data. */
AnnaBridge 171:3a7713b1edbc 111 uint32_t cmd_num; /**< Number of command bytes sent. */
AnnaBridge 171:3a7713b1edbc 112 uint32_t data_num; /**< Number of data bytes sent. */
AnnaBridge 171:3a7713b1edbc 113 i2cm_callback_fn callback; /**< Function pointer to a callback function. */
AnnaBridge 171:3a7713b1edbc 114 };
AnnaBridge 171:3a7713b1edbc 115
AnnaBridge 171:3a7713b1edbc 116 /* **** Globals **** */
AnnaBridge 171:3a7713b1edbc 117
AnnaBridge 171:3a7713b1edbc 118 /* **** Function Prototypes **** */
AnnaBridge 171:3a7713b1edbc 119
AnnaBridge 171:3a7713b1edbc 120 /**
AnnaBridge 171:3a7713b1edbc 121 * @brief Initialize the I2CM peripheral module.
AnnaBridge 171:3a7713b1edbc 122 *
AnnaBridge 171:3a7713b1edbc 123 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 124 * @param sys_cfg Pointer to an I2CM configuration structure of type
AnnaBridge 171:3a7713b1edbc 125 * #sys_cfg_i2cm_t.
AnnaBridge 171:3a7713b1edbc 126 * @param speed I2CM bus speed, see #i2cm_speed_t.
AnnaBridge 171:3a7713b1edbc 127 *
AnnaBridge 171:3a7713b1edbc 128 * @return #E_NO_ERROR if initialized successfully, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 129 */
AnnaBridge 171:3a7713b1edbc 130 int I2CM_Init(mxc_i2cm_regs_t *i2cm, const sys_cfg_i2cm_t *sys_cfg, i2cm_speed_t speed);
AnnaBridge 171:3a7713b1edbc 131
AnnaBridge 171:3a7713b1edbc 132 /**
AnnaBridge 171:3a7713b1edbc 133 * @brief Shutdown I2CM module.
AnnaBridge 171:3a7713b1edbc 134 *
AnnaBridge 171:3a7713b1edbc 135 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 136 *
AnnaBridge 171:3a7713b1edbc 137 * @returns #E_NO_ERROR if everything is successful, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 138 *
AnnaBridge 171:3a7713b1edbc 139 */
AnnaBridge 171:3a7713b1edbc 140 int I2CM_Shutdown(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 141
AnnaBridge 171:3a7713b1edbc 142 /**
AnnaBridge 171:3a7713b1edbc 143 * @defgroup i2cm_blocking I2CM Blocking Functions
AnnaBridge 171:3a7713b1edbc 144 * @{
AnnaBridge 171:3a7713b1edbc 145 */
AnnaBridge 171:3a7713b1edbc 146
AnnaBridge 171:3a7713b1edbc 147 /**
AnnaBridge 171:3a7713b1edbc 148 * @brief Read I2CM data. Will block until transaction is complete.
AnnaBridge 171:3a7713b1edbc 149 *
AnnaBridge 171:3a7713b1edbc 150 * @note Command is an optional feature where the master will write the @c
AnnaBridge 171:3a7713b1edbc 151 * cmd_data before reading from the slave. If command is undesired,
AnnaBridge 171:3a7713b1edbc 152 * set the @c *cmd_data parameter to NULL and pass 0 for the @c
AnnaBridge 171:3a7713b1edbc 153 * cmd_len parameter.
AnnaBridge 171:3a7713b1edbc 154 * @note If there is a command, the master will send a repeated start
AnnaBridge 171:3a7713b1edbc 155 * sequence before attempting to read from the slave.
AnnaBridge 171:3a7713b1edbc 156 * @note This function blocks until the transaction has completed.
AnnaBridge 171:3a7713b1edbc 157 *
AnnaBridge 171:3a7713b1edbc 158 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 159 * @param addr I2C address of the slave.
AnnaBridge 171:3a7713b1edbc 160 * @param cmd_data Data to write before reading.
AnnaBridge 171:3a7713b1edbc 161 * @param cmd_len Number of bytes to write before reading.
AnnaBridge 171:3a7713b1edbc 162 * @param data Where to store the data read.
AnnaBridge 171:3a7713b1edbc 163 * @param len Number of bytes to read.
AnnaBridge 171:3a7713b1edbc 164 *
AnnaBridge 171:3a7713b1edbc 165 * @return Number of bytes read if successful, error code if unsuccessful.
AnnaBridge 171:3a7713b1edbc 166 */
AnnaBridge 171:3a7713b1edbc 167 int I2CM_Read(mxc_i2cm_regs_t *i2cm, uint8_t addr, const uint8_t *cmd_data,
AnnaBridge 171:3a7713b1edbc 168 uint32_t cmd_len, uint8_t* data, uint32_t len);
AnnaBridge 171:3a7713b1edbc 169
AnnaBridge 171:3a7713b1edbc 170 /**
AnnaBridge 171:3a7713b1edbc 171 * @brief Write data to a slave device.
AnnaBridge 171:3a7713b1edbc 172 *
AnnaBridge 171:3a7713b1edbc 173 * @note Command is an optional feature where the master will write the @c
AnnaBridge 171:3a7713b1edbc 174 * cmd_data before writing the @c data to the slave. If command is
AnnaBridge 171:3a7713b1edbc 175 * not needed, set the @c cmd_data to @c NULL and set @c cmd_len to
AnnaBridge 171:3a7713b1edbc 176 * 0. If there is a command, the master will send a repeated start
AnnaBridge 171:3a7713b1edbc 177 * sequence before attempting to read from the slave.
AnnaBridge 171:3a7713b1edbc 178 * @note This function blocks until the transaction has completed.
AnnaBridge 171:3a7713b1edbc 179 *
AnnaBridge 171:3a7713b1edbc 180 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 181 * @param addr I2C address of the slave.
AnnaBridge 171:3a7713b1edbc 182 * @param cmd_data Data to write before writing data.
AnnaBridge 171:3a7713b1edbc 183 * @param cmd_len Number of bytes to write before writing data.
AnnaBridge 171:3a7713b1edbc 184 * @param data Data to be written.
AnnaBridge 171:3a7713b1edbc 185 * @param len Number of bytes to Write.
AnnaBridge 171:3a7713b1edbc 186 *
AnnaBridge 171:3a7713b1edbc 187 * @return Number of bytes writen if successful or an @ref MXC_Error_Codes
AnnaBridge 171:3a7713b1edbc 188 * "Error Code" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 189 */
AnnaBridge 171:3a7713b1edbc 190 int I2CM_Write(mxc_i2cm_regs_t *i2cm, uint8_t addr, const uint8_t *cmd_data,
AnnaBridge 171:3a7713b1edbc 191 uint32_t cmd_len, uint8_t* data, uint32_t len);
AnnaBridge 171:3a7713b1edbc 192 /**@} end of i2cm_blocking functions */
AnnaBridge 171:3a7713b1edbc 193
AnnaBridge 171:3a7713b1edbc 194 /**
AnnaBridge 171:3a7713b1edbc 195 * @defgroup i2cm_async I2CM Asynchrous Functions
AnnaBridge 171:3a7713b1edbc 196 * @{
AnnaBridge 171:3a7713b1edbc 197 */
AnnaBridge 171:3a7713b1edbc 198
AnnaBridge 171:3a7713b1edbc 199 /**
AnnaBridge 171:3a7713b1edbc 200 * @brief Asynchronously read I2CM data.
AnnaBridge 171:3a7713b1edbc 201 *
AnnaBridge 171:3a7713b1edbc 202 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 203 * @param req Pointer to an I2CM transaction request structure, see
AnnaBridge 171:3a7713b1edbc 204 * #i2cm_req.
AnnaBridge 171:3a7713b1edbc 205 *
AnnaBridge 171:3a7713b1edbc 206 * @return #E_NO_ERROR if everything is successful or an @ref
AnnaBridge 171:3a7713b1edbc 207 * MXC_Error_Codes "Error Code" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 208 */
AnnaBridge 171:3a7713b1edbc 209 int I2CM_ReadAsync(mxc_i2cm_regs_t *i2cm, i2cm_req_t *req);
AnnaBridge 171:3a7713b1edbc 210
AnnaBridge 171:3a7713b1edbc 211 /**
AnnaBridge 171:3a7713b1edbc 212 * @brief Asynchronously write I2CM data.
AnnaBridge 171:3a7713b1edbc 213 *
AnnaBridge 171:3a7713b1edbc 214 * @param i2cm Pointer to the I2CM registers, see #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 215 * @param req Pointer to an I2CM transaction request structure, see
AnnaBridge 171:3a7713b1edbc 216 * #i2cm_req.
AnnaBridge 171:3a7713b1edbc 217 *
AnnaBridge 171:3a7713b1edbc 218 * @return #E_NO_ERROR if everything is successful, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 219 */
AnnaBridge 171:3a7713b1edbc 220 int I2CM_WriteAsync(mxc_i2cm_regs_t *i2cm, i2cm_req_t *req);
AnnaBridge 171:3a7713b1edbc 221
AnnaBridge 171:3a7713b1edbc 222 /**
AnnaBridge 171:3a7713b1edbc 223 * @brief Abort asynchronous request.
AnnaBridge 171:3a7713b1edbc 224 * @param req Pointer to request for an I2CM transaction.
AnnaBridge 171:3a7713b1edbc 225 * @note Will call the callback for the request.
AnnaBridge 171:3a7713b1edbc 226 *
AnnaBridge 171:3a7713b1edbc 227 * @return #E_NO_ERROR if request aborted, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 228 */
AnnaBridge 171:3a7713b1edbc 229 int I2CM_AbortAsync(i2cm_req_t *req);
AnnaBridge 171:3a7713b1edbc 230
AnnaBridge 171:3a7713b1edbc 231 /**
AnnaBridge 171:3a7713b1edbc 232 * @brief I2CM interrupt handler.
AnnaBridge 171:3a7713b1edbc 233 *
AnnaBridge 171:3a7713b1edbc 234 * @details This function is an IRQ handler and will be called by the core if
AnnaBridge 171:3a7713b1edbc 235 * I2CM interrupts are enabled. Alternately, if the application is
AnnaBridge 171:3a7713b1edbc 236 * using asynchronous methods, this function can be periodically
AnnaBridge 171:3a7713b1edbc 237 * called by the application if the I2CM interrupts are disabled.
AnnaBridge 171:3a7713b1edbc 238 *
AnnaBridge 171:3a7713b1edbc 239 * @param i2cm Base address of the I2CM module.
AnnaBridge 171:3a7713b1edbc 240 */
AnnaBridge 171:3a7713b1edbc 241 void I2CM_Handler(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 242 /**@} end of i2cm_async */
AnnaBridge 171:3a7713b1edbc 243
AnnaBridge 171:3a7713b1edbc 244 /**
AnnaBridge 171:3a7713b1edbc 245 * @brief Returns the status of the I2CM peripheral module.
AnnaBridge 171:3a7713b1edbc 246 *
AnnaBridge 171:3a7713b1edbc 247 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 248 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 249 *
AnnaBridge 171:3a7713b1edbc 250 * @return #E_NO_ERROR if idle.
AnnaBridge 171:3a7713b1edbc 251 * @return #E_BUSY if in use.
AnnaBridge 171:3a7713b1edbc 252 */
AnnaBridge 171:3a7713b1edbc 253 int I2CM_Busy(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 254
AnnaBridge 171:3a7713b1edbc 255 /**
AnnaBridge 171:3a7713b1edbc 256 * @brief Attempt to prepare the I2CM for sleep.
AnnaBridge 171:3a7713b1edbc 257 * @details Checks for any ongoing transactions. Disables interrupts if the
AnnaBridge 171:3a7713b1edbc 258 * I2CM is idle.
AnnaBridge 171:3a7713b1edbc 259 *
AnnaBridge 171:3a7713b1edbc 260 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 261 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 262 *
AnnaBridge 171:3a7713b1edbc 263 * @return #E_NO_ERROR if ready to sleep.
AnnaBridge 171:3a7713b1edbc 264 * @return #E_BUSY if the bus is not ready for sleep.
AnnaBridge 171:3a7713b1edbc 265 */
AnnaBridge 171:3a7713b1edbc 266 int I2CM_PrepForSleep(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 267
AnnaBridge 171:3a7713b1edbc 268 /**
AnnaBridge 171:3a7713b1edbc 269 * @brief Check the I2C bus to determine if any other masters are using the
AnnaBridge 171:3a7713b1edbc 270 * bus.
AnnaBridge 171:3a7713b1edbc 271 *
AnnaBridge 171:3a7713b1edbc 272 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 273 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 274 *
AnnaBridge 171:3a7713b1edbc 275 * @return #E_NO_ERROR if SCL and SDA are high,
AnnaBridge 171:3a7713b1edbc 276 * @return #E_BUSY otherwise.
AnnaBridge 171:3a7713b1edbc 277 */
AnnaBridge 171:3a7713b1edbc 278 int I2CM_BusCheck(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 279
AnnaBridge 171:3a7713b1edbc 280 /**
AnnaBridge 171:3a7713b1edbc 281 * @brief Drain/Empty all of the data in the I2CM Receive FIFO.
AnnaBridge 171:3a7713b1edbc 282 *
AnnaBridge 171:3a7713b1edbc 283 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 284 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 285 */
AnnaBridge 171:3a7713b1edbc 286 __STATIC_INLINE void I2CM_DrainRX(mxc_i2cm_regs_t *i2cm)
AnnaBridge 171:3a7713b1edbc 287 {
AnnaBridge 171:3a7713b1edbc 288 i2cm->ctrl &= ~(MXC_F_I2CM_CTRL_RX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 289 i2cm->ctrl |= MXC_F_I2CM_CTRL_RX_FIFO_EN;
AnnaBridge 171:3a7713b1edbc 290 }
AnnaBridge 171:3a7713b1edbc 291
AnnaBridge 171:3a7713b1edbc 292 /**
AnnaBridge 171:3a7713b1edbc 293 * @brief Drain/Empty any data in the I2CM Transmit FIFO.
AnnaBridge 171:3a7713b1edbc 294 *
AnnaBridge 171:3a7713b1edbc 295 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 296 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 297 */
AnnaBridge 171:3a7713b1edbc 298 __STATIC_INLINE void I2CM_DrainTX(mxc_i2cm_regs_t *i2cm)
AnnaBridge 171:3a7713b1edbc 299 {
AnnaBridge 171:3a7713b1edbc 300 i2cm->ctrl &= ~(MXC_F_I2CM_CTRL_TX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 301 i2cm->ctrl |= MXC_F_I2CM_CTRL_TX_FIFO_EN;
AnnaBridge 171:3a7713b1edbc 302 }
AnnaBridge 171:3a7713b1edbc 303
AnnaBridge 171:3a7713b1edbc 304 /**
AnnaBridge 171:3a7713b1edbc 305 * @brief Clear interrupt flags.
AnnaBridge 171:3a7713b1edbc 306 *
AnnaBridge 171:3a7713b1edbc 307 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 308 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 309 * @param mask Mask of I2CM interrupts to clear (1 to clear),
AnnaBridge 171:3a7713b1edbc 310 * @see I2CM_INTFL_Register for the interrupt flag masks.
AnnaBridge 171:3a7713b1edbc 311 */
AnnaBridge 171:3a7713b1edbc 312 __STATIC_INLINE void I2CM_ClearFlags(mxc_i2cm_regs_t *i2cm, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 313 {
AnnaBridge 171:3a7713b1edbc 314 i2cm->intfl = mask;
AnnaBridge 171:3a7713b1edbc 315 }
AnnaBridge 171:3a7713b1edbc 316
AnnaBridge 171:3a7713b1edbc 317 /**
AnnaBridge 171:3a7713b1edbc 318 * @brief Gets the current I2CM interrupt flags.
AnnaBridge 171:3a7713b1edbc 319 * @param i2cm Pointer to the I2CM register structure, see
AnnaBridge 171:3a7713b1edbc 320 * #mxc_i2cm_regs_t.
AnnaBridge 171:3a7713b1edbc 321 *
AnnaBridge 171:3a7713b1edbc 322 * @return The currently set interrupt flags, @see I2CM_INTFL_Register
AnnaBridge 171:3a7713b1edbc 323 * for the interrupt flag masks.
AnnaBridge 171:3a7713b1edbc 324 */
AnnaBridge 171:3a7713b1edbc 325 __STATIC_INLINE unsigned I2CM_GetFlags(mxc_i2cm_regs_t *i2cm)
AnnaBridge 171:3a7713b1edbc 326 {
AnnaBridge 171:3a7713b1edbc 327 return(i2cm->intfl);
AnnaBridge 171:3a7713b1edbc 328 }
AnnaBridge 171:3a7713b1edbc 329 /**@} end of group i2cm */
AnnaBridge 171:3a7713b1edbc 330
AnnaBridge 171:3a7713b1edbc 331 void I2CM_Recover(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 332 int I2CM_WriteTxFifo(mxc_i2cm_regs_t *regs, mxc_i2cm_fifo_regs_t *fifo, const uint16_t data);
AnnaBridge 171:3a7713b1edbc 333 int I2CM_TxInProgress(mxc_i2cm_regs_t *i2cm);
AnnaBridge 171:3a7713b1edbc 334 int I2CM_Tx(mxc_i2cm_regs_t *i2cm, mxc_i2cm_fifo_regs_t *fifo, uint8_t addr, const uint8_t *data, uint32_t len, uint8_t stop);
AnnaBridge 171:3a7713b1edbc 335
AnnaBridge 171:3a7713b1edbc 336 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 337 }
AnnaBridge 171:3a7713b1edbc 338 #endif
AnnaBridge 171:3a7713b1edbc 339
AnnaBridge 171:3a7713b1edbc 340 #endif /* _I2CM_H_ */