The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

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
Anna Bridge 169:a7c7b631e539 1 /*******************************************************************************
Anna Bridge 169:a7c7b631e539 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Anna Bridge 169:a7c7b631e539 3 *
Anna Bridge 169:a7c7b631e539 4 * Permission is hereby granted, free of charge, to any person obtaining a
Anna Bridge 169:a7c7b631e539 5 * copy of this software and associated documentation files (the "Software"),
Anna Bridge 169:a7c7b631e539 6 * to deal in the Software without restriction, including without limitation
Anna Bridge 169:a7c7b631e539 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Anna Bridge 169:a7c7b631e539 8 * and/or sell copies of the Software, and to permit persons to whom the
Anna Bridge 169:a7c7b631e539 9 * Software is furnished to do so, subject to the following conditions:
Anna Bridge 169:a7c7b631e539 10 *
Anna Bridge 169:a7c7b631e539 11 * The above copyright notice and this permission notice shall be included
Anna Bridge 169:a7c7b631e539 12 * in all copies or substantial portions of the Software.
Anna Bridge 169:a7c7b631e539 13 *
Anna Bridge 169:a7c7b631e539 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Anna Bridge 169:a7c7b631e539 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Anna Bridge 169:a7c7b631e539 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Anna Bridge 169:a7c7b631e539 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Anna Bridge 169:a7c7b631e539 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Anna Bridge 169:a7c7b631e539 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Anna Bridge 169:a7c7b631e539 20 * OTHER DEALINGS IN THE SOFTWARE.
Anna Bridge 169:a7c7b631e539 21 *
Anna Bridge 169:a7c7b631e539 22 * Except as contained in this notice, the name of Maxim Integrated
Anna Bridge 169:a7c7b631e539 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Anna Bridge 169:a7c7b631e539 24 * Products, Inc. Branding Policy.
Anna Bridge 169:a7c7b631e539 25 *
Anna Bridge 169:a7c7b631e539 26 * The mere transfer of this software does not imply any licenses
Anna Bridge 169:a7c7b631e539 27 * of trade secrets, proprietary technology, copyrights, patents,
Anna Bridge 169:a7c7b631e539 28 * trademarks, maskwork rights, or any other form of intellectual
Anna Bridge 169:a7c7b631e539 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Anna Bridge 169:a7c7b631e539 30 * ownership rights.
Anna Bridge 169:a7c7b631e539 31 *
Anna Bridge 169:a7c7b631e539 32 * $Date: 2016-04-27 11:55:43 -0500 (Wed, 27 Apr 2016) $
Anna Bridge 169:a7c7b631e539 33 * $Revision: 22541 $
Anna Bridge 169:a7c7b631e539 34 *
Anna Bridge 169:a7c7b631e539 35 ******************************************************************************/
Anna Bridge 169:a7c7b631e539 36
Anna Bridge 169:a7c7b631e539 37 /**
Anna Bridge 169:a7c7b631e539 38 * @file i2cm.h
Anna Bridge 169:a7c7b631e539 39 * @brief I2C Master driver header file.
Anna Bridge 169:a7c7b631e539 40 */
Anna Bridge 169:a7c7b631e539 41
Anna Bridge 169:a7c7b631e539 42 #ifndef _I2CM_H_
Anna Bridge 169:a7c7b631e539 43 #define _I2CM_H_
Anna Bridge 169:a7c7b631e539 44
Anna Bridge 169:a7c7b631e539 45 /***** Includes *****/
Anna Bridge 169:a7c7b631e539 46 #include "mxc_config.h"
Anna Bridge 169:a7c7b631e539 47 #include "mxc_sys.h"
Anna Bridge 169:a7c7b631e539 48 #include "i2cm_regs.h"
Anna Bridge 169:a7c7b631e539 49
Anna Bridge 169:a7c7b631e539 50 #ifdef __cplusplus
Anna Bridge 169:a7c7b631e539 51 extern "C" {
Anna Bridge 169:a7c7b631e539 52 #endif
Anna Bridge 169:a7c7b631e539 53
Anna Bridge 169:a7c7b631e539 54 /***** Definitions *****/
Anna Bridge 169:a7c7b631e539 55
Anna Bridge 169:a7c7b631e539 56 /// @brief I2CM frequencies.
Anna Bridge 169:a7c7b631e539 57 typedef enum {
Anna Bridge 169:a7c7b631e539 58 I2CM_SPEED_100KHZ = 100000,
Anna Bridge 169:a7c7b631e539 59 I2CM_SPEED_400KHZ = 400000
Anna Bridge 169:a7c7b631e539 60 } i2cm_speed_t;
Anna Bridge 169:a7c7b631e539 61
Anna Bridge 169:a7c7b631e539 62 /// @brief I2CM Transaction request.
Anna Bridge 169:a7c7b631e539 63 typedef struct i2cm_req i2cm_req_t;
Anna Bridge 169:a7c7b631e539 64 struct i2cm_req {
Anna Bridge 169:a7c7b631e539 65
Anna Bridge 169:a7c7b631e539 66 /**
Anna Bridge 169:a7c7b631e539 67 * @details Only supports 7-bit addressing. Driver will shift the address and
Anna Bridge 169:a7c7b631e539 68 * add the read bit when necessary.
Anna Bridge 169:a7c7b631e539 69 */
Anna Bridge 169:a7c7b631e539 70 uint8_t addr;
Anna Bridge 169:a7c7b631e539 71 const uint8_t *cmd_data; ///< Optional command data to write before reading.
Anna Bridge 169:a7c7b631e539 72 uint32_t cmd_len; ///< Number of bytes in command.
Anna Bridge 169:a7c7b631e539 73 uint8_t *data; ///< Data to write or read.
Anna Bridge 169:a7c7b631e539 74 uint32_t data_len; ///< Length of data.
Anna Bridge 169:a7c7b631e539 75 uint32_t cmd_num; ///< Number of command bytes sent
Anna Bridge 169:a7c7b631e539 76 uint32_t data_num; ///< Number of data bytes sent
Anna Bridge 169:a7c7b631e539 77
Anna Bridge 169:a7c7b631e539 78 /**
Anna Bridge 169:a7c7b631e539 79 * @brief Callback for asynchronous request.
Anna Bridge 169:a7c7b631e539 80 * @param i2cm_req_t* Pointer to the transaction request.
Anna Bridge 169:a7c7b631e539 81 * @param int Error code.
Anna Bridge 169:a7c7b631e539 82 */
Anna Bridge 169:a7c7b631e539 83 void (*callback)(i2cm_req_t*, int);
Anna Bridge 169:a7c7b631e539 84 };
Anna Bridge 169:a7c7b631e539 85
Anna Bridge 169:a7c7b631e539 86 /***** Globals *****/
Anna Bridge 169:a7c7b631e539 87
Anna Bridge 169:a7c7b631e539 88 /***** Function Prototypes *****/
Anna Bridge 169:a7c7b631e539 89
Anna Bridge 169:a7c7b631e539 90 /**
Anna Bridge 169:a7c7b631e539 91 * @brief Initialize I2CM module.
Anna Bridge 169:a7c7b631e539 92 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 93 * @param cfg Pointer to I2CM configuration.
Anna Bridge 169:a7c7b631e539 94 * @param speed I2CM frequency.
Anna Bridge 169:a7c7b631e539 95 * @returns #E_NO_ERROR if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 96 */
Anna Bridge 169:a7c7b631e539 97 int I2CM_Init(mxc_i2cm_regs_t *i2cm, const sys_cfg_i2cm_t *sys_cfg, i2cm_speed_t speed);
Anna Bridge 169:a7c7b631e539 98
Anna Bridge 169:a7c7b631e539 99 /**
Anna Bridge 169:a7c7b631e539 100 * @brief Shutdown I2CM module.
Anna Bridge 169:a7c7b631e539 101 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 102 * @returns #E_NO_ERROR if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 103 */
Anna Bridge 169:a7c7b631e539 104 int I2CM_Shutdown(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 105
Anna Bridge 169:a7c7b631e539 106 /**
Anna Bridge 169:a7c7b631e539 107 * @brief Read I2CM data. Will block until transaction is complete.
Anna Bridge 169:a7c7b631e539 108 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 109 * @param addr I2C address of the slave.
Anna Bridge 169:a7c7b631e539 110 * @param cmd_data Data to write before reading.
Anna Bridge 169:a7c7b631e539 111 * @param cmd_len Number of bytes to write before reading.
Anna Bridge 169:a7c7b631e539 112 * @param data Where to store read data.
Anna Bridge 169:a7c7b631e539 113 * @param len Number of bytes to read.
Anna Bridge 169:a7c7b631e539 114 * @details Command is an optional feature where the master will write the cmd_data
Anna Bridge 169:a7c7b631e539 115 * before reading from the slave. If command is undesired, leave the pointer
Anna Bridge 169:a7c7b631e539 116 * NULL and cmd_len 0. If there is a command, the master will send a
Anna Bridge 169:a7c7b631e539 117 repeated start before reading. Will block until transaction has completed.
Anna Bridge 169:a7c7b631e539 118 * @returns Bytes transacted if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 119 */
Anna Bridge 169:a7c7b631e539 120 int I2CM_Read(mxc_i2cm_regs_t *i2cm, uint8_t addr, const uint8_t *cmd_data,
Anna Bridge 169:a7c7b631e539 121 uint32_t cmd_len, uint8_t* data, uint32_t len);
Anna Bridge 169:a7c7b631e539 122
Anna Bridge 169:a7c7b631e539 123 /**
Anna Bridge 169:a7c7b631e539 124 * @brief Write I2CM data. Will block until transaction is complete.
Anna Bridge 169:a7c7b631e539 125 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 126 * @param addr I2C address of the slave.
Anna Bridge 169:a7c7b631e539 127 * @param cmd_data Data to write before writing data.
Anna Bridge 169:a7c7b631e539 128 * @param cmd_len Number of bytes to write before writing data.
Anna Bridge 169:a7c7b631e539 129 * @param data Data to be written.
Anna Bridge 169:a7c7b631e539 130 * @param len Number of bytes to Write.
Anna Bridge 169:a7c7b631e539 131 * @details Command is an optional feature where the master will write the cmd_data
Anna Bridge 169:a7c7b631e539 132 * before writing to the slave. If command is undesired, leave the pointer
Anna Bridge 169:a7c7b631e539 133 * NULL and cmd_len 0. If there is a command, the master will send a
Anna Bridge 169:a7c7b631e539 134 repeated start before writing again. Will block until transaction has completed.
Anna Bridge 169:a7c7b631e539 135 * @returns Bytes transacted if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 136 */
Anna Bridge 169:a7c7b631e539 137 int I2CM_Write(mxc_i2cm_regs_t *i2cm, uint8_t addr, const uint8_t *cmd_data,
Anna Bridge 169:a7c7b631e539 138 uint32_t cmd_len, uint8_t* data, uint32_t len);
Anna Bridge 169:a7c7b631e539 139
Anna Bridge 169:a7c7b631e539 140 /**
Anna Bridge 169:a7c7b631e539 141 * @brief Asynchronously read I2CM data.
Anna Bridge 169:a7c7b631e539 142 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 143 * @param req Request for an I2CM transaction.
Anna Bridge 169:a7c7b631e539 144 * @returns #E_NO_ERROR if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 145 */
Anna Bridge 169:a7c7b631e539 146 int I2CM_ReadAsync(mxc_i2cm_regs_t *i2cm, i2cm_req_t *req);
Anna Bridge 169:a7c7b631e539 147
Anna Bridge 169:a7c7b631e539 148 /**
Anna Bridge 169:a7c7b631e539 149 * @brief Asynchronously write I2CM data.
Anna Bridge 169:a7c7b631e539 150 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 151 * @param req Request for an I2CM transaction.
Anna Bridge 169:a7c7b631e539 152 * @returns #E_NO_ERROR if everything is successful, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 153 */
Anna Bridge 169:a7c7b631e539 154 int I2CM_WriteAsync(mxc_i2cm_regs_t *i2cm, i2cm_req_t *req);
Anna Bridge 169:a7c7b631e539 155
Anna Bridge 169:a7c7b631e539 156 /**
Anna Bridge 169:a7c7b631e539 157 * @brief Abort asynchronous request.
Anna Bridge 169:a7c7b631e539 158 * @param req Pointer to request for a I2CM transaction.
Anna Bridge 169:a7c7b631e539 159 * @note Will call the callback for the request.
Anna Bridge 169:a7c7b631e539 160 * @returns #E_NO_ERROR if request aborted, error if unsuccessful.
Anna Bridge 169:a7c7b631e539 161 */
Anna Bridge 169:a7c7b631e539 162 int I2CM_AbortAsync(i2cm_req_t *req);
Anna Bridge 169:a7c7b631e539 163
Anna Bridge 169:a7c7b631e539 164 /**
Anna Bridge 169:a7c7b631e539 165 * @brief I2CM interrupt handler.
Anna Bridge 169:a7c7b631e539 166 * @details This function should be called by the application from the interrupt
Anna Bridge 169:a7c7b631e539 167 * handler if I2CM interrupts are enabled. Alternately, this function
Anna Bridge 169:a7c7b631e539 168 * can be periodically called by the application if I2CM interrupts are
Anna Bridge 169:a7c7b631e539 169 * disabled.
Anna Bridge 169:a7c7b631e539 170 * @param i2cm Base address of the I2CM module.
Anna Bridge 169:a7c7b631e539 171 */
Anna Bridge 169:a7c7b631e539 172 void I2CM_Handler(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 173
Anna Bridge 169:a7c7b631e539 174 /**
Anna Bridge 169:a7c7b631e539 175 * @brief Checks to see if the I2CM is busy.
Anna Bridge 169:a7c7b631e539 176 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 177 * @returns #E_NO_ERROR if idle, #E_BUSY if in use.
Anna Bridge 169:a7c7b631e539 178 */
Anna Bridge 169:a7c7b631e539 179 int I2CM_Busy(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 180
Anna Bridge 169:a7c7b631e539 181 /**
Anna Bridge 169:a7c7b631e539 182 * @brief Attempt to prepare the I2CM for sleep.
Anna Bridge 169:a7c7b631e539 183 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 184 * @details Checks for any ongoing transactions. Disables interrupts if the I2CM
Anna Bridge 169:a7c7b631e539 185 is idle.
Anna Bridge 169:a7c7b631e539 186 * @returns #E_NO_ERROR if ready to sleep, #E_BUSY if not ready for sleep.
Anna Bridge 169:a7c7b631e539 187 */
Anna Bridge 169:a7c7b631e539 188 int I2CM_PrepForSleep(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 189
Anna Bridge 169:a7c7b631e539 190 /**
Anna Bridge 169:a7c7b631e539 191 * @brief Check the I2C bus.
Anna Bridge 169:a7c7b631e539 192 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 193 * @details Checks the I2CM bus to determine if there is any other master using
Anna Bridge 169:a7c7b631e539 194 * the bus.
Anna Bridge 169:a7c7b631e539 195 * @returns #E_NO_ERROR if SCL and SDA are high, #E_BUSY otherwise.
Anna Bridge 169:a7c7b631e539 196 */
Anna Bridge 169:a7c7b631e539 197 int I2CM_BusCheck(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 198
Anna Bridge 169:a7c7b631e539 199 /**
Anna Bridge 169:a7c7b631e539 200 * @brief Drain all of the data in the RXFIFO.
Anna Bridge 169:a7c7b631e539 201 * @param i2cm Pointer to UART regs.
Anna Bridge 169:a7c7b631e539 202 */
Anna Bridge 169:a7c7b631e539 203 __STATIC_INLINE void I2CM_DrainRX(mxc_i2cm_regs_t *i2cm)
Anna Bridge 169:a7c7b631e539 204 {
Anna Bridge 169:a7c7b631e539 205 i2cm->ctrl &= ~(MXC_F_I2CM_CTRL_RX_FIFO_EN);
Anna Bridge 169:a7c7b631e539 206 i2cm->ctrl |= MXC_F_I2CM_CTRL_RX_FIFO_EN;
Anna Bridge 169:a7c7b631e539 207 }
Anna Bridge 169:a7c7b631e539 208
Anna Bridge 169:a7c7b631e539 209 /**
Anna Bridge 169:a7c7b631e539 210 * @brief Drain all of the data in the TXFIFO.
Anna Bridge 169:a7c7b631e539 211 * @param i2cm Pointer to UART regs.
Anna Bridge 169:a7c7b631e539 212 */
Anna Bridge 169:a7c7b631e539 213 __STATIC_INLINE void I2CM_DrainTX(mxc_i2cm_regs_t *i2cm)
Anna Bridge 169:a7c7b631e539 214 {
Anna Bridge 169:a7c7b631e539 215 i2cm->ctrl &= ~(MXC_F_I2CM_CTRL_TX_FIFO_EN);
Anna Bridge 169:a7c7b631e539 216 i2cm->ctrl |= MXC_F_I2CM_CTRL_TX_FIFO_EN;
Anna Bridge 169:a7c7b631e539 217 }
Anna Bridge 169:a7c7b631e539 218
Anna Bridge 169:a7c7b631e539 219 /**
Anna Bridge 169:a7c7b631e539 220 * @brief Clear interrupt flags.
Anna Bridge 169:a7c7b631e539 221 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 222 * @param mask Mask of interrupts to clear.
Anna Bridge 169:a7c7b631e539 223 */
Anna Bridge 169:a7c7b631e539 224 __STATIC_INLINE void I2CM_ClearFlags(mxc_i2cm_regs_t *i2cm, uint32_t mask)
Anna Bridge 169:a7c7b631e539 225 {
Anna Bridge 169:a7c7b631e539 226 i2cm->intfl = mask;
Anna Bridge 169:a7c7b631e539 227 }
Anna Bridge 169:a7c7b631e539 228
Anna Bridge 169:a7c7b631e539 229 /**
Anna Bridge 169:a7c7b631e539 230 * @brief Get interrupt flags.
Anna Bridge 169:a7c7b631e539 231 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 232 * @returns Mask of active flags.
Anna Bridge 169:a7c7b631e539 233 */
Anna Bridge 169:a7c7b631e539 234 __STATIC_INLINE unsigned I2CM_GetFlags(mxc_i2cm_regs_t *i2cm)
Anna Bridge 169:a7c7b631e539 235 {
Anna Bridge 169:a7c7b631e539 236 return(i2cm->intfl);
Anna Bridge 169:a7c7b631e539 237 }
Anna Bridge 169:a7c7b631e539 238 /**
Anna Bridge 169:a7c7b631e539 239 * @brief Set the I2C Frequency
Anna Bridge 169:a7c7b631e539 240 * @param i2cm Pointer to I2CM regs.
Anna Bridge 169:a7c7b631e539 241 * @param speed speed in Hz
Anna Bridge 169:a7c7b631e539 242 * @details sets the registers for the proper frequency
Anna Bridge 169:a7c7b631e539 243 * @returns #E_NO_ERROR if Frequency is supported, #E_NOT_Supported otherwise.
Anna Bridge 169:a7c7b631e539 244 */
Anna Bridge 169:a7c7b631e539 245 int I2CM_SetFrequency(mxc_i2cm_regs_t *i2cm, int speed);
Anna Bridge 169:a7c7b631e539 246
Anna Bridge 169:a7c7b631e539 247 void I2CM_Recover(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 248 int I2CM_WriteTxFifo(mxc_i2cm_regs_t *regs, mxc_i2cm_fifo_regs_t *fifo, const uint16_t data);
Anna Bridge 169:a7c7b631e539 249 int I2CM_TxInProgress(mxc_i2cm_regs_t *i2cm);
Anna Bridge 169:a7c7b631e539 250 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);
Anna Bridge 169:a7c7b631e539 251 int I2CM_Rx(mxc_i2cm_regs_t *i2cm, mxc_i2cm_fifo_regs_t *fifo, uint8_t addr, uint8_t *data, uint32_t len);
Anna Bridge 169:a7c7b631e539 252
Anna Bridge 169:a7c7b631e539 253 #ifdef __cplusplus
Anna Bridge 169:a7c7b631e539 254 }
Anna Bridge 169:a7c7b631e539 255 #endif
Anna Bridge 169:a7c7b631e539 256
Anna Bridge 169:a7c7b631e539 257 #endif /* _I2CM_H_ */