1 /**
2 ******************************************************************************
3 * @file stm32f4xx_ll_fmpi2c.h
4 * @author MCD Application Team
5 * @brief Header file of FMPI2C LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2016 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32F4xx_LL_FMPI2C_H
21 #define STM32F4xx_LL_FMPI2C_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #if defined(FMPI2C_CR1_PE)
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f4xx.h"
30
31 /** @addtogroup STM32F4xx_LL_Driver
32 * @{
33 */
34
35 #if defined (FMPI2C1)
36
37 /** @defgroup FMPI2C_LL FMPI2C
38 * @{
39 */
40
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43
44 /* Private constants ---------------------------------------------------------*/
45 /** @defgroup FMPI2C_LL_Private_Constants FMPI2C Private Constants
46 * @{
47 */
48 /**
49 * @}
50 */
51
52 /* Private macros ------------------------------------------------------------*/
53 #if defined(USE_FULL_LL_DRIVER)
54 /** @defgroup FMPI2C_LL_Private_Macros FMPI2C Private Macros
55 * @{
56 */
57 /**
58 * @}
59 */
60 #endif /*USE_FULL_LL_DRIVER*/
61
62 /* Exported types ------------------------------------------------------------*/
63 #if defined(USE_FULL_LL_DRIVER)
64 /** @defgroup FMPI2C_LL_ES_INIT FMPI2C Exported Init structure
65 * @{
66 */
67 typedef struct
68 {
69 uint32_t PeripheralMode; /*!< Specifies the peripheral mode.
70 This parameter can be a value of @ref FMPI2C_LL_EC_PERIPHERAL_MODE.
71
72 This feature can be modified afterwards using unitary function
73 @ref LL_FMPI2C_SetMode(). */
74
75 uint32_t Timing; /*!< Specifies the SDA setup, hold time and the SCL high, low period values.
76 This parameter must be set by referring to the STM32CubeMX Tool and
77 the helper macro @ref __LL_FMPI2C_CONVERT_TIMINGS().
78
79 This feature can be modified afterwards using unitary function
80 @ref LL_FMPI2C_SetTiming(). */
81
82 uint32_t AnalogFilter; /*!< Enables or disables analog noise filter.
83 This parameter can be a value of @ref FMPI2C_LL_EC_ANALOGFILTER_SELECTION.
84
85 This feature can be modified afterwards using unitary functions
86 @ref LL_FMPI2C_EnableAnalogFilter() or LL_FMPI2C_DisableAnalogFilter(). */
87
88 uint32_t DigitalFilter; /*!< Configures the digital noise filter.
89 This parameter can be a number between Min_Data = 0x00 and Max_Data = 0x0F.
90
91 This feature can be modified afterwards using unitary function
92 @ref LL_FMPI2C_SetDigitalFilter(). */
93
94 uint32_t OwnAddress1; /*!< Specifies the device own address 1.
95 This parameter must be a value between Min_Data = 0x00 and Max_Data = 0x3FF.
96
97 This feature can be modified afterwards using unitary function
98 @ref LL_FMPI2C_SetOwnAddress1(). */
99
100 uint32_t TypeAcknowledge; /*!< Specifies the ACKnowledge or Non ACKnowledge condition after the address receive
101 match code or next received byte.
102 This parameter can be a value of @ref FMPI2C_LL_EC_I2C_ACKNOWLEDGE.
103
104 This feature can be modified afterwards using unitary function
105 @ref LL_FMPI2C_AcknowledgeNextData(). */
106
107 uint32_t OwnAddrSize; /*!< Specifies the device own address 1 size (7-bit or 10-bit).
108 This parameter can be a value of @ref FMPI2C_LL_EC_OWNADDRESS1.
109
110 This feature can be modified afterwards using unitary function
111 @ref LL_FMPI2C_SetOwnAddress1(). */
112 } LL_FMPI2C_InitTypeDef;
113 /**
114 * @}
115 */
116 #endif /*USE_FULL_LL_DRIVER*/
117
118 /* Exported constants --------------------------------------------------------*/
119 /** @defgroup FMPI2C_LL_Exported_Constants FMPI2C Exported Constants
120 * @{
121 */
122
123 /** @defgroup FMPI2C_LL_EC_CLEAR_FLAG Clear Flags Defines
124 * @brief Flags defines which can be used with LL_FMPI2C_WriteReg function
125 * @{
126 */
127 #define LL_FMPI2C_ICR_ADDRCF FMPI2C_ICR_ADDRCF /*!< Address Matched flag */
128 #define LL_FMPI2C_ICR_NACKCF FMPI2C_ICR_NACKCF /*!< Not Acknowledge flag */
129 #define LL_FMPI2C_ICR_STOPCF FMPI2C_ICR_STOPCF /*!< Stop detection flag */
130 #define LL_FMPI2C_ICR_BERRCF FMPI2C_ICR_BERRCF /*!< Bus error flag */
131 #define LL_FMPI2C_ICR_ARLOCF FMPI2C_ICR_ARLOCF /*!< Arbitration Lost flag */
132 #define LL_FMPI2C_ICR_OVRCF FMPI2C_ICR_OVRCF /*!< Overrun/Underrun flag */
133 #define LL_FMPI2C_ICR_PECCF FMPI2C_ICR_PECCF /*!< PEC error flag */
134 #define LL_FMPI2C_ICR_TIMOUTCF FMPI2C_ICR_TIMOUTCF /*!< Timeout detection flag */
135 #define LL_FMPI2C_ICR_ALERTCF FMPI2C_ICR_ALERTCF /*!< Alert flag */
136 /**
137 * @}
138 */
139
140 /** @defgroup FMPI2C_LL_EC_GET_FLAG Get Flags Defines
141 * @brief Flags defines which can be used with LL_FMPI2C_ReadReg function
142 * @{
143 */
144 #define LL_FMPI2C_ISR_TXE FMPI2C_ISR_TXE /*!< Transmit data register empty */
145 #define LL_FMPI2C_ISR_TXIS FMPI2C_ISR_TXIS /*!< Transmit interrupt status */
146 #define LL_FMPI2C_ISR_RXNE FMPI2C_ISR_RXNE /*!< Receive data register not empty */
147 #define LL_FMPI2C_ISR_ADDR FMPI2C_ISR_ADDR /*!< Address matched (slave mode) */
148 #define LL_FMPI2C_ISR_NACKF FMPI2C_ISR_NACKF /*!< Not Acknowledge received flag */
149 #define LL_FMPI2C_ISR_STOPF FMPI2C_ISR_STOPF /*!< Stop detection flag */
150 #define LL_FMPI2C_ISR_TC FMPI2C_ISR_TC /*!< Transfer Complete (master mode) */
151 #define LL_FMPI2C_ISR_TCR FMPI2C_ISR_TCR /*!< Transfer Complete Reload */
152 #define LL_FMPI2C_ISR_BERR FMPI2C_ISR_BERR /*!< Bus error */
153 #define LL_FMPI2C_ISR_ARLO FMPI2C_ISR_ARLO /*!< Arbitration lost */
154 #define LL_FMPI2C_ISR_OVR FMPI2C_ISR_OVR /*!< Overrun/Underrun (slave mode) */
155 #define LL_FMPI2C_ISR_PECERR FMPI2C_ISR_PECERR /*!< PEC Error in reception (SMBus mode) */
156 #define LL_FMPI2C_ISR_TIMEOUT FMPI2C_ISR_TIMEOUT /*!< Timeout detection flag (SMBus mode) */
157 #define LL_FMPI2C_ISR_ALERT FMPI2C_ISR_ALERT /*!< SMBus alert (SMBus mode) */
158 #define LL_FMPI2C_ISR_BUSY FMPI2C_ISR_BUSY /*!< Bus busy */
159 /**
160 * @}
161 */
162
163 /** @defgroup FMPI2C_LL_EC_IT IT Defines
164 * @brief IT defines which can be used with LL_FMPI2C_ReadReg and LL_FMPI2C_WriteReg functions
165 * @{
166 */
167 #define LL_FMPI2C_CR1_TXIE FMPI2C_CR1_TXIE /*!< TX Interrupt enable */
168 #define LL_FMPI2C_CR1_RXIE FMPI2C_CR1_RXIE /*!< RX Interrupt enable */
169 #define LL_FMPI2C_CR1_ADDRIE FMPI2C_CR1_ADDRIE /*!< Address match Interrupt enable (slave only) */
170 #define LL_FMPI2C_CR1_NACKIE FMPI2C_CR1_NACKIE /*!< Not acknowledge received Interrupt enable */
171 #define LL_FMPI2C_CR1_STOPIE FMPI2C_CR1_STOPIE /*!< STOP detection Interrupt enable */
172 #define LL_FMPI2C_CR1_TCIE FMPI2C_CR1_TCIE /*!< Transfer Complete interrupt enable */
173 #define LL_FMPI2C_CR1_ERRIE FMPI2C_CR1_ERRIE /*!< Error interrupts enable */
174 /**
175 * @}
176 */
177
178 /** @defgroup FMPI2C_LL_EC_PERIPHERAL_MODE Peripheral Mode
179 * @{
180 */
181 #define LL_FMPI2C_MODE_I2C 0x00000000U /*!< FMPI2C Master or Slave mode */
182 #define LL_FMPI2C_MODE_SMBUS_HOST FMPI2C_CR1_SMBHEN /*!< SMBus Host address acknowledge */
183 #define LL_FMPI2C_MODE_SMBUS_DEVICE 0x00000000U /*!< SMBus Device default mode
184 (Default address not acknowledge) */
185 #define LL_FMPI2C_MODE_SMBUS_DEVICE_ARP FMPI2C_CR1_SMBDEN /*!< SMBus Device Default address acknowledge */
186 /**
187 * @}
188 */
189
190 /** @defgroup FMPI2C_LL_EC_ANALOGFILTER_SELECTION Analog Filter Selection
191 * @{
192 */
193 #define LL_FMPI2C_ANALOGFILTER_ENABLE 0x00000000U /*!< Analog filter is enabled. */
194 #define LL_FMPI2C_ANALOGFILTER_DISABLE FMPI2C_CR1_ANFOFF /*!< Analog filter is disabled. */
195 /**
196 * @}
197 */
198
199 /** @defgroup FMPI2C_LL_EC_ADDRESSING_MODE Master Addressing Mode
200 * @{
201 */
202 #define LL_FMPI2C_ADDRESSING_MODE_7BIT 0x00000000U /*!< Master operates in 7-bit addressing mode. */
203 #define LL_FMPI2C_ADDRESSING_MODE_10BIT FMPI2C_CR2_ADD10 /*!< Master operates in 10-bit addressing mode.*/
204 /**
205 * @}
206 */
207
208 /** @defgroup FMPI2C_LL_EC_OWNADDRESS1 Own Address 1 Length
209 * @{
210 */
211 #define LL_FMPI2C_OWNADDRESS1_7BIT 0x00000000U /*!< Own address 1 is a 7-bit address. */
212 #define LL_FMPI2C_OWNADDRESS1_10BIT FMPI2C_OAR1_OA1MODE /*!< Own address 1 is a 10-bit address.*/
213 /**
214 * @}
215 */
216
217 /** @defgroup FMPI2C_LL_EC_OWNADDRESS2 Own Address 2 Masks
218 * @{
219 */
220 #define LL_FMPI2C_OWNADDRESS2_NOMASK FMPI2C_OAR2_OA2NOMASK /*!< Own Address2 No mask. */
221 #define LL_FMPI2C_OWNADDRESS2_MASK01 FMPI2C_OAR2_OA2MASK01 /*!< Only Address2 bits[7:2] are compared. */
222 #define LL_FMPI2C_OWNADDRESS2_MASK02 FMPI2C_OAR2_OA2MASK02 /*!< Only Address2 bits[7:3] are compared. */
223 #define LL_FMPI2C_OWNADDRESS2_MASK03 FMPI2C_OAR2_OA2MASK03 /*!< Only Address2 bits[7:4] are compared. */
224 #define LL_FMPI2C_OWNADDRESS2_MASK04 FMPI2C_OAR2_OA2MASK04 /*!< Only Address2 bits[7:5] are compared. */
225 #define LL_FMPI2C_OWNADDRESS2_MASK05 FMPI2C_OAR2_OA2MASK05 /*!< Only Address2 bits[7:6] are compared. */
226 #define LL_FMPI2C_OWNADDRESS2_MASK06 FMPI2C_OAR2_OA2MASK06 /*!< Only Address2 bits[7] are compared. */
227 #define LL_FMPI2C_OWNADDRESS2_MASK07 FMPI2C_OAR2_OA2MASK07 /*!< No comparison is done.
228 All Address2 are acknowledged. */
229 /**
230 * @}
231 */
232
233 /** @defgroup FMPI2C_LL_EC_I2C_ACKNOWLEDGE Acknowledge Generation
234 * @{
235 */
236 #define LL_FMPI2C_ACK 0x00000000U /*!< ACK is sent after current received byte. */
237 #define LL_FMPI2C_NACK FMPI2C_CR2_NACK /*!< NACK is sent after current received byte.*/
238 /**
239 * @}
240 */
241
242 /** @defgroup FMPI2C_LL_EC_ADDRSLAVE Slave Address Length
243 * @{
244 */
245 #define LL_FMPI2C_ADDRSLAVE_7BIT 0x00000000U /*!< Slave Address in 7-bit. */
246 #define LL_FMPI2C_ADDRSLAVE_10BIT FMPI2C_CR2_ADD10 /*!< Slave Address in 10-bit.*/
247 /**
248 * @}
249 */
250
251 /** @defgroup FMPI2C_LL_EC_REQUEST Transfer Request Direction
252 * @{
253 */
254 #define LL_FMPI2C_REQUEST_WRITE 0x00000000U /*!< Master request a write transfer. */
255 #define LL_FMPI2C_REQUEST_READ FMPI2C_CR2_RD_WRN /*!< Master request a read transfer. */
256 /**
257 * @}
258 */
259
260 /** @defgroup FMPI2C_LL_EC_MODE Transfer End Mode
261 * @{
262 */
263 #define LL_FMPI2C_MODE_RELOAD FMPI2C_CR2_RELOAD /*!< Enable FMPI2C Reload mode. */
264 #define LL_FMPI2C_MODE_AUTOEND FMPI2C_CR2_AUTOEND /*!< Enable FMPI2C Automatic end mode
265 with no HW PEC comparison. */
266 #define LL_FMPI2C_MODE_SOFTEND 0x00000000U /*!< Enable FMPI2C Software end mode
267 with no HW PEC comparison. */
268 #define LL_FMPI2C_MODE_SMBUS_RELOAD LL_FMPI2C_MODE_RELOAD /*!< Enable FMPSMBUS Automatic end mode
269 with HW PEC comparison. */
270 #define LL_FMPI2C_MODE_SMBUS_AUTOEND_NO_PEC LL_FMPI2C_MODE_AUTOEND /*!< Enable FMPSMBUS Automatic end mode
271 with HW PEC comparison. */
272 #define LL_FMPI2C_MODE_SMBUS_SOFTEND_NO_PEC LL_FMPI2C_MODE_SOFTEND /*!< Enable FMPSMBUS Software end mode
273 with HW PEC comparison. */
274 #define LL_FMPI2C_MODE_SMBUS_AUTOEND_WITH_PEC (uint32_t)(LL_FMPI2C_MODE_AUTOEND | FMPI2C_CR2_PECBYTE)
275 /*!< Enable FMPSMBUS Automatic end mode with HW PEC comparison. */
276 #define LL_FMPI2C_MODE_SMBUS_SOFTEND_WITH_PEC (uint32_t)(LL_FMPI2C_MODE_SOFTEND | FMPI2C_CR2_PECBYTE)
277 /*!< Enable FMPSMBUS Software end mode with HW PEC comparison. */
278 /**
279 * @}
280 */
281
282 /** @defgroup FMPI2C_LL_EC_GENERATE Start And Stop Generation
283 * @{
284 */
285 #define LL_FMPI2C_GENERATE_NOSTARTSTOP 0x00000000U
286 /*!< Don't Generate Stop and Start condition. */
287 #define LL_FMPI2C_GENERATE_STOP (uint32_t)(0x80000000U | FMPI2C_CR2_STOP)
288 /*!< Generate Stop condition (Size should be set to 0). */
289 #define LL_FMPI2C_GENERATE_START_READ (uint32_t)(0x80000000U | FMPI2C_CR2_START | FMPI2C_CR2_RD_WRN)
290 /*!< Generate Start for read request. */
291 #define LL_FMPI2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | FMPI2C_CR2_START)
292 /*!< Generate Start for write request. */
293 #define LL_FMPI2C_GENERATE_RESTART_7BIT_READ (uint32_t)(0x80000000U | FMPI2C_CR2_START | FMPI2C_CR2_RD_WRN)
294 /*!< Generate Restart for read request, slave 7Bit address. */
295 #define LL_FMPI2C_GENERATE_RESTART_7BIT_WRITE (uint32_t)(0x80000000U | FMPI2C_CR2_START)
296 /*!< Generate Restart for write request, slave 7Bit address. */
297 #define LL_FMPI2C_GENERATE_RESTART_10BIT_READ (uint32_t)(0x80000000U | FMPI2C_CR2_START | \
298 FMPI2C_CR2_RD_WRN | FMPI2C_CR2_HEAD10R)
299 /*!< Generate Restart for read request, slave 10Bit address. */
300 #define LL_FMPI2C_GENERATE_RESTART_10BIT_WRITE (uint32_t)(0x80000000U | FMPI2C_CR2_START)
301 /*!< Generate Restart for write request, slave 10Bit address.*/
302 /**
303 * @}
304 */
305
306 /** @defgroup FMPI2C_LL_EC_DIRECTION Read Write Direction
307 * @{
308 */
309 #define LL_FMPI2C_DIRECTION_WRITE 0x00000000U /*!< Write transfer request by master,
310 slave enters receiver mode. */
311 #define LL_FMPI2C_DIRECTION_READ FMPI2C_ISR_DIR /*!< Read transfer request by master,
312 slave enters transmitter mode.*/
313 /**
314 * @}
315 */
316
317 /** @defgroup FMPI2C_LL_EC_DMA_REG_DATA DMA Register Data
318 * @{
319 */
320 #define LL_FMPI2C_DMA_REG_DATA_TRANSMIT 0x00000000U /*!< Get address of data register used for
321 transmission */
322 #define LL_FMPI2C_DMA_REG_DATA_RECEIVE 0x00000001U /*!< Get address of data register used for
323 reception */
324 /**
325 * @}
326 */
327
328 /** @defgroup FMPI2C_LL_EC_SMBUS_TIMEOUTA_MODE SMBus TimeoutA Mode SCL SDA Timeout
329 * @{
330 */
331 #define LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SCL_LOW 0x00000000U /*!< TimeoutA is used to detect
332 SCL low level timeout. */
333 #define LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SDA_SCL_HIGH FMPI2C_TIMEOUTR_TIDLE /*!< TimeoutA is used to detect
334 both SCL and SDA high level timeout.*/
335 /**
336 * @}
337 */
338
339 /** @defgroup FMPI2C_LL_EC_SMBUS_TIMEOUT_SELECTION SMBus Timeout Selection
340 * @{
341 */
342 #define LL_FMPI2C_FMPSMBUS_TIMEOUTA FMPI2C_TIMEOUTR_TIMOUTEN /*!< TimeoutA enable bit */
343 #define LL_FMPI2C_FMPSMBUS_TIMEOUTB FMPI2C_TIMEOUTR_TEXTEN /*!< TimeoutB (extended clock)
344 enable bit */
345 #define LL_FMPI2C_FMPSMBUS_ALL_TIMEOUT (uint32_t)(FMPI2C_TIMEOUTR_TIMOUTEN | \
346 FMPI2C_TIMEOUTR_TEXTEN) /*!< TimeoutA and TimeoutB
347 (extended clock) enable bits */
348 /**
349 * @}
350 */
351
352 /**
353 * @}
354 */
355
356 /* Exported macro ------------------------------------------------------------*/
357 /** @defgroup FMPI2C_LL_Exported_Macros FMPI2C Exported Macros
358 * @{
359 */
360
361 /** @defgroup FMPI2C_LL_EM_WRITE_READ Common Write and read registers Macros
362 * @{
363 */
364
365 /**
366 * @brief Write a value in FMPI2C register
367 * @param __INSTANCE__ FMPI2C Instance
368 * @param __REG__ Register to be written
369 * @param __VALUE__ Value to be written in the register
370 * @retval None
371 */
372 #define LL_FMPI2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
373
374 /**
375 * @brief Read a value in FMPI2C register
376 * @param __INSTANCE__ FMPI2C Instance
377 * @param __REG__ Register to be read
378 * @retval Register value
379 */
380 #define LL_FMPI2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
381 /**
382 * @}
383 */
384
385 /** @defgroup FMPI2C_LL_EM_CONVERT_TIMINGS Convert SDA SCL timings
386 * @{
387 */
388 /**
389 * @brief Configure the SDA setup, hold time and the SCL high, low period.
390 * @param __PRESCALER__ This parameter must be a value between Min_Data=0 and Max_Data=0xF.
391 * @param __SETUP_TIME__ This parameter must be a value between Min_Data=0 and Max_Data=0xF.
392 (tscldel = (SCLDEL+1)xtpresc)
393 * @param __HOLD_TIME__ This parameter must be a value between Min_Data=0 and Max_Data=0xF.
394 (tsdadel = SDADELxtpresc)
395 * @param __SCLH_PERIOD__ This parameter must be a value between Min_Data=0 and Max_Data=0xFF.
396 (tsclh = (SCLH+1)xtpresc)
397 * @param __SCLL_PERIOD__ This parameter must be a value between Min_Data=0 and Max_Data=0xFF.
398 (tscll = (SCLL+1)xtpresc)
399 * @retval Value between Min_Data=0 and Max_Data=0xFFFFFFFF
400 */
401 #define __LL_FMPI2C_CONVERT_TIMINGS(__PRESCALER__, __SETUP_TIME__, __HOLD_TIME__, __SCLH_PERIOD__, __SCLL_PERIOD__) \
402 ((((uint32_t)(__PRESCALER__) << FMPI2C_TIMINGR_PRESC_Pos) & FMPI2C_TIMINGR_PRESC) | \
403 (((uint32_t)(__SETUP_TIME__) << FMPI2C_TIMINGR_SCLDEL_Pos) & FMPI2C_TIMINGR_SCLDEL) | \
404 (((uint32_t)(__HOLD_TIME__) << FMPI2C_TIMINGR_SDADEL_Pos) & FMPI2C_TIMINGR_SDADEL) | \
405 (((uint32_t)(__SCLH_PERIOD__) << FMPI2C_TIMINGR_SCLH_Pos) & FMPI2C_TIMINGR_SCLH) | \
406 (((uint32_t)(__SCLL_PERIOD__) << FMPI2C_TIMINGR_SCLL_Pos) & FMPI2C_TIMINGR_SCLL))
407 /**
408 * @}
409 */
410
411 /**
412 * @}
413 */
414
415 /* Exported functions --------------------------------------------------------*/
416 /** @defgroup FMPI2C_LL_Exported_Functions FMPI2C Exported Functions
417 * @{
418 */
419
420 /** @defgroup FMPI2C_LL_EF_Configuration Configuration
421 * @{
422 */
423
424 /**
425 * @brief Enable FMPI2C peripheral (PE = 1).
426 * @rmtoll CR1 PE LL_FMPI2C_Enable
427 * @param FMPI2Cx FMPI2C Instance.
428 * @retval None
429 */
LL_FMPI2C_Enable(FMPI2C_TypeDef * FMPI2Cx)430 __STATIC_INLINE void LL_FMPI2C_Enable(FMPI2C_TypeDef *FMPI2Cx)
431 {
432 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PE);
433 }
434
435 /**
436 * @brief Disable FMPI2C peripheral (PE = 0).
437 * @note When PE = 0, the FMPI2C SCL and SDA lines are released.
438 * Internal state machines and status bits are put back to their reset value.
439 * When cleared, PE must be kept low for at least 3 APB clock cycles.
440 * @rmtoll CR1 PE LL_FMPI2C_Disable
441 * @param FMPI2Cx FMPI2C Instance.
442 * @retval None
443 */
LL_FMPI2C_Disable(FMPI2C_TypeDef * FMPI2Cx)444 __STATIC_INLINE void LL_FMPI2C_Disable(FMPI2C_TypeDef *FMPI2Cx)
445 {
446 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PE);
447 }
448
449 /**
450 * @brief Check if the FMPI2C peripheral is enabled or disabled.
451 * @rmtoll CR1 PE LL_FMPI2C_IsEnabled
452 * @param FMPI2Cx FMPI2C Instance.
453 * @retval State of bit (1 or 0).
454 */
LL_FMPI2C_IsEnabled(FMPI2C_TypeDef * FMPI2Cx)455 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabled(FMPI2C_TypeDef *FMPI2Cx)
456 {
457 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PE) == (FMPI2C_CR1_PE)) ? 1UL : 0UL);
458 }
459
460 /**
461 * @brief Configure Noise Filters (Analog and Digital).
462 * @note If the analog filter is also enabled, the digital filter is added to analog filter.
463 * The filters can only be programmed when the FMPI2C is disabled (PE = 0).
464 * @rmtoll CR1 ANFOFF LL_FMPI2C_ConfigFilters\n
465 * CR1 DNF LL_FMPI2C_ConfigFilters
466 * @param FMPI2Cx FMPI2C Instance.
467 * @param AnalogFilter This parameter can be one of the following values:
468 * @arg @ref LL_FMPI2C_ANALOGFILTER_ENABLE
469 * @arg @ref LL_FMPI2C_ANALOGFILTER_DISABLE
470 * @param DigitalFilter This parameter must be a value between Min_Data=0x00 (Digital filter disabled)
471 and Max_Data=0x0F (Digital filter enabled and filtering capability up to 15*tfmpi2cclk).
472 * This parameter is used to configure the digital noise filter on SDA and SCL input.
473 * The digital filter will filter spikes with a length of up to DNF[3:0]*tfmpi2cclk.
474 * @retval None
475 */
LL_FMPI2C_ConfigFilters(FMPI2C_TypeDef * FMPI2Cx,uint32_t AnalogFilter,uint32_t DigitalFilter)476 __STATIC_INLINE void LL_FMPI2C_ConfigFilters(FMPI2C_TypeDef *FMPI2Cx, uint32_t AnalogFilter, uint32_t DigitalFilter)
477 {
478 MODIFY_REG(FMPI2Cx->CR1, FMPI2C_CR1_ANFOFF | FMPI2C_CR1_DNF, AnalogFilter | (DigitalFilter << FMPI2C_CR1_DNF_Pos));
479 }
480
481 /**
482 * @brief Configure Digital Noise Filter.
483 * @note If the analog filter is also enabled, the digital filter is added to analog filter.
484 * This filter can only be programmed when the FMPI2C is disabled (PE = 0).
485 * @rmtoll CR1 DNF LL_FMPI2C_SetDigitalFilter
486 * @param FMPI2Cx FMPI2C Instance.
487 * @param DigitalFilter This parameter must be a value between Min_Data=0x00 (Digital filter disabled)
488 and Max_Data=0x0F (Digital filter enabled and filtering capability up to 15*tfmpi2cclk).
489 * This parameter is used to configure the digital noise filter on SDA and SCL input.
490 * The digital filter will filter spikes with a length of up to DNF[3:0]*tfmpi2cclk.
491 * @retval None
492 */
LL_FMPI2C_SetDigitalFilter(FMPI2C_TypeDef * FMPI2Cx,uint32_t DigitalFilter)493 __STATIC_INLINE void LL_FMPI2C_SetDigitalFilter(FMPI2C_TypeDef *FMPI2Cx, uint32_t DigitalFilter)
494 {
495 MODIFY_REG(FMPI2Cx->CR1, FMPI2C_CR1_DNF, DigitalFilter << FMPI2C_CR1_DNF_Pos);
496 }
497
498 /**
499 * @brief Get the current Digital Noise Filter configuration.
500 * @rmtoll CR1 DNF LL_FMPI2C_GetDigitalFilter
501 * @param FMPI2Cx FMPI2C Instance.
502 * @retval Value between Min_Data=0x0 and Max_Data=0xF
503 */
LL_FMPI2C_GetDigitalFilter(FMPI2C_TypeDef * FMPI2Cx)504 __STATIC_INLINE uint32_t LL_FMPI2C_GetDigitalFilter(FMPI2C_TypeDef *FMPI2Cx)
505 {
506 return (uint32_t)(READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_DNF) >> FMPI2C_CR1_DNF_Pos);
507 }
508
509 /**
510 * @brief Enable Analog Noise Filter.
511 * @note This filter can only be programmed when the FMPI2C is disabled (PE = 0).
512 * @rmtoll CR1 ANFOFF LL_FMPI2C_EnableAnalogFilter
513 * @param FMPI2Cx FMPI2C Instance.
514 * @retval None
515 */
LL_FMPI2C_EnableAnalogFilter(FMPI2C_TypeDef * FMPI2Cx)516 __STATIC_INLINE void LL_FMPI2C_EnableAnalogFilter(FMPI2C_TypeDef *FMPI2Cx)
517 {
518 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ANFOFF);
519 }
520
521 /**
522 * @brief Disable Analog Noise Filter.
523 * @note This filter can only be programmed when the FMPI2C is disabled (PE = 0).
524 * @rmtoll CR1 ANFOFF LL_FMPI2C_DisableAnalogFilter
525 * @param FMPI2Cx FMPI2C Instance.
526 * @retval None
527 */
LL_FMPI2C_DisableAnalogFilter(FMPI2C_TypeDef * FMPI2Cx)528 __STATIC_INLINE void LL_FMPI2C_DisableAnalogFilter(FMPI2C_TypeDef *FMPI2Cx)
529 {
530 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ANFOFF);
531 }
532
533 /**
534 * @brief Check if Analog Noise Filter is enabled or disabled.
535 * @rmtoll CR1 ANFOFF LL_FMPI2C_IsEnabledAnalogFilter
536 * @param FMPI2Cx FMPI2C Instance.
537 * @retval State of bit (1 or 0).
538 */
LL_FMPI2C_IsEnabledAnalogFilter(FMPI2C_TypeDef * FMPI2Cx)539 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledAnalogFilter(FMPI2C_TypeDef *FMPI2Cx)
540 {
541 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ANFOFF) != (FMPI2C_CR1_ANFOFF)) ? 1UL : 0UL);
542 }
543
544 /**
545 * @brief Enable DMA transmission requests.
546 * @rmtoll CR1 TXDMAEN LL_FMPI2C_EnableDMAReq_TX
547 * @param FMPI2Cx FMPI2C Instance.
548 * @retval None
549 */
LL_FMPI2C_EnableDMAReq_TX(FMPI2C_TypeDef * FMPI2Cx)550 __STATIC_INLINE void LL_FMPI2C_EnableDMAReq_TX(FMPI2C_TypeDef *FMPI2Cx)
551 {
552 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXDMAEN);
553 }
554
555 /**
556 * @brief Disable DMA transmission requests.
557 * @rmtoll CR1 TXDMAEN LL_FMPI2C_DisableDMAReq_TX
558 * @param FMPI2Cx FMPI2C Instance.
559 * @retval None
560 */
LL_FMPI2C_DisableDMAReq_TX(FMPI2C_TypeDef * FMPI2Cx)561 __STATIC_INLINE void LL_FMPI2C_DisableDMAReq_TX(FMPI2C_TypeDef *FMPI2Cx)
562 {
563 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXDMAEN);
564 }
565
566 /**
567 * @brief Check if DMA transmission requests are enabled or disabled.
568 * @rmtoll CR1 TXDMAEN LL_FMPI2C_IsEnabledDMAReq_TX
569 * @param FMPI2Cx FMPI2C Instance.
570 * @retval State of bit (1 or 0).
571 */
LL_FMPI2C_IsEnabledDMAReq_TX(FMPI2C_TypeDef * FMPI2Cx)572 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledDMAReq_TX(FMPI2C_TypeDef *FMPI2Cx)
573 {
574 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXDMAEN) == (FMPI2C_CR1_TXDMAEN)) ? 1UL : 0UL);
575 }
576
577 /**
578 * @brief Enable DMA reception requests.
579 * @rmtoll CR1 RXDMAEN LL_FMPI2C_EnableDMAReq_RX
580 * @param FMPI2Cx FMPI2C Instance.
581 * @retval None
582 */
LL_FMPI2C_EnableDMAReq_RX(FMPI2C_TypeDef * FMPI2Cx)583 __STATIC_INLINE void LL_FMPI2C_EnableDMAReq_RX(FMPI2C_TypeDef *FMPI2Cx)
584 {
585 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXDMAEN);
586 }
587
588 /**
589 * @brief Disable DMA reception requests.
590 * @rmtoll CR1 RXDMAEN LL_FMPI2C_DisableDMAReq_RX
591 * @param FMPI2Cx FMPI2C Instance.
592 * @retval None
593 */
LL_FMPI2C_DisableDMAReq_RX(FMPI2C_TypeDef * FMPI2Cx)594 __STATIC_INLINE void LL_FMPI2C_DisableDMAReq_RX(FMPI2C_TypeDef *FMPI2Cx)
595 {
596 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXDMAEN);
597 }
598
599 /**
600 * @brief Check if DMA reception requests are enabled or disabled.
601 * @rmtoll CR1 RXDMAEN LL_FMPI2C_IsEnabledDMAReq_RX
602 * @param FMPI2Cx FMPI2C Instance.
603 * @retval State of bit (1 or 0).
604 */
LL_FMPI2C_IsEnabledDMAReq_RX(FMPI2C_TypeDef * FMPI2Cx)605 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledDMAReq_RX(FMPI2C_TypeDef *FMPI2Cx)
606 {
607 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXDMAEN) == (FMPI2C_CR1_RXDMAEN)) ? 1UL : 0UL);
608 }
609
610 /**
611 * @brief Get the data register address used for DMA transfer
612 * @rmtoll TXDR TXDATA LL_FMPI2C_DMA_GetRegAddr\n
613 * RXDR RXDATA LL_FMPI2C_DMA_GetRegAddr
614 * @param FMPI2Cx FMPI2C Instance
615 * @param Direction This parameter can be one of the following values:
616 * @arg @ref LL_FMPI2C_DMA_REG_DATA_TRANSMIT
617 * @arg @ref LL_FMPI2C_DMA_REG_DATA_RECEIVE
618 * @retval Address of data register
619 */
LL_FMPI2C_DMA_GetRegAddr(FMPI2C_TypeDef * FMPI2Cx,uint32_t Direction)620 __STATIC_INLINE uint32_t LL_FMPI2C_DMA_GetRegAddr(FMPI2C_TypeDef *FMPI2Cx, uint32_t Direction)
621 {
622 uint32_t data_reg_addr;
623
624 if (Direction == LL_FMPI2C_DMA_REG_DATA_TRANSMIT)
625 {
626 /* return address of TXDR register */
627 data_reg_addr = (uint32_t) &(FMPI2Cx->TXDR);
628 }
629 else
630 {
631 /* return address of RXDR register */
632 data_reg_addr = (uint32_t) &(FMPI2Cx->RXDR);
633 }
634
635 return data_reg_addr;
636 }
637
638 /**
639 * @brief Enable Clock stretching.
640 * @note This bit can only be programmed when the FMPI2C is disabled (PE = 0).
641 * @rmtoll CR1 NOSTRETCH LL_FMPI2C_EnableClockStretching
642 * @param FMPI2Cx FMPI2C Instance.
643 * @retval None
644 */
LL_FMPI2C_EnableClockStretching(FMPI2C_TypeDef * FMPI2Cx)645 __STATIC_INLINE void LL_FMPI2C_EnableClockStretching(FMPI2C_TypeDef *FMPI2Cx)
646 {
647 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NOSTRETCH);
648 }
649
650 /**
651 * @brief Disable Clock stretching.
652 * @note This bit can only be programmed when the FMPI2C is disabled (PE = 0).
653 * @rmtoll CR1 NOSTRETCH LL_FMPI2C_DisableClockStretching
654 * @param FMPI2Cx FMPI2C Instance.
655 * @retval None
656 */
LL_FMPI2C_DisableClockStretching(FMPI2C_TypeDef * FMPI2Cx)657 __STATIC_INLINE void LL_FMPI2C_DisableClockStretching(FMPI2C_TypeDef *FMPI2Cx)
658 {
659 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NOSTRETCH);
660 }
661
662 /**
663 * @brief Check if Clock stretching is enabled or disabled.
664 * @rmtoll CR1 NOSTRETCH LL_FMPI2C_IsEnabledClockStretching
665 * @param FMPI2Cx FMPI2C Instance.
666 * @retval State of bit (1 or 0).
667 */
LL_FMPI2C_IsEnabledClockStretching(FMPI2C_TypeDef * FMPI2Cx)668 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledClockStretching(FMPI2C_TypeDef *FMPI2Cx)
669 {
670 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NOSTRETCH) != (FMPI2C_CR1_NOSTRETCH)) ? 1UL : 0UL);
671 }
672
673 /**
674 * @brief Enable hardware byte control in slave mode.
675 * @rmtoll CR1 SBC LL_FMPI2C_EnableSlaveByteControl
676 * @param FMPI2Cx FMPI2C Instance.
677 * @retval None
678 */
LL_FMPI2C_EnableSlaveByteControl(FMPI2C_TypeDef * FMPI2Cx)679 __STATIC_INLINE void LL_FMPI2C_EnableSlaveByteControl(FMPI2C_TypeDef *FMPI2Cx)
680 {
681 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_SBC);
682 }
683
684 /**
685 * @brief Disable hardware byte control in slave mode.
686 * @rmtoll CR1 SBC LL_FMPI2C_DisableSlaveByteControl
687 * @param FMPI2Cx FMPI2C Instance.
688 * @retval None
689 */
LL_FMPI2C_DisableSlaveByteControl(FMPI2C_TypeDef * FMPI2Cx)690 __STATIC_INLINE void LL_FMPI2C_DisableSlaveByteControl(FMPI2C_TypeDef *FMPI2Cx)
691 {
692 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_SBC);
693 }
694
695 /**
696 * @brief Check if hardware byte control in slave mode is enabled or disabled.
697 * @rmtoll CR1 SBC LL_FMPI2C_IsEnabledSlaveByteControl
698 * @param FMPI2Cx FMPI2C Instance.
699 * @retval State of bit (1 or 0).
700 */
LL_FMPI2C_IsEnabledSlaveByteControl(FMPI2C_TypeDef * FMPI2Cx)701 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledSlaveByteControl(FMPI2C_TypeDef *FMPI2Cx)
702 {
703 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_SBC) == (FMPI2C_CR1_SBC)) ? 1UL : 0UL);
704 }
705
706 /**
707 * @brief Enable General Call.
708 * @note When enabled the Address 0x00 is ACKed.
709 * @rmtoll CR1 GCEN LL_FMPI2C_EnableGeneralCall
710 * @param FMPI2Cx FMPI2C Instance.
711 * @retval None
712 */
LL_FMPI2C_EnableGeneralCall(FMPI2C_TypeDef * FMPI2Cx)713 __STATIC_INLINE void LL_FMPI2C_EnableGeneralCall(FMPI2C_TypeDef *FMPI2Cx)
714 {
715 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_GCEN);
716 }
717
718 /**
719 * @brief Disable General Call.
720 * @note When disabled the Address 0x00 is NACKed.
721 * @rmtoll CR1 GCEN LL_FMPI2C_DisableGeneralCall
722 * @param FMPI2Cx FMPI2C Instance.
723 * @retval None
724 */
LL_FMPI2C_DisableGeneralCall(FMPI2C_TypeDef * FMPI2Cx)725 __STATIC_INLINE void LL_FMPI2C_DisableGeneralCall(FMPI2C_TypeDef *FMPI2Cx)
726 {
727 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_GCEN);
728 }
729
730 /**
731 * @brief Check if General Call is enabled or disabled.
732 * @rmtoll CR1 GCEN LL_FMPI2C_IsEnabledGeneralCall
733 * @param FMPI2Cx FMPI2C Instance.
734 * @retval State of bit (1 or 0).
735 */
LL_FMPI2C_IsEnabledGeneralCall(FMPI2C_TypeDef * FMPI2Cx)736 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledGeneralCall(FMPI2C_TypeDef *FMPI2Cx)
737 {
738 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_GCEN) == (FMPI2C_CR1_GCEN)) ? 1UL : 0UL);
739 }
740
741 /**
742 * @brief Configure the Master to operate in 7-bit or 10-bit addressing mode.
743 * @note Changing this bit is not allowed, when the START bit is set.
744 * @rmtoll CR2 ADD10 LL_FMPI2C_SetMasterAddressingMode
745 * @param FMPI2Cx FMPI2C Instance.
746 * @param AddressingMode This parameter can be one of the following values:
747 * @arg @ref LL_FMPI2C_ADDRESSING_MODE_7BIT
748 * @arg @ref LL_FMPI2C_ADDRESSING_MODE_10BIT
749 * @retval None
750 */
LL_FMPI2C_SetMasterAddressingMode(FMPI2C_TypeDef * FMPI2Cx,uint32_t AddressingMode)751 __STATIC_INLINE void LL_FMPI2C_SetMasterAddressingMode(FMPI2C_TypeDef *FMPI2Cx, uint32_t AddressingMode)
752 {
753 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_ADD10, AddressingMode);
754 }
755
756 /**
757 * @brief Get the Master addressing mode.
758 * @rmtoll CR2 ADD10 LL_FMPI2C_GetMasterAddressingMode
759 * @param FMPI2Cx FMPI2C Instance.
760 * @retval Returned value can be one of the following values:
761 * @arg @ref LL_FMPI2C_ADDRESSING_MODE_7BIT
762 * @arg @ref LL_FMPI2C_ADDRESSING_MODE_10BIT
763 */
LL_FMPI2C_GetMasterAddressingMode(FMPI2C_TypeDef * FMPI2Cx)764 __STATIC_INLINE uint32_t LL_FMPI2C_GetMasterAddressingMode(FMPI2C_TypeDef *FMPI2Cx)
765 {
766 return (uint32_t)(READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_ADD10));
767 }
768
769 /**
770 * @brief Set the Own Address1.
771 * @rmtoll OAR1 OA1 LL_FMPI2C_SetOwnAddress1\n
772 * OAR1 OA1MODE LL_FMPI2C_SetOwnAddress1
773 * @param FMPI2Cx FMPI2C Instance.
774 * @param OwnAddress1 This parameter must be a value between Min_Data=0 and Max_Data=0x3FF.
775 * @param OwnAddrSize This parameter can be one of the following values:
776 * @arg @ref LL_FMPI2C_OWNADDRESS1_7BIT
777 * @arg @ref LL_FMPI2C_OWNADDRESS1_10BIT
778 * @retval None
779 */
LL_FMPI2C_SetOwnAddress1(FMPI2C_TypeDef * FMPI2Cx,uint32_t OwnAddress1,uint32_t OwnAddrSize)780 __STATIC_INLINE void LL_FMPI2C_SetOwnAddress1(FMPI2C_TypeDef *FMPI2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize)
781 {
782 MODIFY_REG(FMPI2Cx->OAR1, FMPI2C_OAR1_OA1 | FMPI2C_OAR1_OA1MODE, OwnAddress1 | OwnAddrSize);
783 }
784
785 /**
786 * @brief Enable acknowledge on Own Address1 match address.
787 * @rmtoll OAR1 OA1EN LL_FMPI2C_EnableOwnAddress1
788 * @param FMPI2Cx FMPI2C Instance.
789 * @retval None
790 */
LL_FMPI2C_EnableOwnAddress1(FMPI2C_TypeDef * FMPI2Cx)791 __STATIC_INLINE void LL_FMPI2C_EnableOwnAddress1(FMPI2C_TypeDef *FMPI2Cx)
792 {
793 SET_BIT(FMPI2Cx->OAR1, FMPI2C_OAR1_OA1EN);
794 }
795
796 /**
797 * @brief Disable acknowledge on Own Address1 match address.
798 * @rmtoll OAR1 OA1EN LL_FMPI2C_DisableOwnAddress1
799 * @param FMPI2Cx FMPI2C Instance.
800 * @retval None
801 */
LL_FMPI2C_DisableOwnAddress1(FMPI2C_TypeDef * FMPI2Cx)802 __STATIC_INLINE void LL_FMPI2C_DisableOwnAddress1(FMPI2C_TypeDef *FMPI2Cx)
803 {
804 CLEAR_BIT(FMPI2Cx->OAR1, FMPI2C_OAR1_OA1EN);
805 }
806
807 /**
808 * @brief Check if Own Address1 acknowledge is enabled or disabled.
809 * @rmtoll OAR1 OA1EN LL_FMPI2C_IsEnabledOwnAddress1
810 * @param FMPI2Cx FMPI2C Instance.
811 * @retval State of bit (1 or 0).
812 */
LL_FMPI2C_IsEnabledOwnAddress1(FMPI2C_TypeDef * FMPI2Cx)813 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledOwnAddress1(FMPI2C_TypeDef *FMPI2Cx)
814 {
815 return ((READ_BIT(FMPI2Cx->OAR1, FMPI2C_OAR1_OA1EN) == (FMPI2C_OAR1_OA1EN)) ? 1UL : 0UL);
816 }
817
818 /**
819 * @brief Set the 7bits Own Address2.
820 * @note This action has no effect if own address2 is enabled.
821 * @rmtoll OAR2 OA2 LL_FMPI2C_SetOwnAddress2\n
822 * OAR2 OA2MSK LL_FMPI2C_SetOwnAddress2
823 * @param FMPI2Cx FMPI2C Instance.
824 * @param OwnAddress2 Value between Min_Data=0 and Max_Data=0x7F.
825 * @param OwnAddrMask This parameter can be one of the following values:
826 * @arg @ref LL_FMPI2C_OWNADDRESS2_NOMASK
827 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK01
828 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK02
829 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK03
830 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK04
831 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK05
832 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK06
833 * @arg @ref LL_FMPI2C_OWNADDRESS2_MASK07
834 * @retval None
835 */
LL_FMPI2C_SetOwnAddress2(FMPI2C_TypeDef * FMPI2Cx,uint32_t OwnAddress2,uint32_t OwnAddrMask)836 __STATIC_INLINE void LL_FMPI2C_SetOwnAddress2(FMPI2C_TypeDef *FMPI2Cx, uint32_t OwnAddress2, uint32_t OwnAddrMask)
837 {
838 MODIFY_REG(FMPI2Cx->OAR2, FMPI2C_OAR2_OA2 | FMPI2C_OAR2_OA2MSK, OwnAddress2 | OwnAddrMask);
839 }
840
841 /**
842 * @brief Enable acknowledge on Own Address2 match address.
843 * @rmtoll OAR2 OA2EN LL_FMPI2C_EnableOwnAddress2
844 * @param FMPI2Cx FMPI2C Instance.
845 * @retval None
846 */
LL_FMPI2C_EnableOwnAddress2(FMPI2C_TypeDef * FMPI2Cx)847 __STATIC_INLINE void LL_FMPI2C_EnableOwnAddress2(FMPI2C_TypeDef *FMPI2Cx)
848 {
849 SET_BIT(FMPI2Cx->OAR2, FMPI2C_OAR2_OA2EN);
850 }
851
852 /**
853 * @brief Disable acknowledge on Own Address2 match address.
854 * @rmtoll OAR2 OA2EN LL_FMPI2C_DisableOwnAddress2
855 * @param FMPI2Cx FMPI2C Instance.
856 * @retval None
857 */
LL_FMPI2C_DisableOwnAddress2(FMPI2C_TypeDef * FMPI2Cx)858 __STATIC_INLINE void LL_FMPI2C_DisableOwnAddress2(FMPI2C_TypeDef *FMPI2Cx)
859 {
860 CLEAR_BIT(FMPI2Cx->OAR2, FMPI2C_OAR2_OA2EN);
861 }
862
863 /**
864 * @brief Check if Own Address1 acknowledge is enabled or disabled.
865 * @rmtoll OAR2 OA2EN LL_FMPI2C_IsEnabledOwnAddress2
866 * @param FMPI2Cx FMPI2C Instance.
867 * @retval State of bit (1 or 0).
868 */
LL_FMPI2C_IsEnabledOwnAddress2(FMPI2C_TypeDef * FMPI2Cx)869 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledOwnAddress2(FMPI2C_TypeDef *FMPI2Cx)
870 {
871 return ((READ_BIT(FMPI2Cx->OAR2, FMPI2C_OAR2_OA2EN) == (FMPI2C_OAR2_OA2EN)) ? 1UL : 0UL);
872 }
873
874 /**
875 * @brief Configure the SDA setup, hold time and the SCL high, low period.
876 * @note This bit can only be programmed when the FMPI2C is disabled (PE = 0).
877 * @rmtoll TIMINGR TIMINGR LL_FMPI2C_SetTiming
878 * @param FMPI2Cx FMPI2C Instance.
879 * @param Timing This parameter must be a value between Min_Data=0 and Max_Data=0xFFFFFFFF.
880 * @note This parameter is computed with the STM32CubeMX Tool.
881 * @retval None
882 */
LL_FMPI2C_SetTiming(FMPI2C_TypeDef * FMPI2Cx,uint32_t Timing)883 __STATIC_INLINE void LL_FMPI2C_SetTiming(FMPI2C_TypeDef *FMPI2Cx, uint32_t Timing)
884 {
885 WRITE_REG(FMPI2Cx->TIMINGR, Timing);
886 }
887
888 /**
889 * @brief Get the Timing Prescaler setting.
890 * @rmtoll TIMINGR PRESC LL_FMPI2C_GetTimingPrescaler
891 * @param FMPI2Cx FMPI2C Instance.
892 * @retval Value between Min_Data=0x0 and Max_Data=0xF
893 */
LL_FMPI2C_GetTimingPrescaler(FMPI2C_TypeDef * FMPI2Cx)894 __STATIC_INLINE uint32_t LL_FMPI2C_GetTimingPrescaler(FMPI2C_TypeDef *FMPI2Cx)
895 {
896 return (uint32_t)(READ_BIT(FMPI2Cx->TIMINGR, FMPI2C_TIMINGR_PRESC) >> FMPI2C_TIMINGR_PRESC_Pos);
897 }
898
899 /**
900 * @brief Get the SCL low period setting.
901 * @rmtoll TIMINGR SCLL LL_FMPI2C_GetClockLowPeriod
902 * @param FMPI2Cx FMPI2C Instance.
903 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
904 */
LL_FMPI2C_GetClockLowPeriod(FMPI2C_TypeDef * FMPI2Cx)905 __STATIC_INLINE uint32_t LL_FMPI2C_GetClockLowPeriod(FMPI2C_TypeDef *FMPI2Cx)
906 {
907 return (uint32_t)(READ_BIT(FMPI2Cx->TIMINGR, FMPI2C_TIMINGR_SCLL) >> FMPI2C_TIMINGR_SCLL_Pos);
908 }
909
910 /**
911 * @brief Get the SCL high period setting.
912 * @rmtoll TIMINGR SCLH LL_FMPI2C_GetClockHighPeriod
913 * @param FMPI2Cx FMPI2C Instance.
914 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
915 */
LL_FMPI2C_GetClockHighPeriod(FMPI2C_TypeDef * FMPI2Cx)916 __STATIC_INLINE uint32_t LL_FMPI2C_GetClockHighPeriod(FMPI2C_TypeDef *FMPI2Cx)
917 {
918 return (uint32_t)(READ_BIT(FMPI2Cx->TIMINGR, FMPI2C_TIMINGR_SCLH) >> FMPI2C_TIMINGR_SCLH_Pos);
919 }
920
921 /**
922 * @brief Get the SDA hold time.
923 * @rmtoll TIMINGR SDADEL LL_FMPI2C_GetDataHoldTime
924 * @param FMPI2Cx FMPI2C Instance.
925 * @retval Value between Min_Data=0x0 and Max_Data=0xF
926 */
LL_FMPI2C_GetDataHoldTime(FMPI2C_TypeDef * FMPI2Cx)927 __STATIC_INLINE uint32_t LL_FMPI2C_GetDataHoldTime(FMPI2C_TypeDef *FMPI2Cx)
928 {
929 return (uint32_t)(READ_BIT(FMPI2Cx->TIMINGR, FMPI2C_TIMINGR_SDADEL) >> FMPI2C_TIMINGR_SDADEL_Pos);
930 }
931
932 /**
933 * @brief Get the SDA setup time.
934 * @rmtoll TIMINGR SCLDEL LL_FMPI2C_GetDataSetupTime
935 * @param FMPI2Cx FMPI2C Instance.
936 * @retval Value between Min_Data=0x0 and Max_Data=0xF
937 */
LL_FMPI2C_GetDataSetupTime(FMPI2C_TypeDef * FMPI2Cx)938 __STATIC_INLINE uint32_t LL_FMPI2C_GetDataSetupTime(FMPI2C_TypeDef *FMPI2Cx)
939 {
940 return (uint32_t)(READ_BIT(FMPI2Cx->TIMINGR, FMPI2C_TIMINGR_SCLDEL) >> FMPI2C_TIMINGR_SCLDEL_Pos);
941 }
942
943 /**
944 * @brief Configure peripheral mode.
945 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
946 * SMBus feature is supported by the FMPI2Cx Instance.
947 * @rmtoll CR1 SMBHEN LL_FMPI2C_SetMode\n
948 * CR1 SMBDEN LL_FMPI2C_SetMode
949 * @param FMPI2Cx FMPI2C Instance.
950 * @param PeripheralMode This parameter can be one of the following values:
951 * @arg @ref LL_FMPI2C_MODE_I2C
952 * @arg @ref LL_FMPI2C_MODE_SMBUS_HOST
953 * @arg @ref LL_FMPI2C_MODE_SMBUS_DEVICE
954 * @arg @ref LL_FMPI2C_MODE_SMBUS_DEVICE_ARP
955 * @retval None
956 */
LL_FMPI2C_SetMode(FMPI2C_TypeDef * FMPI2Cx,uint32_t PeripheralMode)957 __STATIC_INLINE void LL_FMPI2C_SetMode(FMPI2C_TypeDef *FMPI2Cx, uint32_t PeripheralMode)
958 {
959 MODIFY_REG(FMPI2Cx->CR1, FMPI2C_CR1_SMBHEN | FMPI2C_CR1_SMBDEN, PeripheralMode);
960 }
961
962 /**
963 * @brief Get peripheral mode.
964 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
965 * SMBus feature is supported by the FMPI2Cx Instance.
966 * @rmtoll CR1 SMBHEN LL_FMPI2C_GetMode\n
967 * CR1 SMBDEN LL_FMPI2C_GetMode
968 * @param FMPI2Cx FMPI2C Instance.
969 * @retval Returned value can be one of the following values:
970 * @arg @ref LL_FMPI2C_MODE_I2C
971 * @arg @ref LL_FMPI2C_MODE_SMBUS_HOST
972 * @arg @ref LL_FMPI2C_MODE_SMBUS_DEVICE
973 * @arg @ref LL_FMPI2C_MODE_SMBUS_DEVICE_ARP
974 */
LL_FMPI2C_GetMode(FMPI2C_TypeDef * FMPI2Cx)975 __STATIC_INLINE uint32_t LL_FMPI2C_GetMode(FMPI2C_TypeDef *FMPI2Cx)
976 {
977 return (uint32_t)(READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_SMBHEN | FMPI2C_CR1_SMBDEN));
978 }
979
980 /**
981 * @brief Enable SMBus alert (Host or Device mode)
982 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
983 * SMBus feature is supported by the FMPI2Cx Instance.
984 * @note SMBus Device mode:
985 * - SMBus Alert pin is drived low and
986 * Alert Response Address Header acknowledge is enabled.
987 * SMBus Host mode:
988 * - SMBus Alert pin management is supported.
989 * @rmtoll CR1 ALERTEN LL_FMPI2C_EnableSMBusAlert
990 * @param FMPI2Cx FMPI2C Instance.
991 * @retval None
992 */
LL_FMPI2C_EnableSMBusAlert(FMPI2C_TypeDef * FMPI2Cx)993 __STATIC_INLINE void LL_FMPI2C_EnableSMBusAlert(FMPI2C_TypeDef *FMPI2Cx)
994 {
995 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ALERTEN);
996 }
997
998 /**
999 * @brief Disable SMBus alert (Host or Device mode)
1000 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1001 * SMBus feature is supported by the FMPI2Cx Instance.
1002 * @note SMBus Device mode:
1003 * - SMBus Alert pin is not drived (can be used as a standard GPIO) and
1004 * Alert Response Address Header acknowledge is disabled.
1005 * SMBus Host mode:
1006 * - SMBus Alert pin management is not supported.
1007 * @rmtoll CR1 ALERTEN LL_FMPI2C_DisableSMBusAlert
1008 * @param FMPI2Cx FMPI2C Instance.
1009 * @retval None
1010 */
LL_FMPI2C_DisableSMBusAlert(FMPI2C_TypeDef * FMPI2Cx)1011 __STATIC_INLINE void LL_FMPI2C_DisableSMBusAlert(FMPI2C_TypeDef *FMPI2Cx)
1012 {
1013 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ALERTEN);
1014 }
1015
1016 /**
1017 * @brief Check if SMBus alert (Host or Device mode) is enabled or disabled.
1018 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1019 * SMBus feature is supported by the FMPI2Cx Instance.
1020 * @rmtoll CR1 ALERTEN LL_FMPI2C_IsEnabledSMBusAlert
1021 * @param FMPI2Cx FMPI2C Instance.
1022 * @retval State of bit (1 or 0).
1023 */
LL_FMPI2C_IsEnabledSMBusAlert(FMPI2C_TypeDef * FMPI2Cx)1024 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledSMBusAlert(FMPI2C_TypeDef *FMPI2Cx)
1025 {
1026 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ALERTEN) == (FMPI2C_CR1_ALERTEN)) ? 1UL : 0UL);
1027 }
1028
1029 /**
1030 * @brief Enable SMBus Packet Error Calculation (PEC).
1031 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1032 * SMBus feature is supported by the FMPI2Cx Instance.
1033 * @rmtoll CR1 PECEN LL_FMPI2C_EnableSMBusPEC
1034 * @param FMPI2Cx FMPI2C Instance.
1035 * @retval None
1036 */
LL_FMPI2C_EnableSMBusPEC(FMPI2C_TypeDef * FMPI2Cx)1037 __STATIC_INLINE void LL_FMPI2C_EnableSMBusPEC(FMPI2C_TypeDef *FMPI2Cx)
1038 {
1039 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PECEN);
1040 }
1041
1042 /**
1043 * @brief Disable SMBus Packet Error Calculation (PEC).
1044 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1045 * SMBus feature is supported by the FMPI2Cx Instance.
1046 * @rmtoll CR1 PECEN LL_FMPI2C_DisableSMBusPEC
1047 * @param FMPI2Cx FMPI2C Instance.
1048 * @retval None
1049 */
LL_FMPI2C_DisableSMBusPEC(FMPI2C_TypeDef * FMPI2Cx)1050 __STATIC_INLINE void LL_FMPI2C_DisableSMBusPEC(FMPI2C_TypeDef *FMPI2Cx)
1051 {
1052 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PECEN);
1053 }
1054
1055 /**
1056 * @brief Check if SMBus Packet Error Calculation (PEC) is enabled or disabled.
1057 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1058 * SMBus feature is supported by the FMPI2Cx Instance.
1059 * @rmtoll CR1 PECEN LL_FMPI2C_IsEnabledSMBusPEC
1060 * @param FMPI2Cx FMPI2C Instance.
1061 * @retval State of bit (1 or 0).
1062 */
LL_FMPI2C_IsEnabledSMBusPEC(FMPI2C_TypeDef * FMPI2Cx)1063 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledSMBusPEC(FMPI2C_TypeDef *FMPI2Cx)
1064 {
1065 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_PECEN) == (FMPI2C_CR1_PECEN)) ? 1UL : 0UL);
1066 }
1067
1068 /**
1069 * @brief Configure the SMBus Clock Timeout.
1070 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1071 * SMBus feature is supported by the FMPI2Cx Instance.
1072 * @note This configuration can only be programmed when associated Timeout is disabled (TimeoutA and/orTimeoutB).
1073 * @rmtoll TIMEOUTR TIMEOUTA LL_FMPI2C_ConfigSMBusTimeout\n
1074 * TIMEOUTR TIDLE LL_FMPI2C_ConfigSMBusTimeout\n
1075 * TIMEOUTR TIMEOUTB LL_FMPI2C_ConfigSMBusTimeout
1076 * @param FMPI2Cx FMPI2C Instance.
1077 * @param TimeoutA This parameter must be a value between Min_Data=0 and Max_Data=0xFFF.
1078 * @param TimeoutAMode This parameter can be one of the following values:
1079 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SCL_LOW
1080 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SDA_SCL_HIGH
1081 * @param TimeoutB
1082 * @retval None
1083 */
LL_FMPI2C_ConfigSMBusTimeout(FMPI2C_TypeDef * FMPI2Cx,uint32_t TimeoutA,uint32_t TimeoutAMode,uint32_t TimeoutB)1084 __STATIC_INLINE void LL_FMPI2C_ConfigSMBusTimeout(FMPI2C_TypeDef *FMPI2Cx, uint32_t TimeoutA, uint32_t TimeoutAMode,
1085 uint32_t TimeoutB)
1086 {
1087 MODIFY_REG(FMPI2Cx->TIMEOUTR, FMPI2C_TIMEOUTR_TIMEOUTA | FMPI2C_TIMEOUTR_TIDLE | FMPI2C_TIMEOUTR_TIMEOUTB,
1088 TimeoutA | TimeoutAMode | (TimeoutB << FMPI2C_TIMEOUTR_TIMEOUTB_Pos));
1089 }
1090
1091 /**
1092 * @brief Configure the SMBus Clock TimeoutA (SCL low timeout or SCL and SDA high timeout depends on TimeoutA mode).
1093 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1094 * SMBus feature is supported by the FMPI2Cx Instance.
1095 * @note These bits can only be programmed when TimeoutA is disabled.
1096 * @rmtoll TIMEOUTR TIMEOUTA LL_FMPI2C_SetSMBusTimeoutA
1097 * @param FMPI2Cx FMPI2C Instance.
1098 * @param TimeoutA This parameter must be a value between Min_Data=0 and Max_Data=0xFFF.
1099 * @retval None
1100 */
LL_FMPI2C_SetSMBusTimeoutA(FMPI2C_TypeDef * FMPI2Cx,uint32_t TimeoutA)1101 __STATIC_INLINE void LL_FMPI2C_SetSMBusTimeoutA(FMPI2C_TypeDef *FMPI2Cx, uint32_t TimeoutA)
1102 {
1103 WRITE_REG(FMPI2Cx->TIMEOUTR, TimeoutA);
1104 }
1105
1106 /**
1107 * @brief Get the SMBus Clock TimeoutA setting.
1108 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1109 * SMBus feature is supported by the FMPI2Cx Instance.
1110 * @rmtoll TIMEOUTR TIMEOUTA LL_FMPI2C_GetSMBusTimeoutA
1111 * @param FMPI2Cx FMPI2C Instance.
1112 * @retval Value between Min_Data=0 and Max_Data=0xFFF
1113 */
LL_FMPI2C_GetSMBusTimeoutA(FMPI2C_TypeDef * FMPI2Cx)1114 __STATIC_INLINE uint32_t LL_FMPI2C_GetSMBusTimeoutA(FMPI2C_TypeDef *FMPI2Cx)
1115 {
1116 return (uint32_t)(READ_BIT(FMPI2Cx->TIMEOUTR, FMPI2C_TIMEOUTR_TIMEOUTA));
1117 }
1118
1119 /**
1120 * @brief Set the SMBus Clock TimeoutA mode.
1121 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1122 * SMBus feature is supported by the FMPI2Cx Instance.
1123 * @note This bit can only be programmed when TimeoutA is disabled.
1124 * @rmtoll TIMEOUTR TIDLE LL_FMPI2C_SetSMBusTimeoutAMode
1125 * @param FMPI2Cx FMPI2C Instance.
1126 * @param TimeoutAMode This parameter can be one of the following values:
1127 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SCL_LOW
1128 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SDA_SCL_HIGH
1129 * @retval None
1130 */
LL_FMPI2C_SetSMBusTimeoutAMode(FMPI2C_TypeDef * FMPI2Cx,uint32_t TimeoutAMode)1131 __STATIC_INLINE void LL_FMPI2C_SetSMBusTimeoutAMode(FMPI2C_TypeDef *FMPI2Cx, uint32_t TimeoutAMode)
1132 {
1133 WRITE_REG(FMPI2Cx->TIMEOUTR, TimeoutAMode);
1134 }
1135
1136 /**
1137 * @brief Get the SMBus Clock TimeoutA mode.
1138 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1139 * SMBus feature is supported by the FMPI2Cx Instance.
1140 * @rmtoll TIMEOUTR TIDLE LL_FMPI2C_GetSMBusTimeoutAMode
1141 * @param FMPI2Cx FMPI2C Instance.
1142 * @retval Returned value can be one of the following values:
1143 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SCL_LOW
1144 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA_MODE_SDA_SCL_HIGH
1145 */
LL_FMPI2C_GetSMBusTimeoutAMode(FMPI2C_TypeDef * FMPI2Cx)1146 __STATIC_INLINE uint32_t LL_FMPI2C_GetSMBusTimeoutAMode(FMPI2C_TypeDef *FMPI2Cx)
1147 {
1148 return (uint32_t)(READ_BIT(FMPI2Cx->TIMEOUTR, FMPI2C_TIMEOUTR_TIDLE));
1149 }
1150
1151 /**
1152 * @brief Configure the SMBus Extended Cumulative Clock TimeoutB (Master or Slave mode).
1153 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1154 * SMBus feature is supported by the FMPI2Cx Instance.
1155 * @note These bits can only be programmed when TimeoutB is disabled.
1156 * @rmtoll TIMEOUTR TIMEOUTB LL_FMPI2C_SetSMBusTimeoutB
1157 * @param FMPI2Cx FMPI2C Instance.
1158 * @param TimeoutB This parameter must be a value between Min_Data=0 and Max_Data=0xFFF.
1159 * @retval None
1160 */
LL_FMPI2C_SetSMBusTimeoutB(FMPI2C_TypeDef * FMPI2Cx,uint32_t TimeoutB)1161 __STATIC_INLINE void LL_FMPI2C_SetSMBusTimeoutB(FMPI2C_TypeDef *FMPI2Cx, uint32_t TimeoutB)
1162 {
1163 WRITE_REG(FMPI2Cx->TIMEOUTR, TimeoutB << FMPI2C_TIMEOUTR_TIMEOUTB_Pos);
1164 }
1165
1166 /**
1167 * @brief Get the SMBus Extended Cumulative Clock TimeoutB setting.
1168 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1169 * SMBus feature is supported by the FMPI2Cx Instance.
1170 * @rmtoll TIMEOUTR TIMEOUTB LL_FMPI2C_GetSMBusTimeoutB
1171 * @param FMPI2Cx FMPI2C Instance.
1172 * @retval Value between Min_Data=0 and Max_Data=0xFFF
1173 */
LL_FMPI2C_GetSMBusTimeoutB(FMPI2C_TypeDef * FMPI2Cx)1174 __STATIC_INLINE uint32_t LL_FMPI2C_GetSMBusTimeoutB(FMPI2C_TypeDef *FMPI2Cx)
1175 {
1176 return (uint32_t)(READ_BIT(FMPI2Cx->TIMEOUTR, FMPI2C_TIMEOUTR_TIMEOUTB) >> FMPI2C_TIMEOUTR_TIMEOUTB_Pos);
1177 }
1178
1179 /**
1180 * @brief Enable the SMBus Clock Timeout.
1181 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1182 * SMBus feature is supported by the FMPI2Cx Instance.
1183 * @rmtoll TIMEOUTR TIMOUTEN LL_FMPI2C_EnableSMBusTimeout\n
1184 * TIMEOUTR TEXTEN LL_FMPI2C_EnableSMBusTimeout
1185 * @param FMPI2Cx FMPI2C Instance.
1186 * @param ClockTimeout This parameter can be one of the following values:
1187 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA
1188 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTB
1189 * @arg @ref LL_FMPI2C_FMPSMBUS_ALL_TIMEOUT
1190 * @retval None
1191 */
LL_FMPI2C_EnableSMBusTimeout(FMPI2C_TypeDef * FMPI2Cx,uint32_t ClockTimeout)1192 __STATIC_INLINE void LL_FMPI2C_EnableSMBusTimeout(FMPI2C_TypeDef *FMPI2Cx, uint32_t ClockTimeout)
1193 {
1194 SET_BIT(FMPI2Cx->TIMEOUTR, ClockTimeout);
1195 }
1196
1197 /**
1198 * @brief Disable the SMBus Clock Timeout.
1199 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1200 * SMBus feature is supported by the FMPI2Cx Instance.
1201 * @rmtoll TIMEOUTR TIMOUTEN LL_FMPI2C_DisableSMBusTimeout\n
1202 * TIMEOUTR TEXTEN LL_FMPI2C_DisableSMBusTimeout
1203 * @param FMPI2Cx FMPI2C Instance.
1204 * @param ClockTimeout This parameter can be one of the following values:
1205 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA
1206 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTB
1207 * @arg @ref LL_FMPI2C_FMPSMBUS_ALL_TIMEOUT
1208 * @retval None
1209 */
LL_FMPI2C_DisableSMBusTimeout(FMPI2C_TypeDef * FMPI2Cx,uint32_t ClockTimeout)1210 __STATIC_INLINE void LL_FMPI2C_DisableSMBusTimeout(FMPI2C_TypeDef *FMPI2Cx, uint32_t ClockTimeout)
1211 {
1212 CLEAR_BIT(FMPI2Cx->TIMEOUTR, ClockTimeout);
1213 }
1214
1215 /**
1216 * @brief Check if the SMBus Clock Timeout is enabled or disabled.
1217 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1218 * SMBus feature is supported by the FMPI2Cx Instance.
1219 * @rmtoll TIMEOUTR TIMOUTEN LL_FMPI2C_IsEnabledSMBusTimeout\n
1220 * TIMEOUTR TEXTEN LL_FMPI2C_IsEnabledSMBusTimeout
1221 * @param FMPI2Cx FMPI2C Instance.
1222 * @param ClockTimeout This parameter can be one of the following values:
1223 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTA
1224 * @arg @ref LL_FMPI2C_FMPSMBUS_TIMEOUTB
1225 * @arg @ref LL_FMPI2C_FMPSMBUS_ALL_TIMEOUT
1226 * @retval State of bit (1 or 0).
1227 */
LL_FMPI2C_IsEnabledSMBusTimeout(FMPI2C_TypeDef * FMPI2Cx,uint32_t ClockTimeout)1228 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledSMBusTimeout(FMPI2C_TypeDef *FMPI2Cx, uint32_t ClockTimeout)
1229 {
1230 return ((READ_BIT(FMPI2Cx->TIMEOUTR, (FMPI2C_TIMEOUTR_TIMOUTEN | FMPI2C_TIMEOUTR_TEXTEN)) == \
1231 (ClockTimeout)) ? 1UL : 0UL);
1232 }
1233
1234 /**
1235 * @}
1236 */
1237
1238 /** @defgroup FMPI2C_LL_EF_IT_Management IT_Management
1239 * @{
1240 */
1241
1242 /**
1243 * @brief Enable TXIS interrupt.
1244 * @rmtoll CR1 TXIE LL_FMPI2C_EnableIT_TX
1245 * @param FMPI2Cx FMPI2C Instance.
1246 * @retval None
1247 */
LL_FMPI2C_EnableIT_TX(FMPI2C_TypeDef * FMPI2Cx)1248 __STATIC_INLINE void LL_FMPI2C_EnableIT_TX(FMPI2C_TypeDef *FMPI2Cx)
1249 {
1250 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXIE);
1251 }
1252
1253 /**
1254 * @brief Disable TXIS interrupt.
1255 * @rmtoll CR1 TXIE LL_FMPI2C_DisableIT_TX
1256 * @param FMPI2Cx FMPI2C Instance.
1257 * @retval None
1258 */
LL_FMPI2C_DisableIT_TX(FMPI2C_TypeDef * FMPI2Cx)1259 __STATIC_INLINE void LL_FMPI2C_DisableIT_TX(FMPI2C_TypeDef *FMPI2Cx)
1260 {
1261 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXIE);
1262 }
1263
1264 /**
1265 * @brief Check if the TXIS Interrupt is enabled or disabled.
1266 * @rmtoll CR1 TXIE LL_FMPI2C_IsEnabledIT_TX
1267 * @param FMPI2Cx FMPI2C Instance.
1268 * @retval State of bit (1 or 0).
1269 */
LL_FMPI2C_IsEnabledIT_TX(FMPI2C_TypeDef * FMPI2Cx)1270 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_TX(FMPI2C_TypeDef *FMPI2Cx)
1271 {
1272 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TXIE) == (FMPI2C_CR1_TXIE)) ? 1UL : 0UL);
1273 }
1274
1275 /**
1276 * @brief Enable RXNE interrupt.
1277 * @rmtoll CR1 RXIE LL_FMPI2C_EnableIT_RX
1278 * @param FMPI2Cx FMPI2C Instance.
1279 * @retval None
1280 */
LL_FMPI2C_EnableIT_RX(FMPI2C_TypeDef * FMPI2Cx)1281 __STATIC_INLINE void LL_FMPI2C_EnableIT_RX(FMPI2C_TypeDef *FMPI2Cx)
1282 {
1283 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXIE);
1284 }
1285
1286 /**
1287 * @brief Disable RXNE interrupt.
1288 * @rmtoll CR1 RXIE LL_FMPI2C_DisableIT_RX
1289 * @param FMPI2Cx FMPI2C Instance.
1290 * @retval None
1291 */
LL_FMPI2C_DisableIT_RX(FMPI2C_TypeDef * FMPI2Cx)1292 __STATIC_INLINE void LL_FMPI2C_DisableIT_RX(FMPI2C_TypeDef *FMPI2Cx)
1293 {
1294 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXIE);
1295 }
1296
1297 /**
1298 * @brief Check if the RXNE Interrupt is enabled or disabled.
1299 * @rmtoll CR1 RXIE LL_FMPI2C_IsEnabledIT_RX
1300 * @param FMPI2Cx FMPI2C Instance.
1301 * @retval State of bit (1 or 0).
1302 */
LL_FMPI2C_IsEnabledIT_RX(FMPI2C_TypeDef * FMPI2Cx)1303 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_RX(FMPI2C_TypeDef *FMPI2Cx)
1304 {
1305 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_RXIE) == (FMPI2C_CR1_RXIE)) ? 1UL : 0UL);
1306 }
1307
1308 /**
1309 * @brief Enable Address match interrupt (slave mode only).
1310 * @rmtoll CR1 ADDRIE LL_FMPI2C_EnableIT_ADDR
1311 * @param FMPI2Cx FMPI2C Instance.
1312 * @retval None
1313 */
LL_FMPI2C_EnableIT_ADDR(FMPI2C_TypeDef * FMPI2Cx)1314 __STATIC_INLINE void LL_FMPI2C_EnableIT_ADDR(FMPI2C_TypeDef *FMPI2Cx)
1315 {
1316 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ADDRIE);
1317 }
1318
1319 /**
1320 * @brief Disable Address match interrupt (slave mode only).
1321 * @rmtoll CR1 ADDRIE LL_FMPI2C_DisableIT_ADDR
1322 * @param FMPI2Cx FMPI2C Instance.
1323 * @retval None
1324 */
LL_FMPI2C_DisableIT_ADDR(FMPI2C_TypeDef * FMPI2Cx)1325 __STATIC_INLINE void LL_FMPI2C_DisableIT_ADDR(FMPI2C_TypeDef *FMPI2Cx)
1326 {
1327 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ADDRIE);
1328 }
1329
1330 /**
1331 * @brief Check if Address match interrupt is enabled or disabled.
1332 * @rmtoll CR1 ADDRIE LL_FMPI2C_IsEnabledIT_ADDR
1333 * @param FMPI2Cx FMPI2C Instance.
1334 * @retval State of bit (1 or 0).
1335 */
LL_FMPI2C_IsEnabledIT_ADDR(FMPI2C_TypeDef * FMPI2Cx)1336 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_ADDR(FMPI2C_TypeDef *FMPI2Cx)
1337 {
1338 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ADDRIE) == (FMPI2C_CR1_ADDRIE)) ? 1UL : 0UL);
1339 }
1340
1341 /**
1342 * @brief Enable Not acknowledge received interrupt.
1343 * @rmtoll CR1 NACKIE LL_FMPI2C_EnableIT_NACK
1344 * @param FMPI2Cx FMPI2C Instance.
1345 * @retval None
1346 */
LL_FMPI2C_EnableIT_NACK(FMPI2C_TypeDef * FMPI2Cx)1347 __STATIC_INLINE void LL_FMPI2C_EnableIT_NACK(FMPI2C_TypeDef *FMPI2Cx)
1348 {
1349 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NACKIE);
1350 }
1351
1352 /**
1353 * @brief Disable Not acknowledge received interrupt.
1354 * @rmtoll CR1 NACKIE LL_FMPI2C_DisableIT_NACK
1355 * @param FMPI2Cx FMPI2C Instance.
1356 * @retval None
1357 */
LL_FMPI2C_DisableIT_NACK(FMPI2C_TypeDef * FMPI2Cx)1358 __STATIC_INLINE void LL_FMPI2C_DisableIT_NACK(FMPI2C_TypeDef *FMPI2Cx)
1359 {
1360 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NACKIE);
1361 }
1362
1363 /**
1364 * @brief Check if Not acknowledge received interrupt is enabled or disabled.
1365 * @rmtoll CR1 NACKIE LL_FMPI2C_IsEnabledIT_NACK
1366 * @param FMPI2Cx FMPI2C Instance.
1367 * @retval State of bit (1 or 0).
1368 */
LL_FMPI2C_IsEnabledIT_NACK(FMPI2C_TypeDef * FMPI2Cx)1369 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_NACK(FMPI2C_TypeDef *FMPI2Cx)
1370 {
1371 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_NACKIE) == (FMPI2C_CR1_NACKIE)) ? 1UL : 0UL);
1372 }
1373
1374 /**
1375 * @brief Enable STOP detection interrupt.
1376 * @rmtoll CR1 STOPIE LL_FMPI2C_EnableIT_STOP
1377 * @param FMPI2Cx FMPI2C Instance.
1378 * @retval None
1379 */
LL_FMPI2C_EnableIT_STOP(FMPI2C_TypeDef * FMPI2Cx)1380 __STATIC_INLINE void LL_FMPI2C_EnableIT_STOP(FMPI2C_TypeDef *FMPI2Cx)
1381 {
1382 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_STOPIE);
1383 }
1384
1385 /**
1386 * @brief Disable STOP detection interrupt.
1387 * @rmtoll CR1 STOPIE LL_FMPI2C_DisableIT_STOP
1388 * @param FMPI2Cx FMPI2C Instance.
1389 * @retval None
1390 */
LL_FMPI2C_DisableIT_STOP(FMPI2C_TypeDef * FMPI2Cx)1391 __STATIC_INLINE void LL_FMPI2C_DisableIT_STOP(FMPI2C_TypeDef *FMPI2Cx)
1392 {
1393 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_STOPIE);
1394 }
1395
1396 /**
1397 * @brief Check if STOP detection interrupt is enabled or disabled.
1398 * @rmtoll CR1 STOPIE LL_FMPI2C_IsEnabledIT_STOP
1399 * @param FMPI2Cx FMPI2C Instance.
1400 * @retval State of bit (1 or 0).
1401 */
LL_FMPI2C_IsEnabledIT_STOP(FMPI2C_TypeDef * FMPI2Cx)1402 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_STOP(FMPI2C_TypeDef *FMPI2Cx)
1403 {
1404 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_STOPIE) == (FMPI2C_CR1_STOPIE)) ? 1UL : 0UL);
1405 }
1406
1407 /**
1408 * @brief Enable Transfer Complete interrupt.
1409 * @note Any of these events will generate interrupt :
1410 * Transfer Complete (TC)
1411 * Transfer Complete Reload (TCR)
1412 * @rmtoll CR1 TCIE LL_FMPI2C_EnableIT_TC
1413 * @param FMPI2Cx FMPI2C Instance.
1414 * @retval None
1415 */
LL_FMPI2C_EnableIT_TC(FMPI2C_TypeDef * FMPI2Cx)1416 __STATIC_INLINE void LL_FMPI2C_EnableIT_TC(FMPI2C_TypeDef *FMPI2Cx)
1417 {
1418 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TCIE);
1419 }
1420
1421 /**
1422 * @brief Disable Transfer Complete interrupt.
1423 * @note Any of these events will generate interrupt :
1424 * Transfer Complete (TC)
1425 * Transfer Complete Reload (TCR)
1426 * @rmtoll CR1 TCIE LL_FMPI2C_DisableIT_TC
1427 * @param FMPI2Cx FMPI2C Instance.
1428 * @retval None
1429 */
LL_FMPI2C_DisableIT_TC(FMPI2C_TypeDef * FMPI2Cx)1430 __STATIC_INLINE void LL_FMPI2C_DisableIT_TC(FMPI2C_TypeDef *FMPI2Cx)
1431 {
1432 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TCIE);
1433 }
1434
1435 /**
1436 * @brief Check if Transfer Complete interrupt is enabled or disabled.
1437 * @rmtoll CR1 TCIE LL_FMPI2C_IsEnabledIT_TC
1438 * @param FMPI2Cx FMPI2C Instance.
1439 * @retval State of bit (1 or 0).
1440 */
LL_FMPI2C_IsEnabledIT_TC(FMPI2C_TypeDef * FMPI2Cx)1441 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_TC(FMPI2C_TypeDef *FMPI2Cx)
1442 {
1443 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_TCIE) == (FMPI2C_CR1_TCIE)) ? 1UL : 0UL);
1444 }
1445
1446 /**
1447 * @brief Enable Error interrupts.
1448 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1449 * SMBus feature is supported by the FMPI2Cx Instance.
1450 * @note Any of these errors will generate interrupt :
1451 * Arbitration Loss (ARLO)
1452 * Bus Error detection (BERR)
1453 * Overrun/Underrun (OVR)
1454 * SMBus Timeout detection (TIMEOUT)
1455 * SMBus PEC error detection (PECERR)
1456 * SMBus Alert pin event detection (ALERT)
1457 * @rmtoll CR1 ERRIE LL_FMPI2C_EnableIT_ERR
1458 * @param FMPI2Cx FMPI2C Instance.
1459 * @retval None
1460 */
LL_FMPI2C_EnableIT_ERR(FMPI2C_TypeDef * FMPI2Cx)1461 __STATIC_INLINE void LL_FMPI2C_EnableIT_ERR(FMPI2C_TypeDef *FMPI2Cx)
1462 {
1463 SET_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ERRIE);
1464 }
1465
1466 /**
1467 * @brief Disable Error interrupts.
1468 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1469 * SMBus feature is supported by the FMPI2Cx Instance.
1470 * @note Any of these errors will generate interrupt :
1471 * Arbitration Loss (ARLO)
1472 * Bus Error detection (BERR)
1473 * Overrun/Underrun (OVR)
1474 * SMBus Timeout detection (TIMEOUT)
1475 * SMBus PEC error detection (PECERR)
1476 * SMBus Alert pin event detection (ALERT)
1477 * @rmtoll CR1 ERRIE LL_FMPI2C_DisableIT_ERR
1478 * @param FMPI2Cx FMPI2C Instance.
1479 * @retval None
1480 */
LL_FMPI2C_DisableIT_ERR(FMPI2C_TypeDef * FMPI2Cx)1481 __STATIC_INLINE void LL_FMPI2C_DisableIT_ERR(FMPI2C_TypeDef *FMPI2Cx)
1482 {
1483 CLEAR_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ERRIE);
1484 }
1485
1486 /**
1487 * @brief Check if Error interrupts are enabled or disabled.
1488 * @rmtoll CR1 ERRIE LL_FMPI2C_IsEnabledIT_ERR
1489 * @param FMPI2Cx FMPI2C Instance.
1490 * @retval State of bit (1 or 0).
1491 */
LL_FMPI2C_IsEnabledIT_ERR(FMPI2C_TypeDef * FMPI2Cx)1492 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledIT_ERR(FMPI2C_TypeDef *FMPI2Cx)
1493 {
1494 return ((READ_BIT(FMPI2Cx->CR1, FMPI2C_CR1_ERRIE) == (FMPI2C_CR1_ERRIE)) ? 1UL : 0UL);
1495 }
1496
1497 /**
1498 * @}
1499 */
1500
1501 /** @defgroup FMPI2C_LL_EF_FLAG_management FLAG_management
1502 * @{
1503 */
1504
1505 /**
1506 * @brief Indicate the status of Transmit data register empty flag.
1507 * @note RESET: When next data is written in Transmit data register.
1508 * SET: When Transmit data register is empty.
1509 * @rmtoll ISR TXE LL_FMPI2C_IsActiveFlag_TXE
1510 * @param FMPI2Cx FMPI2C Instance.
1511 * @retval State of bit (1 or 0).
1512 */
LL_FMPI2C_IsActiveFlag_TXE(FMPI2C_TypeDef * FMPI2Cx)1513 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_TXE(FMPI2C_TypeDef *FMPI2Cx)
1514 {
1515 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_TXE) == (FMPI2C_ISR_TXE)) ? 1UL : 0UL);
1516 }
1517
1518 /**
1519 * @brief Indicate the status of Transmit interrupt flag.
1520 * @note RESET: When next data is written in Transmit data register.
1521 * SET: When Transmit data register is empty.
1522 * @rmtoll ISR TXIS LL_FMPI2C_IsActiveFlag_TXIS
1523 * @param FMPI2Cx FMPI2C Instance.
1524 * @retval State of bit (1 or 0).
1525 */
LL_FMPI2C_IsActiveFlag_TXIS(FMPI2C_TypeDef * FMPI2Cx)1526 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_TXIS(FMPI2C_TypeDef *FMPI2Cx)
1527 {
1528 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_TXIS) == (FMPI2C_ISR_TXIS)) ? 1UL : 0UL);
1529 }
1530
1531 /**
1532 * @brief Indicate the status of Receive data register not empty flag.
1533 * @note RESET: When Receive data register is read.
1534 * SET: When the received data is copied in Receive data register.
1535 * @rmtoll ISR RXNE LL_FMPI2C_IsActiveFlag_RXNE
1536 * @param FMPI2Cx FMPI2C Instance.
1537 * @retval State of bit (1 or 0).
1538 */
LL_FMPI2C_IsActiveFlag_RXNE(FMPI2C_TypeDef * FMPI2Cx)1539 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_RXNE(FMPI2C_TypeDef *FMPI2Cx)
1540 {
1541 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_RXNE) == (FMPI2C_ISR_RXNE)) ? 1UL : 0UL);
1542 }
1543
1544 /**
1545 * @brief Indicate the status of Address matched flag (slave mode).
1546 * @note RESET: Clear default value.
1547 * SET: When the received slave address matched with one of the enabled slave address.
1548 * @rmtoll ISR ADDR LL_FMPI2C_IsActiveFlag_ADDR
1549 * @param FMPI2Cx FMPI2C Instance.
1550 * @retval State of bit (1 or 0).
1551 */
LL_FMPI2C_IsActiveFlag_ADDR(FMPI2C_TypeDef * FMPI2Cx)1552 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_ADDR(FMPI2C_TypeDef *FMPI2Cx)
1553 {
1554 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_ADDR) == (FMPI2C_ISR_ADDR)) ? 1UL : 0UL);
1555 }
1556
1557 /**
1558 * @brief Indicate the status of Not Acknowledge received flag.
1559 * @note RESET: Clear default value.
1560 * SET: When a NACK is received after a byte transmission.
1561 * @rmtoll ISR NACKF LL_FMPI2C_IsActiveFlag_NACK
1562 * @param FMPI2Cx FMPI2C Instance.
1563 * @retval State of bit (1 or 0).
1564 */
LL_FMPI2C_IsActiveFlag_NACK(FMPI2C_TypeDef * FMPI2Cx)1565 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_NACK(FMPI2C_TypeDef *FMPI2Cx)
1566 {
1567 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_NACKF) == (FMPI2C_ISR_NACKF)) ? 1UL : 0UL);
1568 }
1569
1570 /**
1571 * @brief Indicate the status of Stop detection flag.
1572 * @note RESET: Clear default value.
1573 * SET: When a Stop condition is detected.
1574 * @rmtoll ISR STOPF LL_FMPI2C_IsActiveFlag_STOP
1575 * @param FMPI2Cx FMPI2C Instance.
1576 * @retval State of bit (1 or 0).
1577 */
LL_FMPI2C_IsActiveFlag_STOP(FMPI2C_TypeDef * FMPI2Cx)1578 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_STOP(FMPI2C_TypeDef *FMPI2Cx)
1579 {
1580 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_STOPF) == (FMPI2C_ISR_STOPF)) ? 1UL : 0UL);
1581 }
1582
1583 /**
1584 * @brief Indicate the status of Transfer complete flag (master mode).
1585 * @note RESET: Clear default value.
1586 * SET: When RELOAD=0, AUTOEND=0 and NBYTES date have been transferred.
1587 * @rmtoll ISR TC LL_FMPI2C_IsActiveFlag_TC
1588 * @param FMPI2Cx FMPI2C Instance.
1589 * @retval State of bit (1 or 0).
1590 */
LL_FMPI2C_IsActiveFlag_TC(FMPI2C_TypeDef * FMPI2Cx)1591 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_TC(FMPI2C_TypeDef *FMPI2Cx)
1592 {
1593 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_TC) == (FMPI2C_ISR_TC)) ? 1UL : 0UL);
1594 }
1595
1596 /**
1597 * @brief Indicate the status of Transfer complete flag (master mode).
1598 * @note RESET: Clear default value.
1599 * SET: When RELOAD=1 and NBYTES date have been transferred.
1600 * @rmtoll ISR TCR LL_FMPI2C_IsActiveFlag_TCR
1601 * @param FMPI2Cx FMPI2C Instance.
1602 * @retval State of bit (1 or 0).
1603 */
LL_FMPI2C_IsActiveFlag_TCR(FMPI2C_TypeDef * FMPI2Cx)1604 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_TCR(FMPI2C_TypeDef *FMPI2Cx)
1605 {
1606 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_TCR) == (FMPI2C_ISR_TCR)) ? 1UL : 0UL);
1607 }
1608
1609 /**
1610 * @brief Indicate the status of Bus error flag.
1611 * @note RESET: Clear default value.
1612 * SET: When a misplaced Start or Stop condition is detected.
1613 * @rmtoll ISR BERR LL_FMPI2C_IsActiveFlag_BERR
1614 * @param FMPI2Cx FMPI2C Instance.
1615 * @retval State of bit (1 or 0).
1616 */
LL_FMPI2C_IsActiveFlag_BERR(FMPI2C_TypeDef * FMPI2Cx)1617 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_BERR(FMPI2C_TypeDef *FMPI2Cx)
1618 {
1619 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_BERR) == (FMPI2C_ISR_BERR)) ? 1UL : 0UL);
1620 }
1621
1622 /**
1623 * @brief Indicate the status of Arbitration lost flag.
1624 * @note RESET: Clear default value.
1625 * SET: When arbitration lost.
1626 * @rmtoll ISR ARLO LL_FMPI2C_IsActiveFlag_ARLO
1627 * @param FMPI2Cx FMPI2C Instance.
1628 * @retval State of bit (1 or 0).
1629 */
LL_FMPI2C_IsActiveFlag_ARLO(FMPI2C_TypeDef * FMPI2Cx)1630 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_ARLO(FMPI2C_TypeDef *FMPI2Cx)
1631 {
1632 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_ARLO) == (FMPI2C_ISR_ARLO)) ? 1UL : 0UL);
1633 }
1634
1635 /**
1636 * @brief Indicate the status of Overrun/Underrun flag (slave mode).
1637 * @note RESET: Clear default value.
1638 * SET: When an overrun/underrun error occurs (Clock Stretching Disabled).
1639 * @rmtoll ISR OVR LL_FMPI2C_IsActiveFlag_OVR
1640 * @param FMPI2Cx FMPI2C Instance.
1641 * @retval State of bit (1 or 0).
1642 */
LL_FMPI2C_IsActiveFlag_OVR(FMPI2C_TypeDef * FMPI2Cx)1643 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_OVR(FMPI2C_TypeDef *FMPI2Cx)
1644 {
1645 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_OVR) == (FMPI2C_ISR_OVR)) ? 1UL : 0UL);
1646 }
1647
1648 /**
1649 * @brief Indicate the status of SMBus PEC error flag in reception.
1650 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1651 * SMBus feature is supported by the FMPI2Cx Instance.
1652 * @note RESET: Clear default value.
1653 * SET: When the received PEC does not match with the PEC register content.
1654 * @rmtoll ISR PECERR LL_FMPI2C_IsActiveSMBusFlag_PECERR
1655 * @param FMPI2Cx FMPI2C Instance.
1656 * @retval State of bit (1 or 0).
1657 */
LL_FMPI2C_IsActiveSMBusFlag_PECERR(FMPI2C_TypeDef * FMPI2Cx)1658 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveSMBusFlag_PECERR(FMPI2C_TypeDef *FMPI2Cx)
1659 {
1660 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_PECERR) == (FMPI2C_ISR_PECERR)) ? 1UL : 0UL);
1661 }
1662
1663 /**
1664 * @brief Indicate the status of SMBus Timeout detection flag.
1665 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1666 * SMBus feature is supported by the FMPI2Cx Instance.
1667 * @note RESET: Clear default value.
1668 * SET: When a timeout or extended clock timeout occurs.
1669 * @rmtoll ISR TIMEOUT LL_FMPI2C_IsActiveSMBusFlag_TIMEOUT
1670 * @param FMPI2Cx FMPI2C Instance.
1671 * @retval State of bit (1 or 0).
1672 */
LL_FMPI2C_IsActiveSMBusFlag_TIMEOUT(FMPI2C_TypeDef * FMPI2Cx)1673 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveSMBusFlag_TIMEOUT(FMPI2C_TypeDef *FMPI2Cx)
1674 {
1675 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_TIMEOUT) == (FMPI2C_ISR_TIMEOUT)) ? 1UL : 0UL);
1676 }
1677
1678 /**
1679 * @brief Indicate the status of SMBus alert flag.
1680 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1681 * SMBus feature is supported by the FMPI2Cx Instance.
1682 * @note RESET: Clear default value.
1683 * SET: When SMBus host configuration, SMBus alert enabled and
1684 * a falling edge event occurs on SMBA pin.
1685 * @rmtoll ISR ALERT LL_FMPI2C_IsActiveSMBusFlag_ALERT
1686 * @param FMPI2Cx FMPI2C Instance.
1687 * @retval State of bit (1 or 0).
1688 */
LL_FMPI2C_IsActiveSMBusFlag_ALERT(FMPI2C_TypeDef * FMPI2Cx)1689 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveSMBusFlag_ALERT(FMPI2C_TypeDef *FMPI2Cx)
1690 {
1691 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_ALERT) == (FMPI2C_ISR_ALERT)) ? 1UL : 0UL);
1692 }
1693
1694 /**
1695 * @brief Indicate the status of Bus Busy flag.
1696 * @note RESET: Clear default value.
1697 * SET: When a Start condition is detected.
1698 * @rmtoll ISR BUSY LL_FMPI2C_IsActiveFlag_BUSY
1699 * @param FMPI2Cx FMPI2C Instance.
1700 * @retval State of bit (1 or 0).
1701 */
LL_FMPI2C_IsActiveFlag_BUSY(FMPI2C_TypeDef * FMPI2Cx)1702 __STATIC_INLINE uint32_t LL_FMPI2C_IsActiveFlag_BUSY(FMPI2C_TypeDef *FMPI2Cx)
1703 {
1704 return ((READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_BUSY) == (FMPI2C_ISR_BUSY)) ? 1UL : 0UL);
1705 }
1706
1707 /**
1708 * @brief Clear Address Matched flag.
1709 * @rmtoll ICR ADDRCF LL_FMPI2C_ClearFlag_ADDR
1710 * @param FMPI2Cx FMPI2C Instance.
1711 * @retval None
1712 */
LL_FMPI2C_ClearFlag_ADDR(FMPI2C_TypeDef * FMPI2Cx)1713 __STATIC_INLINE void LL_FMPI2C_ClearFlag_ADDR(FMPI2C_TypeDef *FMPI2Cx)
1714 {
1715 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_ADDRCF);
1716 }
1717
1718 /**
1719 * @brief Clear Not Acknowledge flag.
1720 * @rmtoll ICR NACKCF LL_FMPI2C_ClearFlag_NACK
1721 * @param FMPI2Cx FMPI2C Instance.
1722 * @retval None
1723 */
LL_FMPI2C_ClearFlag_NACK(FMPI2C_TypeDef * FMPI2Cx)1724 __STATIC_INLINE void LL_FMPI2C_ClearFlag_NACK(FMPI2C_TypeDef *FMPI2Cx)
1725 {
1726 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_NACKCF);
1727 }
1728
1729 /**
1730 * @brief Clear Stop detection flag.
1731 * @rmtoll ICR STOPCF LL_FMPI2C_ClearFlag_STOP
1732 * @param FMPI2Cx FMPI2C Instance.
1733 * @retval None
1734 */
LL_FMPI2C_ClearFlag_STOP(FMPI2C_TypeDef * FMPI2Cx)1735 __STATIC_INLINE void LL_FMPI2C_ClearFlag_STOP(FMPI2C_TypeDef *FMPI2Cx)
1736 {
1737 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_STOPCF);
1738 }
1739
1740 /**
1741 * @brief Clear Transmit data register empty flag (TXE).
1742 * @note This bit can be clear by software in order to flush the transmit data register (TXDR).
1743 * @rmtoll ISR TXE LL_FMPI2C_ClearFlag_TXE
1744 * @param FMPI2Cx FMPI2C Instance.
1745 * @retval None
1746 */
LL_FMPI2C_ClearFlag_TXE(FMPI2C_TypeDef * FMPI2Cx)1747 __STATIC_INLINE void LL_FMPI2C_ClearFlag_TXE(FMPI2C_TypeDef *FMPI2Cx)
1748 {
1749 WRITE_REG(FMPI2Cx->ISR, FMPI2C_ISR_TXE);
1750 }
1751
1752 /**
1753 * @brief Clear Bus error flag.
1754 * @rmtoll ICR BERRCF LL_FMPI2C_ClearFlag_BERR
1755 * @param FMPI2Cx FMPI2C Instance.
1756 * @retval None
1757 */
LL_FMPI2C_ClearFlag_BERR(FMPI2C_TypeDef * FMPI2Cx)1758 __STATIC_INLINE void LL_FMPI2C_ClearFlag_BERR(FMPI2C_TypeDef *FMPI2Cx)
1759 {
1760 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_BERRCF);
1761 }
1762
1763 /**
1764 * @brief Clear Arbitration lost flag.
1765 * @rmtoll ICR ARLOCF LL_FMPI2C_ClearFlag_ARLO
1766 * @param FMPI2Cx FMPI2C Instance.
1767 * @retval None
1768 */
LL_FMPI2C_ClearFlag_ARLO(FMPI2C_TypeDef * FMPI2Cx)1769 __STATIC_INLINE void LL_FMPI2C_ClearFlag_ARLO(FMPI2C_TypeDef *FMPI2Cx)
1770 {
1771 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_ARLOCF);
1772 }
1773
1774 /**
1775 * @brief Clear Overrun/Underrun flag.
1776 * @rmtoll ICR OVRCF LL_FMPI2C_ClearFlag_OVR
1777 * @param FMPI2Cx FMPI2C Instance.
1778 * @retval None
1779 */
LL_FMPI2C_ClearFlag_OVR(FMPI2C_TypeDef * FMPI2Cx)1780 __STATIC_INLINE void LL_FMPI2C_ClearFlag_OVR(FMPI2C_TypeDef *FMPI2Cx)
1781 {
1782 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_OVRCF);
1783 }
1784
1785 /**
1786 * @brief Clear SMBus PEC error flag.
1787 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1788 * SMBus feature is supported by the FMPI2Cx Instance.
1789 * @rmtoll ICR PECCF LL_FMPI2C_ClearSMBusFlag_PECERR
1790 * @param FMPI2Cx FMPI2C Instance.
1791 * @retval None
1792 */
LL_FMPI2C_ClearSMBusFlag_PECERR(FMPI2C_TypeDef * FMPI2Cx)1793 __STATIC_INLINE void LL_FMPI2C_ClearSMBusFlag_PECERR(FMPI2C_TypeDef *FMPI2Cx)
1794 {
1795 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_PECCF);
1796 }
1797
1798 /**
1799 * @brief Clear SMBus Timeout detection flag.
1800 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1801 * SMBus feature is supported by the FMPI2Cx Instance.
1802 * @rmtoll ICR TIMOUTCF LL_FMPI2C_ClearSMBusFlag_TIMEOUT
1803 * @param FMPI2Cx FMPI2C Instance.
1804 * @retval None
1805 */
LL_FMPI2C_ClearSMBusFlag_TIMEOUT(FMPI2C_TypeDef * FMPI2Cx)1806 __STATIC_INLINE void LL_FMPI2C_ClearSMBusFlag_TIMEOUT(FMPI2C_TypeDef *FMPI2Cx)
1807 {
1808 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_TIMOUTCF);
1809 }
1810
1811 /**
1812 * @brief Clear SMBus Alert flag.
1813 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
1814 * SMBus feature is supported by the FMPI2Cx Instance.
1815 * @rmtoll ICR ALERTCF LL_FMPI2C_ClearSMBusFlag_ALERT
1816 * @param FMPI2Cx FMPI2C Instance.
1817 * @retval None
1818 */
LL_FMPI2C_ClearSMBusFlag_ALERT(FMPI2C_TypeDef * FMPI2Cx)1819 __STATIC_INLINE void LL_FMPI2C_ClearSMBusFlag_ALERT(FMPI2C_TypeDef *FMPI2Cx)
1820 {
1821 SET_BIT(FMPI2Cx->ICR, FMPI2C_ICR_ALERTCF);
1822 }
1823
1824 /**
1825 * @}
1826 */
1827
1828 /** @defgroup FMPI2C_LL_EF_Data_Management Data_Management
1829 * @{
1830 */
1831
1832 /**
1833 * @brief Enable automatic STOP condition generation (master mode).
1834 * @note Automatic end mode : a STOP condition is automatically sent when NBYTES data are transferred.
1835 * This bit has no effect in slave mode or when RELOAD bit is set.
1836 * @rmtoll CR2 AUTOEND LL_FMPI2C_EnableAutoEndMode
1837 * @param FMPI2Cx FMPI2C Instance.
1838 * @retval None
1839 */
LL_FMPI2C_EnableAutoEndMode(FMPI2C_TypeDef * FMPI2Cx)1840 __STATIC_INLINE void LL_FMPI2C_EnableAutoEndMode(FMPI2C_TypeDef *FMPI2Cx)
1841 {
1842 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_AUTOEND);
1843 }
1844
1845 /**
1846 * @brief Disable automatic STOP condition generation (master mode).
1847 * @note Software end mode : TC flag is set when NBYTES data are transferre, stretching SCL low.
1848 * @rmtoll CR2 AUTOEND LL_FMPI2C_DisableAutoEndMode
1849 * @param FMPI2Cx FMPI2C Instance.
1850 * @retval None
1851 */
LL_FMPI2C_DisableAutoEndMode(FMPI2C_TypeDef * FMPI2Cx)1852 __STATIC_INLINE void LL_FMPI2C_DisableAutoEndMode(FMPI2C_TypeDef *FMPI2Cx)
1853 {
1854 CLEAR_BIT(FMPI2Cx->CR2, FMPI2C_CR2_AUTOEND);
1855 }
1856
1857 /**
1858 * @brief Check if automatic STOP condition is enabled or disabled.
1859 * @rmtoll CR2 AUTOEND LL_FMPI2C_IsEnabledAutoEndMode
1860 * @param FMPI2Cx FMPI2C Instance.
1861 * @retval State of bit (1 or 0).
1862 */
LL_FMPI2C_IsEnabledAutoEndMode(FMPI2C_TypeDef * FMPI2Cx)1863 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledAutoEndMode(FMPI2C_TypeDef *FMPI2Cx)
1864 {
1865 return ((READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_AUTOEND) == (FMPI2C_CR2_AUTOEND)) ? 1UL : 0UL);
1866 }
1867
1868 /**
1869 * @brief Enable reload mode (master mode).
1870 * @note The transfer is not completed after the NBYTES data transfer, NBYTES will be reloaded when TCR flag is set.
1871 * @rmtoll CR2 RELOAD LL_FMPI2C_EnableReloadMode
1872 * @param FMPI2Cx FMPI2C Instance.
1873 * @retval None
1874 */
LL_FMPI2C_EnableReloadMode(FMPI2C_TypeDef * FMPI2Cx)1875 __STATIC_INLINE void LL_FMPI2C_EnableReloadMode(FMPI2C_TypeDef *FMPI2Cx)
1876 {
1877 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_RELOAD);
1878 }
1879
1880 /**
1881 * @brief Disable reload mode (master mode).
1882 * @note The transfer is completed after the NBYTES data transfer(STOP or RESTART will follow).
1883 * @rmtoll CR2 RELOAD LL_FMPI2C_DisableReloadMode
1884 * @param FMPI2Cx FMPI2C Instance.
1885 * @retval None
1886 */
LL_FMPI2C_DisableReloadMode(FMPI2C_TypeDef * FMPI2Cx)1887 __STATIC_INLINE void LL_FMPI2C_DisableReloadMode(FMPI2C_TypeDef *FMPI2Cx)
1888 {
1889 CLEAR_BIT(FMPI2Cx->CR2, FMPI2C_CR2_RELOAD);
1890 }
1891
1892 /**
1893 * @brief Check if reload mode is enabled or disabled.
1894 * @rmtoll CR2 RELOAD LL_FMPI2C_IsEnabledReloadMode
1895 * @param FMPI2Cx FMPI2C Instance.
1896 * @retval State of bit (1 or 0).
1897 */
LL_FMPI2C_IsEnabledReloadMode(FMPI2C_TypeDef * FMPI2Cx)1898 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledReloadMode(FMPI2C_TypeDef *FMPI2Cx)
1899 {
1900 return ((READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_RELOAD) == (FMPI2C_CR2_RELOAD)) ? 1UL : 0UL);
1901 }
1902
1903 /**
1904 * @brief Configure the number of bytes for transfer.
1905 * @note Changing these bits when START bit is set is not allowed.
1906 * @rmtoll CR2 NBYTES LL_FMPI2C_SetTransferSize
1907 * @param FMPI2Cx FMPI2C Instance.
1908 * @param TransferSize This parameter must be a value between Min_Data=0x00 and Max_Data=0xFF.
1909 * @retval None
1910 */
LL_FMPI2C_SetTransferSize(FMPI2C_TypeDef * FMPI2Cx,uint32_t TransferSize)1911 __STATIC_INLINE void LL_FMPI2C_SetTransferSize(FMPI2C_TypeDef *FMPI2Cx, uint32_t TransferSize)
1912 {
1913 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_NBYTES, TransferSize << FMPI2C_CR2_NBYTES_Pos);
1914 }
1915
1916 /**
1917 * @brief Get the number of bytes configured for transfer.
1918 * @rmtoll CR2 NBYTES LL_FMPI2C_GetTransferSize
1919 * @param FMPI2Cx FMPI2C Instance.
1920 * @retval Value between Min_Data=0x0 and Max_Data=0xFF
1921 */
LL_FMPI2C_GetTransferSize(FMPI2C_TypeDef * FMPI2Cx)1922 __STATIC_INLINE uint32_t LL_FMPI2C_GetTransferSize(FMPI2C_TypeDef *FMPI2Cx)
1923 {
1924 return (uint32_t)(READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_NBYTES) >> FMPI2C_CR2_NBYTES_Pos);
1925 }
1926
1927 /**
1928 * @brief Prepare the generation of a ACKnowledge or Non ACKnowledge condition after the address receive match code
1929 or next received byte.
1930 * @note Usage in Slave mode only.
1931 * @rmtoll CR2 NACK LL_FMPI2C_AcknowledgeNextData
1932 * @param FMPI2Cx FMPI2C Instance.
1933 * @param TypeAcknowledge This parameter can be one of the following values:
1934 * @arg @ref LL_FMPI2C_ACK
1935 * @arg @ref LL_FMPI2C_NACK
1936 * @retval None
1937 */
LL_FMPI2C_AcknowledgeNextData(FMPI2C_TypeDef * FMPI2Cx,uint32_t TypeAcknowledge)1938 __STATIC_INLINE void LL_FMPI2C_AcknowledgeNextData(FMPI2C_TypeDef *FMPI2Cx, uint32_t TypeAcknowledge)
1939 {
1940 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_NACK, TypeAcknowledge);
1941 }
1942
1943 /**
1944 * @brief Generate a START or RESTART condition
1945 * @note The START bit can be set even if bus is BUSY or FMPI2C is in slave mode.
1946 * This action has no effect when RELOAD is set.
1947 * @rmtoll CR2 START LL_FMPI2C_GenerateStartCondition
1948 * @param FMPI2Cx FMPI2C Instance.
1949 * @retval None
1950 */
LL_FMPI2C_GenerateStartCondition(FMPI2C_TypeDef * FMPI2Cx)1951 __STATIC_INLINE void LL_FMPI2C_GenerateStartCondition(FMPI2C_TypeDef *FMPI2Cx)
1952 {
1953 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_START);
1954 }
1955
1956 /**
1957 * @brief Generate a STOP condition after the current byte transfer (master mode).
1958 * @rmtoll CR2 STOP LL_FMPI2C_GenerateStopCondition
1959 * @param FMPI2Cx FMPI2C Instance.
1960 * @retval None
1961 */
LL_FMPI2C_GenerateStopCondition(FMPI2C_TypeDef * FMPI2Cx)1962 __STATIC_INLINE void LL_FMPI2C_GenerateStopCondition(FMPI2C_TypeDef *FMPI2Cx)
1963 {
1964 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_STOP);
1965 }
1966
1967 /**
1968 * @brief Enable automatic RESTART Read request condition for 10bit address header (master mode).
1969 * @note The master sends the complete 10bit slave address read sequence :
1970 * Start + 2 bytes 10bit address in Write direction + Restart + first 7 bits of 10bit address
1971 in Read direction.
1972 * @rmtoll CR2 HEAD10R LL_FMPI2C_EnableAuto10BitRead
1973 * @param FMPI2Cx FMPI2C Instance.
1974 * @retval None
1975 */
LL_FMPI2C_EnableAuto10BitRead(FMPI2C_TypeDef * FMPI2Cx)1976 __STATIC_INLINE void LL_FMPI2C_EnableAuto10BitRead(FMPI2C_TypeDef *FMPI2Cx)
1977 {
1978 CLEAR_BIT(FMPI2Cx->CR2, FMPI2C_CR2_HEAD10R);
1979 }
1980
1981 /**
1982 * @brief Disable automatic RESTART Read request condition for 10bit address header (master mode).
1983 * @note The master only sends the first 7 bits of 10bit address in Read direction.
1984 * @rmtoll CR2 HEAD10R LL_FMPI2C_DisableAuto10BitRead
1985 * @param FMPI2Cx FMPI2C Instance.
1986 * @retval None
1987 */
LL_FMPI2C_DisableAuto10BitRead(FMPI2C_TypeDef * FMPI2Cx)1988 __STATIC_INLINE void LL_FMPI2C_DisableAuto10BitRead(FMPI2C_TypeDef *FMPI2Cx)
1989 {
1990 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_HEAD10R);
1991 }
1992
1993 /**
1994 * @brief Check if automatic RESTART Read request condition for 10bit address header is enabled or disabled.
1995 * @rmtoll CR2 HEAD10R LL_FMPI2C_IsEnabledAuto10BitRead
1996 * @param FMPI2Cx FMPI2C Instance.
1997 * @retval State of bit (1 or 0).
1998 */
LL_FMPI2C_IsEnabledAuto10BitRead(FMPI2C_TypeDef * FMPI2Cx)1999 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledAuto10BitRead(FMPI2C_TypeDef *FMPI2Cx)
2000 {
2001 return ((READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_HEAD10R) != (FMPI2C_CR2_HEAD10R)) ? 1UL : 0UL);
2002 }
2003
2004 /**
2005 * @brief Configure the transfer direction (master mode).
2006 * @note Changing these bits when START bit is set is not allowed.
2007 * @rmtoll CR2 RD_WRN LL_FMPI2C_SetTransferRequest
2008 * @param FMPI2Cx FMPI2C Instance.
2009 * @param TransferRequest This parameter can be one of the following values:
2010 * @arg @ref LL_FMPI2C_REQUEST_WRITE
2011 * @arg @ref LL_FMPI2C_REQUEST_READ
2012 * @retval None
2013 */
LL_FMPI2C_SetTransferRequest(FMPI2C_TypeDef * FMPI2Cx,uint32_t TransferRequest)2014 __STATIC_INLINE void LL_FMPI2C_SetTransferRequest(FMPI2C_TypeDef *FMPI2Cx, uint32_t TransferRequest)
2015 {
2016 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_RD_WRN, TransferRequest);
2017 }
2018
2019 /**
2020 * @brief Get the transfer direction requested (master mode).
2021 * @rmtoll CR2 RD_WRN LL_FMPI2C_GetTransferRequest
2022 * @param FMPI2Cx FMPI2C Instance.
2023 * @retval Returned value can be one of the following values:
2024 * @arg @ref LL_FMPI2C_REQUEST_WRITE
2025 * @arg @ref LL_FMPI2C_REQUEST_READ
2026 */
LL_FMPI2C_GetTransferRequest(FMPI2C_TypeDef * FMPI2Cx)2027 __STATIC_INLINE uint32_t LL_FMPI2C_GetTransferRequest(FMPI2C_TypeDef *FMPI2Cx)
2028 {
2029 return (uint32_t)(READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_RD_WRN));
2030 }
2031
2032 /**
2033 * @brief Configure the slave address for transfer (master mode).
2034 * @note Changing these bits when START bit is set is not allowed.
2035 * @rmtoll CR2 SADD LL_FMPI2C_SetSlaveAddr
2036 * @param FMPI2Cx FMPI2C Instance.
2037 * @param SlaveAddr This parameter must be a value between Min_Data=0x00 and Max_Data=0x3F.
2038 * @retval None
2039 */
LL_FMPI2C_SetSlaveAddr(FMPI2C_TypeDef * FMPI2Cx,uint32_t SlaveAddr)2040 __STATIC_INLINE void LL_FMPI2C_SetSlaveAddr(FMPI2C_TypeDef *FMPI2Cx, uint32_t SlaveAddr)
2041 {
2042 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_SADD, SlaveAddr);
2043 }
2044
2045 /**
2046 * @brief Get the slave address programmed for transfer.
2047 * @rmtoll CR2 SADD LL_FMPI2C_GetSlaveAddr
2048 * @param FMPI2Cx FMPI2C Instance.
2049 * @retval Value between Min_Data=0x0 and Max_Data=0x3F
2050 */
LL_FMPI2C_GetSlaveAddr(FMPI2C_TypeDef * FMPI2Cx)2051 __STATIC_INLINE uint32_t LL_FMPI2C_GetSlaveAddr(FMPI2C_TypeDef *FMPI2Cx)
2052 {
2053 return (uint32_t)(READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_SADD));
2054 }
2055
2056 /**
2057 * @brief Handles FMPI2Cx communication when starting transfer or during transfer (TC or TCR flag are set).
2058 * @rmtoll CR2 SADD LL_FMPI2C_HandleTransfer\n
2059 * CR2 ADD10 LL_FMPI2C_HandleTransfer\n
2060 * CR2 RD_WRN LL_FMPI2C_HandleTransfer\n
2061 * CR2 START LL_FMPI2C_HandleTransfer\n
2062 * CR2 STOP LL_FMPI2C_HandleTransfer\n
2063 * CR2 RELOAD LL_FMPI2C_HandleTransfer\n
2064 * CR2 NBYTES LL_FMPI2C_HandleTransfer\n
2065 * CR2 AUTOEND LL_FMPI2C_HandleTransfer\n
2066 * CR2 HEAD10R LL_FMPI2C_HandleTransfer
2067 * @param FMPI2Cx FMPI2C Instance.
2068 * @param SlaveAddr Specifies the slave address to be programmed.
2069 * @param SlaveAddrSize This parameter can be one of the following values:
2070 * @arg @ref LL_FMPI2C_ADDRSLAVE_7BIT
2071 * @arg @ref LL_FMPI2C_ADDRSLAVE_10BIT
2072 * @param TransferSize Specifies the number of bytes to be programmed.
2073 * This parameter must be a value between Min_Data=0 and Max_Data=255.
2074 * @param EndMode This parameter can be one of the following values:
2075 * @arg @ref LL_FMPI2C_MODE_RELOAD
2076 * @arg @ref LL_FMPI2C_MODE_AUTOEND
2077 * @arg @ref LL_FMPI2C_MODE_SOFTEND
2078 * @arg @ref LL_FMPI2C_MODE_SMBUS_RELOAD
2079 * @arg @ref LL_FMPI2C_MODE_SMBUS_AUTOEND_NO_PEC
2080 * @arg @ref LL_FMPI2C_MODE_SMBUS_SOFTEND_NO_PEC
2081 * @arg @ref LL_FMPI2C_MODE_SMBUS_AUTOEND_WITH_PEC
2082 * @arg @ref LL_FMPI2C_MODE_SMBUS_SOFTEND_WITH_PEC
2083 * @param Request This parameter can be one of the following values:
2084 * @arg @ref LL_FMPI2C_GENERATE_NOSTARTSTOP
2085 * @arg @ref LL_FMPI2C_GENERATE_STOP
2086 * @arg @ref LL_FMPI2C_GENERATE_START_READ
2087 * @arg @ref LL_FMPI2C_GENERATE_START_WRITE
2088 * @arg @ref LL_FMPI2C_GENERATE_RESTART_7BIT_READ
2089 * @arg @ref LL_FMPI2C_GENERATE_RESTART_7BIT_WRITE
2090 * @arg @ref LL_FMPI2C_GENERATE_RESTART_10BIT_READ
2091 * @arg @ref LL_FMPI2C_GENERATE_RESTART_10BIT_WRITE
2092 * @retval None
2093 */
LL_FMPI2C_HandleTransfer(FMPI2C_TypeDef * FMPI2Cx,uint32_t SlaveAddr,uint32_t SlaveAddrSize,uint32_t TransferSize,uint32_t EndMode,uint32_t Request)2094 __STATIC_INLINE void LL_FMPI2C_HandleTransfer(FMPI2C_TypeDef *FMPI2Cx, uint32_t SlaveAddr, uint32_t SlaveAddrSize,
2095 uint32_t TransferSize, uint32_t EndMode, uint32_t Request)
2096 {
2097 MODIFY_REG(FMPI2Cx->CR2, FMPI2C_CR2_SADD | FMPI2C_CR2_ADD10 |
2098 (FMPI2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - FMPI2C_CR2_RD_WRN_Pos))) |
2099 FMPI2C_CR2_START | FMPI2C_CR2_STOP | FMPI2C_CR2_RELOAD |
2100 FMPI2C_CR2_NBYTES | FMPI2C_CR2_AUTOEND | FMPI2C_CR2_HEAD10R,
2101 SlaveAddr | SlaveAddrSize | (TransferSize << FMPI2C_CR2_NBYTES_Pos) | EndMode | Request);
2102 }
2103
2104 /**
2105 * @brief Indicate the value of transfer direction (slave mode).
2106 * @note RESET: Write transfer, Slave enters in receiver mode.
2107 * SET: Read transfer, Slave enters in transmitter mode.
2108 * @rmtoll ISR DIR LL_FMPI2C_GetTransferDirection
2109 * @param FMPI2Cx FMPI2C Instance.
2110 * @retval Returned value can be one of the following values:
2111 * @arg @ref LL_FMPI2C_DIRECTION_WRITE
2112 * @arg @ref LL_FMPI2C_DIRECTION_READ
2113 */
LL_FMPI2C_GetTransferDirection(FMPI2C_TypeDef * FMPI2Cx)2114 __STATIC_INLINE uint32_t LL_FMPI2C_GetTransferDirection(FMPI2C_TypeDef *FMPI2Cx)
2115 {
2116 return (uint32_t)(READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_DIR));
2117 }
2118
2119 /**
2120 * @brief Return the slave matched address.
2121 * @rmtoll ISR ADDCODE LL_FMPI2C_GetAddressMatchCode
2122 * @param FMPI2Cx FMPI2C Instance.
2123 * @retval Value between Min_Data=0x00 and Max_Data=0x3F
2124 */
LL_FMPI2C_GetAddressMatchCode(FMPI2C_TypeDef * FMPI2Cx)2125 __STATIC_INLINE uint32_t LL_FMPI2C_GetAddressMatchCode(FMPI2C_TypeDef *FMPI2Cx)
2126 {
2127 return (uint32_t)(READ_BIT(FMPI2Cx->ISR, FMPI2C_ISR_ADDCODE) >> FMPI2C_ISR_ADDCODE_Pos << 1);
2128 }
2129
2130 /**
2131 * @brief Enable internal comparison of the SMBus Packet Error byte (transmission or reception mode).
2132 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
2133 * SMBus feature is supported by the FMPI2Cx Instance.
2134 * @note This feature is cleared by hardware when the PEC byte is transferred, or when a STOP condition
2135 or an Address Matched is received.
2136 * This bit has no effect when RELOAD bit is set.
2137 * This bit has no effect in device mode when SBC bit is not set.
2138 * @rmtoll CR2 PECBYTE LL_FMPI2C_EnableSMBusPECCompare
2139 * @param FMPI2Cx FMPI2C Instance.
2140 * @retval None
2141 */
LL_FMPI2C_EnableSMBusPECCompare(FMPI2C_TypeDef * FMPI2Cx)2142 __STATIC_INLINE void LL_FMPI2C_EnableSMBusPECCompare(FMPI2C_TypeDef *FMPI2Cx)
2143 {
2144 SET_BIT(FMPI2Cx->CR2, FMPI2C_CR2_PECBYTE);
2145 }
2146
2147 /**
2148 * @brief Check if the SMBus Packet Error byte internal comparison is requested or not.
2149 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
2150 * SMBus feature is supported by the FMPI2Cx Instance.
2151 * @rmtoll CR2 PECBYTE LL_FMPI2C_IsEnabledSMBusPECCompare
2152 * @param FMPI2Cx FMPI2C Instance.
2153 * @retval State of bit (1 or 0).
2154 */
LL_FMPI2C_IsEnabledSMBusPECCompare(FMPI2C_TypeDef * FMPI2Cx)2155 __STATIC_INLINE uint32_t LL_FMPI2C_IsEnabledSMBusPECCompare(FMPI2C_TypeDef *FMPI2Cx)
2156 {
2157 return ((READ_BIT(FMPI2Cx->CR2, FMPI2C_CR2_PECBYTE) == (FMPI2C_CR2_PECBYTE)) ? 1UL : 0UL);
2158 }
2159
2160 /**
2161 * @brief Get the SMBus Packet Error byte calculated.
2162 * @note The macro IS_FMPSMBUS_ALL_INSTANCE(FMPI2Cx) can be used to check whether or not
2163 * SMBus feature is supported by the FMPI2Cx Instance.
2164 * @rmtoll PECR PEC LL_FMPI2C_GetSMBusPEC
2165 * @param FMPI2Cx FMPI2C Instance.
2166 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
2167 */
LL_FMPI2C_GetSMBusPEC(FMPI2C_TypeDef * FMPI2Cx)2168 __STATIC_INLINE uint32_t LL_FMPI2C_GetSMBusPEC(FMPI2C_TypeDef *FMPI2Cx)
2169 {
2170 return (uint32_t)(READ_BIT(FMPI2Cx->PECR, FMPI2C_PECR_PEC));
2171 }
2172
2173 /**
2174 * @brief Read Receive Data register.
2175 * @rmtoll RXDR RXDATA LL_FMPI2C_ReceiveData8
2176 * @param FMPI2Cx FMPI2C Instance.
2177 * @retval Value between Min_Data=0x00 and Max_Data=0xFF
2178 */
LL_FMPI2C_ReceiveData8(FMPI2C_TypeDef * FMPI2Cx)2179 __STATIC_INLINE uint8_t LL_FMPI2C_ReceiveData8(FMPI2C_TypeDef *FMPI2Cx)
2180 {
2181 return (uint8_t)(READ_BIT(FMPI2Cx->RXDR, FMPI2C_RXDR_RXDATA));
2182 }
2183
2184 /**
2185 * @brief Write in Transmit Data Register .
2186 * @rmtoll TXDR TXDATA LL_FMPI2C_TransmitData8
2187 * @param FMPI2Cx FMPI2C Instance.
2188 * @param Data Value between Min_Data=0x00 and Max_Data=0xFF
2189 * @retval None
2190 */
LL_FMPI2C_TransmitData8(FMPI2C_TypeDef * FMPI2Cx,uint8_t Data)2191 __STATIC_INLINE void LL_FMPI2C_TransmitData8(FMPI2C_TypeDef *FMPI2Cx, uint8_t Data)
2192 {
2193 WRITE_REG(FMPI2Cx->TXDR, Data);
2194 }
2195
2196 /**
2197 * @}
2198 */
2199
2200 #if defined(USE_FULL_LL_DRIVER)
2201 /** @defgroup FMPI2C_LL_EF_Init Initialization and de-initialization functions
2202 * @{
2203 */
2204
2205 ErrorStatus LL_FMPI2C_Init(FMPI2C_TypeDef *FMPI2Cx, LL_FMPI2C_InitTypeDef *FMPI2C_InitStruct);
2206 ErrorStatus LL_FMPI2C_DeInit(FMPI2C_TypeDef *FMPI2Cx);
2207 void LL_FMPI2C_StructInit(LL_FMPI2C_InitTypeDef *FMPI2C_InitStruct);
2208
2209
2210 /**
2211 * @}
2212 */
2213 #endif /* USE_FULL_LL_DRIVER */
2214
2215 /**
2216 * @}
2217 */
2218
2219 /**
2220 * @}
2221 */
2222
2223 #endif /* FMPI2C1 */
2224
2225 /**
2226 * @}
2227 */
2228
2229 #endif /* FMPI2C_CR1_PE */
2230 #ifdef __cplusplus
2231 }
2232 #endif
2233
2234 #endif /* STM32F4xx_LL_FMPI2C_H */
2235