Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
TARGET_EFM32WG_STK3800/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_i2c.h@156:ff21514d8981, 2017-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Nov 08 17:18:06 2017 +0000
- Revision:
- 156:ff21514d8981
- Child:
- 159:7130f322cb7e
Reverting back to release 154 of the mbed library
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| AnnaBridge | 156:ff21514d8981 | 1 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 2 | * @file em_i2c.h |
| AnnaBridge | 156:ff21514d8981 | 3 | * @brief Inter-intergrated circuit (I2C) peripheral API |
| AnnaBridge | 156:ff21514d8981 | 4 | * @version 5.1.2 |
| AnnaBridge | 156:ff21514d8981 | 5 | ******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 6 | * @section License |
| AnnaBridge | 156:ff21514d8981 | 7 | * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> |
| AnnaBridge | 156:ff21514d8981 | 8 | ******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 9 | * |
| AnnaBridge | 156:ff21514d8981 | 10 | * Permission is granted to anyone to use this software for any purpose, |
| AnnaBridge | 156:ff21514d8981 | 11 | * including commercial applications, and to alter it and redistribute it |
| AnnaBridge | 156:ff21514d8981 | 12 | * freely, subject to the following restrictions: |
| AnnaBridge | 156:ff21514d8981 | 13 | * |
| AnnaBridge | 156:ff21514d8981 | 14 | * 1. The origin of this software must not be misrepresented; you must not |
| AnnaBridge | 156:ff21514d8981 | 15 | * claim that you wrote the original software. |
| AnnaBridge | 156:ff21514d8981 | 16 | * 2. Altered source versions must be plainly marked as such, and must not be |
| AnnaBridge | 156:ff21514d8981 | 17 | * misrepresented as being the original software. |
| AnnaBridge | 156:ff21514d8981 | 18 | * 3. This notice may not be removed or altered from any source distribution. |
| AnnaBridge | 156:ff21514d8981 | 19 | * |
| AnnaBridge | 156:ff21514d8981 | 20 | * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no |
| AnnaBridge | 156:ff21514d8981 | 21 | * obligation to support this Software. Silicon Labs is providing the |
| AnnaBridge | 156:ff21514d8981 | 22 | * Software "AS IS", with no express or implied warranties of any kind, |
| AnnaBridge | 156:ff21514d8981 | 23 | * including, but not limited to, any implied warranties of merchantability |
| AnnaBridge | 156:ff21514d8981 | 24 | * or fitness for any particular purpose or warranties against infringement |
| AnnaBridge | 156:ff21514d8981 | 25 | * of any proprietary rights of a third party. |
| AnnaBridge | 156:ff21514d8981 | 26 | * |
| AnnaBridge | 156:ff21514d8981 | 27 | * Silicon Labs will not be liable for any consequential, incidental, or |
| AnnaBridge | 156:ff21514d8981 | 28 | * special damages, or any other relief, or for any claim by any third party, |
| AnnaBridge | 156:ff21514d8981 | 29 | * arising from your use of this Software. |
| AnnaBridge | 156:ff21514d8981 | 30 | * |
| AnnaBridge | 156:ff21514d8981 | 31 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 32 | |
| AnnaBridge | 156:ff21514d8981 | 33 | #ifndef EM_I2C_H |
| AnnaBridge | 156:ff21514d8981 | 34 | #define EM_I2C_H |
| AnnaBridge | 156:ff21514d8981 | 35 | |
| AnnaBridge | 156:ff21514d8981 | 36 | #include "em_device.h" |
| AnnaBridge | 156:ff21514d8981 | 37 | #if defined(I2C_COUNT) && (I2C_COUNT > 0) |
| AnnaBridge | 156:ff21514d8981 | 38 | |
| AnnaBridge | 156:ff21514d8981 | 39 | #include <stdbool.h> |
| AnnaBridge | 156:ff21514d8981 | 40 | |
| AnnaBridge | 156:ff21514d8981 | 41 | #ifdef __cplusplus |
| AnnaBridge | 156:ff21514d8981 | 42 | extern "C" { |
| AnnaBridge | 156:ff21514d8981 | 43 | #endif |
| AnnaBridge | 156:ff21514d8981 | 44 | |
| AnnaBridge | 156:ff21514d8981 | 45 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 46 | * @addtogroup emlib |
| AnnaBridge | 156:ff21514d8981 | 47 | * @{ |
| AnnaBridge | 156:ff21514d8981 | 48 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 49 | |
| AnnaBridge | 156:ff21514d8981 | 50 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 51 | * @addtogroup I2C |
| AnnaBridge | 156:ff21514d8981 | 52 | * @{ |
| AnnaBridge | 156:ff21514d8981 | 53 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 54 | |
| AnnaBridge | 156:ff21514d8981 | 55 | /******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 56 | ******************************* DEFINES *********************************** |
| AnnaBridge | 156:ff21514d8981 | 57 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 58 | |
| AnnaBridge | 156:ff21514d8981 | 59 | /** |
| AnnaBridge | 156:ff21514d8981 | 60 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 61 | * Standard mode max frequency assuming using 4:4 ratio for Nlow:Nhigh. |
| AnnaBridge | 156:ff21514d8981 | 62 | * @details |
| AnnaBridge | 156:ff21514d8981 | 63 | * From I2C specification: Min Tlow = 4.7us, min Thigh = 4.0us, |
| AnnaBridge | 156:ff21514d8981 | 64 | * max Trise=1.0us, max Tfall=0.3us. Since ratio is 4:4, have to use |
| AnnaBridge | 156:ff21514d8981 | 65 | * worst case value of Tlow or Thigh as base. |
| AnnaBridge | 156:ff21514d8981 | 66 | * |
| AnnaBridge | 156:ff21514d8981 | 67 | * 1/(Tlow + Thigh + 1us + 0.3us) = 1/(4.7 + 4.7 + 1.3)us = 93458Hz |
| AnnaBridge | 156:ff21514d8981 | 68 | * @note |
| AnnaBridge | 156:ff21514d8981 | 69 | * Due to chip characteristics, the max value is somewhat reduced. |
| AnnaBridge | 156:ff21514d8981 | 70 | */ |
| AnnaBridge | 156:ff21514d8981 | 71 | #if defined(_SILICON_LABS_32B_SERIES_0) \ |
| AnnaBridge | 156:ff21514d8981 | 72 | && (defined(_EFM32_GECKO_FAMILY) \ |
| AnnaBridge | 156:ff21514d8981 | 73 | || defined(_EFM32_TINY_FAMILY) \ |
| AnnaBridge | 156:ff21514d8981 | 74 | || defined(_EFM32_ZERO_FAMILY) \ |
| AnnaBridge | 156:ff21514d8981 | 75 | || defined(_EFM32_HAPPY_FAMILY)) |
| AnnaBridge | 156:ff21514d8981 | 76 | #define I2C_FREQ_STANDARD_MAX 93000 |
| AnnaBridge | 156:ff21514d8981 | 77 | #elif defined(_SILICON_LABS_32B_SERIES_0) \ |
| AnnaBridge | 156:ff21514d8981 | 78 | && (defined(_EFM32_GIANT_FAMILY) \ |
| AnnaBridge | 156:ff21514d8981 | 79 | || defined(_EFM32_WONDER_FAMILY)) |
| AnnaBridge | 156:ff21514d8981 | 80 | #define I2C_FREQ_STANDARD_MAX 92000 |
| AnnaBridge | 156:ff21514d8981 | 81 | #elif defined(_SILICON_LABS_32B_SERIES_1) |
| AnnaBridge | 156:ff21514d8981 | 82 | // None of the chips on this platform has been characterized on this parameter. |
| AnnaBridge | 156:ff21514d8981 | 83 | // Use same value as on Wonder until further notice. |
| AnnaBridge | 156:ff21514d8981 | 84 | #define I2C_FREQ_STANDARD_MAX 92000 |
| AnnaBridge | 156:ff21514d8981 | 85 | #else |
| AnnaBridge | 156:ff21514d8981 | 86 | #error "Unknown device family." |
| AnnaBridge | 156:ff21514d8981 | 87 | #endif |
| AnnaBridge | 156:ff21514d8981 | 88 | |
| AnnaBridge | 156:ff21514d8981 | 89 | /** |
| AnnaBridge | 156:ff21514d8981 | 90 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 91 | * Fast mode max frequency assuming using 6:3 ratio for Nlow:Nhigh. |
| AnnaBridge | 156:ff21514d8981 | 92 | * @details |
| AnnaBridge | 156:ff21514d8981 | 93 | * From I2C specification: Min Tlow = 1.3us, min Thigh = 0.6us, |
| AnnaBridge | 156:ff21514d8981 | 94 | * max Trise=0.3us, max Tfall=0.3us. Since ratio is 6:3, have to use |
| AnnaBridge | 156:ff21514d8981 | 95 | * worst case value of Tlow or 2xThigh as base. |
| AnnaBridge | 156:ff21514d8981 | 96 | * |
| AnnaBridge | 156:ff21514d8981 | 97 | * 1/(Tlow + Thigh + 0.3us + 0.3us) = 1/(1.3 + 0.65 + 0.6)us = 392157Hz |
| AnnaBridge | 156:ff21514d8981 | 98 | */ |
| AnnaBridge | 156:ff21514d8981 | 99 | #define I2C_FREQ_FAST_MAX 392157 |
| AnnaBridge | 156:ff21514d8981 | 100 | |
| AnnaBridge | 156:ff21514d8981 | 101 | |
| AnnaBridge | 156:ff21514d8981 | 102 | /** |
| AnnaBridge | 156:ff21514d8981 | 103 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 104 | * Fast mode+ max frequency assuming using 11:6 ratio for Nlow:Nhigh. |
| AnnaBridge | 156:ff21514d8981 | 105 | * @details |
| AnnaBridge | 156:ff21514d8981 | 106 | * From I2C specification: Min Tlow = 0.5us, min Thigh = 0.26us, |
| AnnaBridge | 156:ff21514d8981 | 107 | * max Trise=0.12us, max Tfall=0.12us. Since ratio is 11:6, have to use |
| AnnaBridge | 156:ff21514d8981 | 108 | * worst case value of Tlow or (11/6)xThigh as base. |
| AnnaBridge | 156:ff21514d8981 | 109 | * |
| AnnaBridge | 156:ff21514d8981 | 110 | * 1/(Tlow + Thigh + 0.12us + 0.12us) = 1/(0.5 + 0.273 + 0.24)us = 987167Hz |
| AnnaBridge | 156:ff21514d8981 | 111 | */ |
| AnnaBridge | 156:ff21514d8981 | 112 | #define I2C_FREQ_FASTPLUS_MAX 987167 |
| AnnaBridge | 156:ff21514d8981 | 113 | |
| AnnaBridge | 156:ff21514d8981 | 114 | |
| AnnaBridge | 156:ff21514d8981 | 115 | /** |
| AnnaBridge | 156:ff21514d8981 | 116 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 117 | * Indicate plain write sequence: S+ADDR(W)+DATA0+P. |
| AnnaBridge | 156:ff21514d8981 | 118 | * @details |
| AnnaBridge | 156:ff21514d8981 | 119 | * @li S - Start |
| AnnaBridge | 156:ff21514d8981 | 120 | * @li ADDR(W) - address with W/R bit cleared |
| AnnaBridge | 156:ff21514d8981 | 121 | * @li DATA0 - Data taken from buffer with index 0 |
| AnnaBridge | 156:ff21514d8981 | 122 | * @li P - Stop |
| AnnaBridge | 156:ff21514d8981 | 123 | */ |
| AnnaBridge | 156:ff21514d8981 | 124 | #define I2C_FLAG_WRITE 0x0001 |
| AnnaBridge | 156:ff21514d8981 | 125 | |
| AnnaBridge | 156:ff21514d8981 | 126 | /** |
| AnnaBridge | 156:ff21514d8981 | 127 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 128 | * Indicate plain read sequence: S+ADDR(R)+DATA0+P. |
| AnnaBridge | 156:ff21514d8981 | 129 | * @details |
| AnnaBridge | 156:ff21514d8981 | 130 | * @li S - Start |
| AnnaBridge | 156:ff21514d8981 | 131 | * @li ADDR(R) - address with W/R bit set |
| AnnaBridge | 156:ff21514d8981 | 132 | * @li DATA0 - Data read into buffer with index 0 |
| AnnaBridge | 156:ff21514d8981 | 133 | * @li P - Stop |
| AnnaBridge | 156:ff21514d8981 | 134 | */ |
| AnnaBridge | 156:ff21514d8981 | 135 | #define I2C_FLAG_READ 0x0002 |
| AnnaBridge | 156:ff21514d8981 | 136 | |
| AnnaBridge | 156:ff21514d8981 | 137 | /** |
| AnnaBridge | 156:ff21514d8981 | 138 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 139 | * Indicate combined write/read sequence: S+ADDR(W)+DATA0+Sr+ADDR(R)+DATA1+P. |
| AnnaBridge | 156:ff21514d8981 | 140 | * @details |
| AnnaBridge | 156:ff21514d8981 | 141 | * @li S - Start |
| AnnaBridge | 156:ff21514d8981 | 142 | * @li Sr - Repeated start |
| AnnaBridge | 156:ff21514d8981 | 143 | * @li ADDR(W) - address with W/R bit cleared |
| AnnaBridge | 156:ff21514d8981 | 144 | * @li ADDR(R) - address with W/R bit set |
| AnnaBridge | 156:ff21514d8981 | 145 | * @li DATAn - Data written from/read into buffer with index n |
| AnnaBridge | 156:ff21514d8981 | 146 | * @li P - Stop |
| AnnaBridge | 156:ff21514d8981 | 147 | */ |
| AnnaBridge | 156:ff21514d8981 | 148 | #define I2C_FLAG_WRITE_READ 0x0004 |
| AnnaBridge | 156:ff21514d8981 | 149 | |
| AnnaBridge | 156:ff21514d8981 | 150 | /** |
| AnnaBridge | 156:ff21514d8981 | 151 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 152 | * Indicate write sequence using two buffers: S+ADDR(W)+DATA0+DATA1+P. |
| AnnaBridge | 156:ff21514d8981 | 153 | * @details |
| AnnaBridge | 156:ff21514d8981 | 154 | * @li S - Start |
| AnnaBridge | 156:ff21514d8981 | 155 | * @li ADDR(W) - address with W/R bit cleared |
| AnnaBridge | 156:ff21514d8981 | 156 | * @li DATAn - Data written from buffer with index n |
| AnnaBridge | 156:ff21514d8981 | 157 | * @li P - Stop |
| AnnaBridge | 156:ff21514d8981 | 158 | */ |
| AnnaBridge | 156:ff21514d8981 | 159 | #define I2C_FLAG_WRITE_WRITE 0x0008 |
| AnnaBridge | 156:ff21514d8981 | 160 | |
| AnnaBridge | 156:ff21514d8981 | 161 | /** Use 10 bit address. */ |
| AnnaBridge | 156:ff21514d8981 | 162 | #define I2C_FLAG_10BIT_ADDR 0x0010 |
| AnnaBridge | 156:ff21514d8981 | 163 | |
| AnnaBridge | 156:ff21514d8981 | 164 | |
| AnnaBridge | 156:ff21514d8981 | 165 | /******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 166 | ******************************** ENUMS ************************************ |
| AnnaBridge | 156:ff21514d8981 | 167 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 168 | |
| AnnaBridge | 156:ff21514d8981 | 169 | /** Clock low to high ratio settings. */ |
| AnnaBridge | 156:ff21514d8981 | 170 | typedef enum |
| AnnaBridge | 156:ff21514d8981 | 171 | { |
| AnnaBridge | 156:ff21514d8981 | 172 | i2cClockHLRStandard = _I2C_CTRL_CLHR_STANDARD, /**< Ratio is 4:4 */ |
| AnnaBridge | 156:ff21514d8981 | 173 | i2cClockHLRAsymetric = _I2C_CTRL_CLHR_ASYMMETRIC, /**< Ratio is 6:3 */ |
| AnnaBridge | 156:ff21514d8981 | 174 | i2cClockHLRFast = _I2C_CTRL_CLHR_FAST /**< Ratio is 11:3 */ |
| AnnaBridge | 156:ff21514d8981 | 175 | } I2C_ClockHLR_TypeDef; |
| AnnaBridge | 156:ff21514d8981 | 176 | |
| AnnaBridge | 156:ff21514d8981 | 177 | |
| AnnaBridge | 156:ff21514d8981 | 178 | /** Return codes for single master mode transfer function. */ |
| AnnaBridge | 156:ff21514d8981 | 179 | typedef enum |
| AnnaBridge | 156:ff21514d8981 | 180 | { |
| AnnaBridge | 156:ff21514d8981 | 181 | /* In progress code (>0) */ |
| AnnaBridge | 156:ff21514d8981 | 182 | i2cTransferInProgress = 1, /**< Transfer in progress. */ |
| AnnaBridge | 156:ff21514d8981 | 183 | |
| AnnaBridge | 156:ff21514d8981 | 184 | /* Complete code (=0) */ |
| AnnaBridge | 156:ff21514d8981 | 185 | i2cTransferDone = 0, /**< Transfer completed successfully. */ |
| AnnaBridge | 156:ff21514d8981 | 186 | |
| AnnaBridge | 156:ff21514d8981 | 187 | /* Transfer error codes (<0) */ |
| AnnaBridge | 156:ff21514d8981 | 188 | i2cTransferNack = -1, /**< NACK received during transfer. */ |
| AnnaBridge | 156:ff21514d8981 | 189 | i2cTransferBusErr = -2, /**< Bus error during transfer (misplaced START/STOP). */ |
| AnnaBridge | 156:ff21514d8981 | 190 | i2cTransferArbLost = -3, /**< Arbitration lost during transfer. */ |
| AnnaBridge | 156:ff21514d8981 | 191 | i2cTransferUsageFault = -4, /**< Usage fault. */ |
| AnnaBridge | 156:ff21514d8981 | 192 | i2cTransferSwFault = -5 /**< SW fault. */ |
| AnnaBridge | 156:ff21514d8981 | 193 | } I2C_TransferReturn_TypeDef; |
| AnnaBridge | 156:ff21514d8981 | 194 | |
| AnnaBridge | 156:ff21514d8981 | 195 | |
| AnnaBridge | 156:ff21514d8981 | 196 | /******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 197 | ******************************* STRUCTS *********************************** |
| AnnaBridge | 156:ff21514d8981 | 198 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 199 | |
| AnnaBridge | 156:ff21514d8981 | 200 | /** I2C initialization structure. */ |
| AnnaBridge | 156:ff21514d8981 | 201 | typedef struct |
| AnnaBridge | 156:ff21514d8981 | 202 | { |
| AnnaBridge | 156:ff21514d8981 | 203 | /** Enable I2C peripheral when init completed. */ |
| AnnaBridge | 156:ff21514d8981 | 204 | bool enable; |
| AnnaBridge | 156:ff21514d8981 | 205 | |
| AnnaBridge | 156:ff21514d8981 | 206 | /** Set to master (true) or slave (false) mode */ |
| AnnaBridge | 156:ff21514d8981 | 207 | bool master; |
| AnnaBridge | 156:ff21514d8981 | 208 | |
| AnnaBridge | 156:ff21514d8981 | 209 | /** |
| AnnaBridge | 156:ff21514d8981 | 210 | * I2C reference clock assumed when configuring bus frequency setup. |
| AnnaBridge | 156:ff21514d8981 | 211 | * Set it to 0 if currently configurated reference clock shall be used |
| AnnaBridge | 156:ff21514d8981 | 212 | * This parameter is only applicable if operating in master mode. |
| AnnaBridge | 156:ff21514d8981 | 213 | */ |
| AnnaBridge | 156:ff21514d8981 | 214 | uint32_t refFreq; |
| AnnaBridge | 156:ff21514d8981 | 215 | |
| AnnaBridge | 156:ff21514d8981 | 216 | /** |
| AnnaBridge | 156:ff21514d8981 | 217 | * (Max) I2C bus frequency to use. This parameter is only applicable |
| AnnaBridge | 156:ff21514d8981 | 218 | * if operating in master mode. |
| AnnaBridge | 156:ff21514d8981 | 219 | */ |
| AnnaBridge | 156:ff21514d8981 | 220 | uint32_t freq; |
| AnnaBridge | 156:ff21514d8981 | 221 | |
| AnnaBridge | 156:ff21514d8981 | 222 | /** Clock low/high ratio control. */ |
| AnnaBridge | 156:ff21514d8981 | 223 | I2C_ClockHLR_TypeDef clhr; |
| AnnaBridge | 156:ff21514d8981 | 224 | } I2C_Init_TypeDef; |
| AnnaBridge | 156:ff21514d8981 | 225 | |
| AnnaBridge | 156:ff21514d8981 | 226 | /** Suggested default config for I2C init structure. */ |
| AnnaBridge | 156:ff21514d8981 | 227 | #define I2C_INIT_DEFAULT \ |
| AnnaBridge | 156:ff21514d8981 | 228 | { \ |
| AnnaBridge | 156:ff21514d8981 | 229 | true, /* Enable when init done */ \ |
| AnnaBridge | 156:ff21514d8981 | 230 | true, /* Set to master mode */ \ |
| AnnaBridge | 156:ff21514d8981 | 231 | 0, /* Use currently configured reference clock */ \ |
| AnnaBridge | 156:ff21514d8981 | 232 | I2C_FREQ_STANDARD_MAX, /* Set to standard rate assuring being */ \ |
| AnnaBridge | 156:ff21514d8981 | 233 | /* within I2C spec */ \ |
| AnnaBridge | 156:ff21514d8981 | 234 | i2cClockHLRStandard /* Set to use 4:4 low/high duty cycle */ \ |
| AnnaBridge | 156:ff21514d8981 | 235 | } |
| AnnaBridge | 156:ff21514d8981 | 236 | |
| AnnaBridge | 156:ff21514d8981 | 237 | |
| AnnaBridge | 156:ff21514d8981 | 238 | /** |
| AnnaBridge | 156:ff21514d8981 | 239 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 240 | * Master mode transfer message structure used to define a complete |
| AnnaBridge | 156:ff21514d8981 | 241 | * I2C transfer sequence (from start to stop). |
| AnnaBridge | 156:ff21514d8981 | 242 | * @details |
| AnnaBridge | 156:ff21514d8981 | 243 | * The structure allows for defining the following types of sequences, |
| AnnaBridge | 156:ff21514d8981 | 244 | * please refer to defines for sequence details. |
| AnnaBridge | 156:ff21514d8981 | 245 | * @li #I2C_FLAG_READ - data read into buf[0].data |
| AnnaBridge | 156:ff21514d8981 | 246 | * @li #I2C_FLAG_WRITE - data written from buf[0].data |
| AnnaBridge | 156:ff21514d8981 | 247 | * @li #I2C_FLAG_WRITE_READ - data written from buf[0].data and read |
| AnnaBridge | 156:ff21514d8981 | 248 | * into buf[1].data |
| AnnaBridge | 156:ff21514d8981 | 249 | * @li #I2C_FLAG_WRITE_WRITE - data written from buf[0].data and |
| AnnaBridge | 156:ff21514d8981 | 250 | * buf[1].data |
| AnnaBridge | 156:ff21514d8981 | 251 | */ |
| AnnaBridge | 156:ff21514d8981 | 252 | typedef struct |
| AnnaBridge | 156:ff21514d8981 | 253 | { |
| AnnaBridge | 156:ff21514d8981 | 254 | /** |
| AnnaBridge | 156:ff21514d8981 | 255 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 256 | * Address to use after (repeated) start. |
| AnnaBridge | 156:ff21514d8981 | 257 | * @details |
| AnnaBridge | 156:ff21514d8981 | 258 | * Layout details, A = address bit, X = don't care bit (set to 0): |
| AnnaBridge | 156:ff21514d8981 | 259 | * @li 7 bit address - use format AAAA AAAX. |
| AnnaBridge | 156:ff21514d8981 | 260 | * @li 10 bit address - use format XXXX XAAX AAAA AAAA |
| AnnaBridge | 156:ff21514d8981 | 261 | */ |
| AnnaBridge | 156:ff21514d8981 | 262 | uint16_t addr; |
| AnnaBridge | 156:ff21514d8981 | 263 | |
| AnnaBridge | 156:ff21514d8981 | 264 | /** Flags defining sequence type and details, see I2C_FLAG_... defines. */ |
| AnnaBridge | 156:ff21514d8981 | 265 | uint16_t flags; |
| AnnaBridge | 156:ff21514d8981 | 266 | |
| AnnaBridge | 156:ff21514d8981 | 267 | /** |
| AnnaBridge | 156:ff21514d8981 | 268 | * Buffers used to hold data to send from or receive into depending |
| AnnaBridge | 156:ff21514d8981 | 269 | * on sequence type. |
| AnnaBridge | 156:ff21514d8981 | 270 | */ |
| AnnaBridge | 156:ff21514d8981 | 271 | struct |
| AnnaBridge | 156:ff21514d8981 | 272 | { |
| AnnaBridge | 156:ff21514d8981 | 273 | /** Buffer used for data to transmit/receive, must be @p len long. */ |
| AnnaBridge | 156:ff21514d8981 | 274 | uint8_t *data; |
| AnnaBridge | 156:ff21514d8981 | 275 | |
| AnnaBridge | 156:ff21514d8981 | 276 | /** |
| AnnaBridge | 156:ff21514d8981 | 277 | * Number of bytes in @p data to send or receive. Notice that when |
| AnnaBridge | 156:ff21514d8981 | 278 | * receiving data to this buffer, at least 1 byte must be received. |
| AnnaBridge | 156:ff21514d8981 | 279 | * Setting @p len to 0 in the receive case is considered a usage fault. |
| AnnaBridge | 156:ff21514d8981 | 280 | * Transmitting 0 bytes is legal, in which case only the address |
| AnnaBridge | 156:ff21514d8981 | 281 | * is transmitted after the start condition. |
| AnnaBridge | 156:ff21514d8981 | 282 | */ |
| AnnaBridge | 156:ff21514d8981 | 283 | uint16_t len; |
| AnnaBridge | 156:ff21514d8981 | 284 | } buf[2]; |
| AnnaBridge | 156:ff21514d8981 | 285 | } I2C_TransferSeq_TypeDef; |
| AnnaBridge | 156:ff21514d8981 | 286 | |
| AnnaBridge | 156:ff21514d8981 | 287 | |
| AnnaBridge | 156:ff21514d8981 | 288 | /******************************************************************************* |
| AnnaBridge | 156:ff21514d8981 | 289 | ***************************** PROTOTYPES ********************************** |
| AnnaBridge | 156:ff21514d8981 | 290 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 291 | |
| AnnaBridge | 156:ff21514d8981 | 292 | uint32_t I2C_BusFreqGet(I2C_TypeDef *i2c); |
| AnnaBridge | 156:ff21514d8981 | 293 | void I2C_BusFreqSet(I2C_TypeDef *i2c, |
| AnnaBridge | 156:ff21514d8981 | 294 | uint32_t freqRef, |
| AnnaBridge | 156:ff21514d8981 | 295 | uint32_t freqScl, |
| AnnaBridge | 156:ff21514d8981 | 296 | I2C_ClockHLR_TypeDef i2cMode); |
| AnnaBridge | 156:ff21514d8981 | 297 | void I2C_Enable(I2C_TypeDef *i2c, bool enable); |
| AnnaBridge | 156:ff21514d8981 | 298 | void I2C_Init(I2C_TypeDef *i2c, const I2C_Init_TypeDef *init); |
| AnnaBridge | 156:ff21514d8981 | 299 | |
| AnnaBridge | 156:ff21514d8981 | 300 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 301 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 302 | * Clear one or more pending I2C interrupts. |
| AnnaBridge | 156:ff21514d8981 | 303 | * |
| AnnaBridge | 156:ff21514d8981 | 304 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 305 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 306 | * |
| AnnaBridge | 156:ff21514d8981 | 307 | * @param[in] flags |
| AnnaBridge | 156:ff21514d8981 | 308 | * Pending I2C interrupt source to clear. Use a bitwse logic OR combination of |
| AnnaBridge | 156:ff21514d8981 | 309 | * valid interrupt flags for the I2C module (I2C_IF_nnn). |
| AnnaBridge | 156:ff21514d8981 | 310 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 311 | __STATIC_INLINE void I2C_IntClear(I2C_TypeDef *i2c, uint32_t flags) |
| AnnaBridge | 156:ff21514d8981 | 312 | { |
| AnnaBridge | 156:ff21514d8981 | 313 | i2c->IFC = flags; |
| AnnaBridge | 156:ff21514d8981 | 314 | } |
| AnnaBridge | 156:ff21514d8981 | 315 | |
| AnnaBridge | 156:ff21514d8981 | 316 | |
| AnnaBridge | 156:ff21514d8981 | 317 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 318 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 319 | * Disable one or more I2C interrupts. |
| AnnaBridge | 156:ff21514d8981 | 320 | * |
| AnnaBridge | 156:ff21514d8981 | 321 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 322 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 323 | * |
| AnnaBridge | 156:ff21514d8981 | 324 | * @param[in] flags |
| AnnaBridge | 156:ff21514d8981 | 325 | * I2C interrupt sources to disable. Use a bitwise logic OR combination of |
| AnnaBridge | 156:ff21514d8981 | 326 | * valid interrupt flags for the I2C module (I2C_IF_nnn). |
| AnnaBridge | 156:ff21514d8981 | 327 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 328 | __STATIC_INLINE void I2C_IntDisable(I2C_TypeDef *i2c, uint32_t flags) |
| AnnaBridge | 156:ff21514d8981 | 329 | { |
| AnnaBridge | 156:ff21514d8981 | 330 | i2c->IEN &= ~(flags); |
| AnnaBridge | 156:ff21514d8981 | 331 | } |
| AnnaBridge | 156:ff21514d8981 | 332 | |
| AnnaBridge | 156:ff21514d8981 | 333 | |
| AnnaBridge | 156:ff21514d8981 | 334 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 335 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 336 | * Enable one or more I2C interrupts. |
| AnnaBridge | 156:ff21514d8981 | 337 | * |
| AnnaBridge | 156:ff21514d8981 | 338 | * @note |
| AnnaBridge | 156:ff21514d8981 | 339 | * Depending on the use, a pending interrupt may already be set prior to |
| AnnaBridge | 156:ff21514d8981 | 340 | * enabling the interrupt. Consider using I2C_IntClear() prior to enabling |
| AnnaBridge | 156:ff21514d8981 | 341 | * if such a pending interrupt should be ignored. |
| AnnaBridge | 156:ff21514d8981 | 342 | * |
| AnnaBridge | 156:ff21514d8981 | 343 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 344 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 345 | * |
| AnnaBridge | 156:ff21514d8981 | 346 | * @param[in] flags |
| AnnaBridge | 156:ff21514d8981 | 347 | * I2C interrupt sources to enable. Use a bitwise logic OR combination of |
| AnnaBridge | 156:ff21514d8981 | 348 | * valid interrupt flags for the I2C module (I2C_IF_nnn). |
| AnnaBridge | 156:ff21514d8981 | 349 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 350 | __STATIC_INLINE void I2C_IntEnable(I2C_TypeDef *i2c, uint32_t flags) |
| AnnaBridge | 156:ff21514d8981 | 351 | { |
| AnnaBridge | 156:ff21514d8981 | 352 | i2c->IEN |= flags; |
| AnnaBridge | 156:ff21514d8981 | 353 | } |
| AnnaBridge | 156:ff21514d8981 | 354 | |
| AnnaBridge | 156:ff21514d8981 | 355 | |
| AnnaBridge | 156:ff21514d8981 | 356 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 357 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 358 | * Get pending I2C interrupt flags. |
| AnnaBridge | 156:ff21514d8981 | 359 | * |
| AnnaBridge | 156:ff21514d8981 | 360 | * @note |
| AnnaBridge | 156:ff21514d8981 | 361 | * The event bits are not cleared by the use of this function. |
| AnnaBridge | 156:ff21514d8981 | 362 | * |
| AnnaBridge | 156:ff21514d8981 | 363 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 364 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 365 | * |
| AnnaBridge | 156:ff21514d8981 | 366 | * @return |
| AnnaBridge | 156:ff21514d8981 | 367 | * I2C interrupt sources pending. A bitwise logic OR combination of valid |
| AnnaBridge | 156:ff21514d8981 | 368 | * interrupt flags for the I2C module (I2C_IF_nnn). |
| AnnaBridge | 156:ff21514d8981 | 369 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 370 | __STATIC_INLINE uint32_t I2C_IntGet(I2C_TypeDef *i2c) |
| AnnaBridge | 156:ff21514d8981 | 371 | { |
| AnnaBridge | 156:ff21514d8981 | 372 | return i2c->IF; |
| AnnaBridge | 156:ff21514d8981 | 373 | } |
| AnnaBridge | 156:ff21514d8981 | 374 | |
| AnnaBridge | 156:ff21514d8981 | 375 | |
| AnnaBridge | 156:ff21514d8981 | 376 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 377 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 378 | * Get enabled and pending I2C interrupt flags. |
| AnnaBridge | 156:ff21514d8981 | 379 | * Useful for handling more interrupt sources in the same interrupt handler. |
| AnnaBridge | 156:ff21514d8981 | 380 | * |
| AnnaBridge | 156:ff21514d8981 | 381 | * @note |
| AnnaBridge | 156:ff21514d8981 | 382 | * Interrupt flags are not cleared by the use of this function. |
| AnnaBridge | 156:ff21514d8981 | 383 | * |
| AnnaBridge | 156:ff21514d8981 | 384 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 385 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 386 | * |
| AnnaBridge | 156:ff21514d8981 | 387 | * @return |
| AnnaBridge | 156:ff21514d8981 | 388 | * Pending and enabled I2C interrupt sources |
| AnnaBridge | 156:ff21514d8981 | 389 | * The return value is the bitwise AND of |
| AnnaBridge | 156:ff21514d8981 | 390 | * - the enabled interrupt sources in I2Cn_IEN and |
| AnnaBridge | 156:ff21514d8981 | 391 | * - the pending interrupt flags I2Cn_IF |
| AnnaBridge | 156:ff21514d8981 | 392 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 393 | __STATIC_INLINE uint32_t I2C_IntGetEnabled(I2C_TypeDef *i2c) |
| AnnaBridge | 156:ff21514d8981 | 394 | { |
| AnnaBridge | 156:ff21514d8981 | 395 | uint32_t ien; |
| AnnaBridge | 156:ff21514d8981 | 396 | |
| AnnaBridge | 156:ff21514d8981 | 397 | ien = i2c->IEN; |
| AnnaBridge | 156:ff21514d8981 | 398 | return i2c->IF & ien; |
| AnnaBridge | 156:ff21514d8981 | 399 | } |
| AnnaBridge | 156:ff21514d8981 | 400 | |
| AnnaBridge | 156:ff21514d8981 | 401 | |
| AnnaBridge | 156:ff21514d8981 | 402 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 403 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 404 | * Set one or more pending I2C interrupts from SW. |
| AnnaBridge | 156:ff21514d8981 | 405 | * |
| AnnaBridge | 156:ff21514d8981 | 406 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 407 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 408 | * |
| AnnaBridge | 156:ff21514d8981 | 409 | * @param[in] flags |
| AnnaBridge | 156:ff21514d8981 | 410 | * I2C interrupt sources to set to pending. Use a bitwise logic OR combination |
| AnnaBridge | 156:ff21514d8981 | 411 | * of valid interrupt flags for the I2C module (I2C_IF_nnn). |
| AnnaBridge | 156:ff21514d8981 | 412 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 413 | __STATIC_INLINE void I2C_IntSet(I2C_TypeDef *i2c, uint32_t flags) |
| AnnaBridge | 156:ff21514d8981 | 414 | { |
| AnnaBridge | 156:ff21514d8981 | 415 | i2c->IFS = flags; |
| AnnaBridge | 156:ff21514d8981 | 416 | } |
| AnnaBridge | 156:ff21514d8981 | 417 | |
| AnnaBridge | 156:ff21514d8981 | 418 | void I2C_Reset(I2C_TypeDef *i2c); |
| AnnaBridge | 156:ff21514d8981 | 419 | |
| AnnaBridge | 156:ff21514d8981 | 420 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 421 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 422 | * Get slave address used for I2C peripheral (when operating in slave mode). |
| AnnaBridge | 156:ff21514d8981 | 423 | * |
| AnnaBridge | 156:ff21514d8981 | 424 | * @details |
| AnnaBridge | 156:ff21514d8981 | 425 | * For 10 bit addressing mode, the address is split in two bytes, and only |
| AnnaBridge | 156:ff21514d8981 | 426 | * the first byte setting is fetched, effectively only controlling the 2 most |
| AnnaBridge | 156:ff21514d8981 | 427 | * significant bits of the 10 bit address. Full handling of 10 bit addressing |
| AnnaBridge | 156:ff21514d8981 | 428 | * in slave mode requires additional SW handling. |
| AnnaBridge | 156:ff21514d8981 | 429 | * |
| AnnaBridge | 156:ff21514d8981 | 430 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 431 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 432 | * |
| AnnaBridge | 156:ff21514d8981 | 433 | * @return |
| AnnaBridge | 156:ff21514d8981 | 434 | * I2C slave address in use. The 7 most significant bits define the actual |
| AnnaBridge | 156:ff21514d8981 | 435 | * address, the least significant bit is reserved and always returned as 0. |
| AnnaBridge | 156:ff21514d8981 | 436 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 437 | __STATIC_INLINE uint8_t I2C_SlaveAddressGet(I2C_TypeDef *i2c) |
| AnnaBridge | 156:ff21514d8981 | 438 | { |
| AnnaBridge | 156:ff21514d8981 | 439 | return ((uint8_t)(i2c->SADDR)); |
| AnnaBridge | 156:ff21514d8981 | 440 | } |
| AnnaBridge | 156:ff21514d8981 | 441 | |
| AnnaBridge | 156:ff21514d8981 | 442 | |
| AnnaBridge | 156:ff21514d8981 | 443 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 444 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 445 | * Set slave address to use for I2C peripheral (when operating in slave mode). |
| AnnaBridge | 156:ff21514d8981 | 446 | * |
| AnnaBridge | 156:ff21514d8981 | 447 | * @details |
| AnnaBridge | 156:ff21514d8981 | 448 | * For 10 bit addressing mode, the address is split in two bytes, and only |
| AnnaBridge | 156:ff21514d8981 | 449 | * the first byte is set, effectively only controlling the 2 most significant |
| AnnaBridge | 156:ff21514d8981 | 450 | * bits of the 10 bit address. Full handling of 10 bit addressing in slave |
| AnnaBridge | 156:ff21514d8981 | 451 | * mode requires additional SW handling. |
| AnnaBridge | 156:ff21514d8981 | 452 | * |
| AnnaBridge | 156:ff21514d8981 | 453 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 454 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 455 | * |
| AnnaBridge | 156:ff21514d8981 | 456 | * @param[in] addr |
| AnnaBridge | 156:ff21514d8981 | 457 | * I2C slave address to use. The 7 most significant bits define the actual |
| AnnaBridge | 156:ff21514d8981 | 458 | * address, the least significant bit is reserved and always set to 0. |
| AnnaBridge | 156:ff21514d8981 | 459 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 460 | __STATIC_INLINE void I2C_SlaveAddressSet(I2C_TypeDef *i2c, uint8_t addr) |
| AnnaBridge | 156:ff21514d8981 | 461 | { |
| AnnaBridge | 156:ff21514d8981 | 462 | i2c->SADDR = (uint32_t)addr & 0xfe; |
| AnnaBridge | 156:ff21514d8981 | 463 | } |
| AnnaBridge | 156:ff21514d8981 | 464 | |
| AnnaBridge | 156:ff21514d8981 | 465 | |
| AnnaBridge | 156:ff21514d8981 | 466 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 467 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 468 | * Get slave address mask used for I2C peripheral (when operating in slave |
| AnnaBridge | 156:ff21514d8981 | 469 | * mode). |
| AnnaBridge | 156:ff21514d8981 | 470 | * |
| AnnaBridge | 156:ff21514d8981 | 471 | * @details |
| AnnaBridge | 156:ff21514d8981 | 472 | * The address mask defines how the comparator works. A bit position with |
| AnnaBridge | 156:ff21514d8981 | 473 | * value 0 means that the corresponding slave address bit is ignored during |
| AnnaBridge | 156:ff21514d8981 | 474 | * comparison (don't care). A bit position with value 1 means that the |
| AnnaBridge | 156:ff21514d8981 | 475 | * corresponding slave address bit must match. |
| AnnaBridge | 156:ff21514d8981 | 476 | * |
| AnnaBridge | 156:ff21514d8981 | 477 | * For 10 bit addressing mode, the address is split in two bytes, and only |
| AnnaBridge | 156:ff21514d8981 | 478 | * the mask for the first address byte is fetched, effectively only |
| AnnaBridge | 156:ff21514d8981 | 479 | * controlling the 2 most significant bits of the 10 bit address. |
| AnnaBridge | 156:ff21514d8981 | 480 | * |
| AnnaBridge | 156:ff21514d8981 | 481 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 482 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 483 | * |
| AnnaBridge | 156:ff21514d8981 | 484 | * @return |
| AnnaBridge | 156:ff21514d8981 | 485 | * I2C slave address mask in use. The 7 most significant bits define the |
| AnnaBridge | 156:ff21514d8981 | 486 | * actual address mask, the least significant bit is reserved and always |
| AnnaBridge | 156:ff21514d8981 | 487 | * returned as 0. |
| AnnaBridge | 156:ff21514d8981 | 488 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 489 | __STATIC_INLINE uint8_t I2C_SlaveAddressMaskGet(I2C_TypeDef *i2c) |
| AnnaBridge | 156:ff21514d8981 | 490 | { |
| AnnaBridge | 156:ff21514d8981 | 491 | return ((uint8_t)(i2c->SADDRMASK)); |
| AnnaBridge | 156:ff21514d8981 | 492 | } |
| AnnaBridge | 156:ff21514d8981 | 493 | |
| AnnaBridge | 156:ff21514d8981 | 494 | |
| AnnaBridge | 156:ff21514d8981 | 495 | /***************************************************************************//** |
| AnnaBridge | 156:ff21514d8981 | 496 | * @brief |
| AnnaBridge | 156:ff21514d8981 | 497 | * Set slave address mask used for I2C peripheral (when operating in slave |
| AnnaBridge | 156:ff21514d8981 | 498 | * mode). |
| AnnaBridge | 156:ff21514d8981 | 499 | * |
| AnnaBridge | 156:ff21514d8981 | 500 | * @details |
| AnnaBridge | 156:ff21514d8981 | 501 | * The address mask defines how the comparator works. A bit position with |
| AnnaBridge | 156:ff21514d8981 | 502 | * value 0 means that the corresponding slave address bit is ignored during |
| AnnaBridge | 156:ff21514d8981 | 503 | * comparison (don't care). A bit position with value 1 means that the |
| AnnaBridge | 156:ff21514d8981 | 504 | * corresponding slave address bit must match. |
| AnnaBridge | 156:ff21514d8981 | 505 | * |
| AnnaBridge | 156:ff21514d8981 | 506 | * For 10 bit addressing mode, the address is split in two bytes, and only |
| AnnaBridge | 156:ff21514d8981 | 507 | * the mask for the first address byte is set, effectively only controlling |
| AnnaBridge | 156:ff21514d8981 | 508 | * the 2 most significant bits of the 10 bit address. |
| AnnaBridge | 156:ff21514d8981 | 509 | * |
| AnnaBridge | 156:ff21514d8981 | 510 | * @param[in] i2c |
| AnnaBridge | 156:ff21514d8981 | 511 | * Pointer to I2C peripheral register block. |
| AnnaBridge | 156:ff21514d8981 | 512 | * |
| AnnaBridge | 156:ff21514d8981 | 513 | * @param[in] mask |
| AnnaBridge | 156:ff21514d8981 | 514 | * I2C slave address mask to use. The 7 most significant bits define the |
| AnnaBridge | 156:ff21514d8981 | 515 | * actual address mask, the least significant bit is reserved and should |
| AnnaBridge | 156:ff21514d8981 | 516 | * be 0. |
| AnnaBridge | 156:ff21514d8981 | 517 | ******************************************************************************/ |
| AnnaBridge | 156:ff21514d8981 | 518 | __STATIC_INLINE void I2C_SlaveAddressMaskSet(I2C_TypeDef *i2c, uint8_t mask) |
| AnnaBridge | 156:ff21514d8981 | 519 | { |
| AnnaBridge | 156:ff21514d8981 | 520 | i2c->SADDRMASK = (uint32_t)mask & 0xfe; |
| AnnaBridge | 156:ff21514d8981 | 521 | } |
| AnnaBridge | 156:ff21514d8981 | 522 | |
| AnnaBridge | 156:ff21514d8981 | 523 | |
| AnnaBridge | 156:ff21514d8981 | 524 | I2C_TransferReturn_TypeDef I2C_Transfer(I2C_TypeDef *i2c); |
| AnnaBridge | 156:ff21514d8981 | 525 | I2C_TransferReturn_TypeDef I2C_TransferInit(I2C_TypeDef *i2c, |
| AnnaBridge | 156:ff21514d8981 | 526 | I2C_TransferSeq_TypeDef *seq); |
| AnnaBridge | 156:ff21514d8981 | 527 | |
| AnnaBridge | 156:ff21514d8981 | 528 | /** @} (end addtogroup I2C) */ |
| AnnaBridge | 156:ff21514d8981 | 529 | /** @} (end addtogroup emlib) */ |
| AnnaBridge | 156:ff21514d8981 | 530 | |
| AnnaBridge | 156:ff21514d8981 | 531 | #ifdef __cplusplus |
| AnnaBridge | 156:ff21514d8981 | 532 | } |
| AnnaBridge | 156:ff21514d8981 | 533 | #endif |
| AnnaBridge | 156:ff21514d8981 | 534 | |
| AnnaBridge | 156:ff21514d8981 | 535 | #endif /* defined(I2C_COUNT) && (I2C_COUNT > 0) */ |
| AnnaBridge | 156:ff21514d8981 | 536 | #endif /* EM_I2C_H */ |


