Subversion Repositories AFRtranscoder

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_ll_i2c.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of I2C 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 __STM32F1xx_LL_I2C_H
  21. #define __STM32F1xx_LL_I2C_H
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. /* Includes ------------------------------------------------------------------*/
  28. #include "stm32f1xx.h"
  29.  
  30. /** @addtogroup STM32F1xx_LL_Driver
  31.   * @{
  32.   */
  33.  
  34. #if defined (I2C1) || defined (I2C2)
  35.  
  36. /** @defgroup I2C_LL I2C
  37.   * @{
  38.   */
  39.  
  40. /* Private types -------------------------------------------------------------*/
  41. /* Private variables ---------------------------------------------------------*/
  42.  
  43. /* Private constants ---------------------------------------------------------*/
  44. /** @defgroup I2C_LL_Private_Constants I2C Private Constants
  45.   * @{
  46.   */
  47.  
  48. /* Defines used to perform compute and check in the macros */
  49. #define LL_I2C_MAX_SPEED_STANDARD           100000U
  50. #define LL_I2C_MAX_SPEED_FAST               400000U
  51. /**
  52.   * @}
  53.   */
  54.  
  55. /* Private macros ------------------------------------------------------------*/
  56. #if defined(USE_FULL_LL_DRIVER)
  57. /** @defgroup I2C_LL_Private_Macros I2C Private Macros
  58.   * @{
  59.   */
  60. /**
  61.   * @}
  62.   */
  63. #endif /*USE_FULL_LL_DRIVER*/
  64.  
  65. /* Exported types ------------------------------------------------------------*/
  66. #if defined(USE_FULL_LL_DRIVER)
  67. /** @defgroup I2C_LL_ES_INIT I2C Exported Init structure
  68.   * @{
  69.   */
  70. typedef struct
  71. {
  72.   uint32_t PeripheralMode;      /*!< Specifies the peripheral mode.
  73.                                      This parameter can be a value of @ref I2C_LL_EC_PERIPHERAL_MODE
  74.  
  75.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_SetMode(). */
  76.  
  77.   uint32_t ClockSpeed;          /*!< Specifies the clock frequency.
  78.                                      This parameter must be set to a value lower than 400kHz (in Hz)
  79.  
  80.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_SetClockPeriod()
  81.                                      or @ref LL_I2C_SetDutyCycle() or @ref LL_I2C_SetClockSpeedMode() or @ref LL_I2C_ConfigSpeed(). */
  82.  
  83.   uint32_t DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
  84.                                      This parameter can be a value of @ref I2C_LL_EC_DUTYCYCLE
  85.  
  86.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_SetDutyCycle(). */
  87.  
  88.   uint32_t OwnAddress1;         /*!< Specifies the device own address 1.
  89.                                      This parameter must be a value between Min_Data = 0x00 and Max_Data = 0x3FF
  90.  
  91.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */
  92.  
  93.   uint32_t TypeAcknowledge;     /*!< Specifies the ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte.
  94.                                      This parameter can be a value of @ref I2C_LL_EC_I2C_ACKNOWLEDGE
  95.  
  96.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_AcknowledgeNextData(). */
  97.  
  98.   uint32_t OwnAddrSize;         /*!< Specifies the device own address 1 size (7-bit or 10-bit).
  99.                                      This parameter can be a value of @ref I2C_LL_EC_OWNADDRESS1
  100.  
  101.                                      This feature can be modified afterwards using unitary function @ref LL_I2C_SetOwnAddress1(). */
  102. } LL_I2C_InitTypeDef;
  103. /**
  104.   * @}
  105.   */
  106. #endif /*USE_FULL_LL_DRIVER*/
  107.  
  108. /* Exported constants --------------------------------------------------------*/
  109. /** @defgroup I2C_LL_Exported_Constants I2C Exported Constants
  110.   * @{
  111.   */
  112.  
  113. /** @defgroup I2C_LL_EC_GET_FLAG Get Flags Defines
  114.   * @brief    Flags defines which can be used with LL_I2C_ReadReg function
  115.   * @{
  116.   */
  117. #define LL_I2C_SR1_SB                       I2C_SR1_SB              /*!< Start Bit (master mode)                   */
  118. #define LL_I2C_SR1_ADDR                     I2C_SR1_ADDR            /*!< Address sent (master mode) or
  119.                                                                          Address matched flag (slave mode)         */
  120. #define LL_I2C_SR1_BTF                      I2C_SR1_BTF             /*!< Byte Transfer Finished flag               */
  121. #define LL_I2C_SR1_ADD10                    I2C_SR1_ADD10           /*!< 10-bit header sent (master mode)          */
  122. #define LL_I2C_SR1_STOPF                    I2C_SR1_STOPF           /*!< Stop detection flag (slave mode)          */
  123. #define LL_I2C_SR1_RXNE                     I2C_SR1_RXNE            /*!< Data register not empty (receivers)       */
  124. #define LL_I2C_SR1_TXE                      I2C_SR1_TXE             /*!< Data register empty (transmitters)        */
  125. #define LL_I2C_SR1_BERR                     I2C_SR1_BERR            /*!< Bus error                                 */
  126. #define LL_I2C_SR1_ARLO                     I2C_SR1_ARLO            /*!< Arbitration lost                          */
  127. #define LL_I2C_SR1_AF                       I2C_SR1_AF              /*!< Acknowledge failure flag                  */
  128. #define LL_I2C_SR1_OVR                      I2C_SR1_OVR             /*!< Overrun/Underrun                          */
  129. #define LL_I2C_SR1_PECERR                   I2C_ISR_PECERR          /*!< PEC Error in reception (SMBus mode)       */
  130. #define LL_I2C_SR1_TIMEOUT                  I2C_ISR_TIMEOUT         /*!< Timeout detection flag (SMBus mode)       */
  131. #define LL_I2C_SR1_SMALERT                  I2C_ISR_SMALERT         /*!< SMBus alert (SMBus mode)                  */
  132. #define LL_I2C_SR2_MSL                      I2C_SR2_MSL             /*!< Master/Slave flag                         */
  133. #define LL_I2C_SR2_BUSY                     I2C_SR2_BUSY            /*!< Bus busy flag                             */
  134. #define LL_I2C_SR2_TRA                      I2C_SR2_TRA             /*!< Transmitter/receiver direction            */
  135. #define LL_I2C_SR2_GENCALL                  I2C_SR2_GENCALL         /*!< General call address (Slave mode)         */
  136. #define LL_I2C_SR2_SMBDEFAULT               I2C_SR2_SMBDEFAULT      /*!< SMBus Device default address (Slave mode) */
  137. #define LL_I2C_SR2_SMBHOST                  I2C_SR2_SMBHOST         /*!< SMBus Host address (Slave mode)           */
  138. #define LL_I2C_SR2_DUALF                    I2C_SR2_DUALF           /*!< Dual flag  (Slave mode)                   */
  139. /**
  140.   * @}
  141.   */
  142.  
  143. /** @defgroup I2C_LL_EC_IT IT Defines
  144.   * @brief    IT defines which can be used with LL_I2C_ReadReg and  LL_I2C_WriteReg functions
  145.   * @{
  146.   */
  147. #define LL_I2C_CR2_ITEVTEN                  I2C_CR2_ITEVTEN         /*!< Events interrupts enable */
  148. #define LL_I2C_CR2_ITBUFEN                  I2C_CR2_ITBUFEN         /*!< Buffer interrupts enable */
  149. #define LL_I2C_CR2_ITERREN                  I2C_CR2_ITERREN         /*!< Error interrupts enable  */
  150. /**
  151.   * @}
  152.   */
  153.  
  154. /** @defgroup I2C_LL_EC_OWNADDRESS1 Own Address 1 Length
  155.   * @{
  156.   */
  157. #define LL_I2C_OWNADDRESS1_7BIT             0x00004000U                                /*!< Own address 1 is a 7-bit address.   */
  158. #define LL_I2C_OWNADDRESS1_10BIT            (uint32_t)(I2C_OAR1_ADDMODE | 0x00004000U) /*!< Own address 1 is a 10-bit address.  */
  159. /**
  160.   * @}
  161.   */
  162.  
  163. /** @defgroup I2C_LL_EC_DUTYCYCLE Fast Mode Duty Cycle
  164.   * @{
  165.   */
  166. #define LL_I2C_DUTYCYCLE_2                  0x00000000U             /*!< I2C fast mode Tlow/Thigh = 2        */
  167. #define LL_I2C_DUTYCYCLE_16_9               I2C_CCR_DUTY            /*!< I2C fast mode Tlow/Thigh = 16/9     */
  168. /**
  169.   * @}
  170.   */
  171.  
  172. /** @defgroup I2C_LL_EC_CLOCK_SPEED_MODE Master Clock Speed Mode
  173.   * @{
  174.   */
  175. #define LL_I2C_CLOCK_SPEED_STANDARD_MODE    0x00000000U             /*!< Master clock speed range is standard mode */
  176. #define LL_I2C_CLOCK_SPEED_FAST_MODE        I2C_CCR_FS              /*!< Master clock speed range is fast mode     */
  177. /**
  178.   * @}
  179.   */
  180.  
  181. /** @defgroup I2C_LL_EC_PERIPHERAL_MODE Peripheral Mode
  182.   * @{
  183.   */
  184. #define LL_I2C_MODE_I2C                     0x00000000U                                                 /*!< I2C Master or Slave mode                                    */
  185. #define LL_I2C_MODE_SMBUS_HOST              (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP) /*!< SMBus Host address acknowledge                              */
  186. #define LL_I2C_MODE_SMBUS_DEVICE            I2C_CR1_SMBUS                                               /*!< SMBus Device default mode (Default address not acknowledge) */
  187. #define LL_I2C_MODE_SMBUS_DEVICE_ARP        (uint32_t)(I2C_CR1_SMBUS | I2C_CR1_ENARP)                   /*!< SMBus Device Default address acknowledge                    */
  188. /**
  189.   * @}
  190.   */
  191.  
  192. /** @defgroup I2C_LL_EC_I2C_ACKNOWLEDGE Acknowledge Generation
  193.   * @{
  194.   */
  195. #define LL_I2C_ACK                          I2C_CR1_ACK             /*!< ACK is sent after current received byte. */
  196. #define LL_I2C_NACK                         0x00000000U             /*!< NACK is sent after current received byte.*/
  197. /**
  198.   * @}
  199.   */
  200.  
  201. /** @defgroup I2C_LL_EC_DIRECTION Read Write Direction
  202.   * @{
  203.   */
  204. #define LL_I2C_DIRECTION_WRITE              I2C_SR2_TRA             /*!< Bus is in write transfer */
  205. #define LL_I2C_DIRECTION_READ               0x00000000U             /*!< Bus is in read transfer  */
  206. /**
  207.   * @}
  208.   */
  209.  
  210. /**
  211.   * @}
  212.   */
  213.  
  214. /* Exported macro ------------------------------------------------------------*/
  215. /** @defgroup I2C_LL_Exported_Macros I2C Exported Macros
  216.   * @{
  217.   */
  218.  
  219. /** @defgroup I2C_LL_EM_WRITE_READ Common Write and read registers Macros
  220.   * @{
  221.   */
  222.  
  223. /**
  224.   * @brief  Write a value in I2C register
  225.   * @param  __INSTANCE__ I2C Instance
  226.   * @param  __REG__ Register to be written
  227.   * @param  __VALUE__ Value to be written in the register
  228.   * @retval None
  229.   */
  230. #define LL_I2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  231.  
  232. /**
  233.   * @brief  Read a value in I2C register
  234.   * @param  __INSTANCE__ I2C Instance
  235.   * @param  __REG__ Register to be read
  236.   * @retval Register value
  237.   */
  238. #define LL_I2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  239. /**
  240.   * @}
  241.   */
  242.  
  243. /** @defgroup I2C_LL_EM_Exported_Macros_Helper Exported Macros Helper
  244.   * @{
  245.   */
  246.  
  247. /**
  248.   * @brief  Convert Peripheral Clock Frequency in Mhz.
  249.   * @param  __PCLK__ This parameter must be a value of peripheral clock (in Hz).
  250.   * @retval Value of peripheral clock (in Mhz)
  251.   */
  252. #define __LL_I2C_FREQ_HZ_TO_MHZ(__PCLK__)                               (uint32_t)((__PCLK__)/1000000U)
  253.  
  254. /**
  255.   * @brief  Convert Peripheral Clock Frequency in Hz.
  256.   * @param  __PCLK__ This parameter must be a value of peripheral clock (in Mhz).
  257.   * @retval Value of peripheral clock (in Hz)
  258.   */
  259. #define __LL_I2C_FREQ_MHZ_TO_HZ(__PCLK__)                               (uint32_t)((__PCLK__)*1000000U)
  260.  
  261. /**
  262.   * @brief  Compute I2C Clock rising time.
  263.   * @param  __FREQRANGE__ This parameter must be a value of peripheral clock (in Mhz).
  264.   * @param  __SPEED__ This parameter must be a value lower than 400kHz (in Hz).
  265.   * @retval Value between Min_Data=0x02 and Max_Data=0x3F
  266.   */
  267. #define __LL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__)                    (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U))
  268.  
  269. /**
  270.   * @brief  Compute Speed clock range to a Clock Control Register (I2C_CCR_CCR) value.
  271.   * @param  __PCLK__ This parameter must be a value of peripheral clock (in Hz).
  272.   * @param  __SPEED__ This parameter must be a value lower than 400kHz (in Hz).
  273.   * @param  __DUTYCYCLE__ This parameter can be one of the following values:
  274.   *         @arg @ref LL_I2C_DUTYCYCLE_2
  275.   *         @arg @ref LL_I2C_DUTYCYCLE_16_9
  276.   * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
  277.   */
  278. #define __LL_I2C_SPEED_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__)       (uint32_t)(((__SPEED__) <= LL_I2C_MAX_SPEED_STANDARD)? \
  279.                                                                                   (__LL_I2C_SPEED_STANDARD_TO_CCR((__PCLK__), (__SPEED__))) : \
  280.                                                                                   (__LL_I2C_SPEED_FAST_TO_CCR((__PCLK__), (__SPEED__), (__DUTYCYCLE__))))
  281.  
  282. /**
  283.   * @brief  Compute Speed Standard clock range to a Clock Control Register (I2C_CCR_CCR) value.
  284.   * @param  __PCLK__ This parameter must be a value of peripheral clock (in Hz).
  285.   * @param  __SPEED__ This parameter must be a value lower than 100kHz (in Hz).
  286.   * @retval Value between Min_Data=0x004 and Max_Data=0xFFF.
  287.   */
  288. #define __LL_I2C_SPEED_STANDARD_TO_CCR(__PCLK__, __SPEED__)             (uint32_t)(((((__PCLK__)/((__SPEED__) << 1U)) & I2C_CCR_CCR) < 4U)? 4U:((__PCLK__) / ((__SPEED__) << 1U)))
  289.  
  290. /**
  291.   * @brief  Compute Speed Fast clock range to a Clock Control Register (I2C_CCR_CCR) value.
  292.   * @param  __PCLK__ This parameter must be a value of peripheral clock (in Hz).
  293.   * @param  __SPEED__ This parameter must be a value between Min_Data=100Khz and Max_Data=400Khz (in Hz).
  294.   * @param  __DUTYCYCLE__ This parameter can be one of the following values:
  295.   *         @arg @ref LL_I2C_DUTYCYCLE_2
  296.   *         @arg @ref LL_I2C_DUTYCYCLE_16_9
  297.   * @retval Value between Min_Data=0x001 and Max_Data=0xFFF
  298.   */
  299. #define __LL_I2C_SPEED_FAST_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__)  (uint32_t)(((__DUTYCYCLE__) == LL_I2C_DUTYCYCLE_2)? \
  300.                                                                             (((((__PCLK__) / ((__SPEED__) * 3U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 3U))) : \
  301.                                                                             (((((__PCLK__) / ((__SPEED__) * 25U)) & I2C_CCR_CCR) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 25U))))
  302.  
  303. /**
  304.   * @brief  Get the Least significant bits of a 10-Bits address.
  305.   * @param  __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
  306.   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
  307.   */
  308. #define __LL_I2C_10BIT_ADDRESS(__ADDRESS__)                             ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
  309.  
  310. /**
  311.   * @brief  Convert a 10-Bits address to a 10-Bits header with Write direction.
  312.   * @param  __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
  313.   * @retval Value between Min_Data=0xF0 and Max_Data=0xF6
  314.   */
  315. #define __LL_I2C_10BIT_HEADER_WRITE(__ADDRESS__)                        ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0))))
  316.  
  317. /**
  318.   * @brief  Convert a 10-Bits address to a 10-Bits header with Read direction.
  319.   * @param  __ADDRESS__ This parameter must be a value of a 10-Bits slave address.
  320.   * @retval Value between Min_Data=0xF1 and Max_Data=0xF7
  321.   */
  322. #define __LL_I2C_10BIT_HEADER_READ(__ADDRESS__)                         ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1))))
  323.  
  324. /**
  325.   * @}
  326.   */
  327.  
  328. /**
  329.   * @}
  330.   */
  331.  
  332. /* Exported functions --------------------------------------------------------*/
  333.  
  334. /** @defgroup I2C_LL_Exported_Functions I2C Exported Functions
  335.   * @{
  336.   */
  337.  
  338. /** @defgroup I2C_LL_EF_Configuration Configuration
  339.   * @{
  340.   */
  341.  
  342. /**
  343.   * @brief  Enable I2C peripheral (PE = 1).
  344.   * @rmtoll CR1          PE            LL_I2C_Enable
  345.   * @param  I2Cx I2C Instance.
  346.   * @retval None
  347.   */
  348. __STATIC_INLINE void LL_I2C_Enable(I2C_TypeDef *I2Cx)
  349. {
  350.   SET_BIT(I2Cx->CR1, I2C_CR1_PE);
  351. }
  352.  
  353. /**
  354.   * @brief  Disable I2C peripheral (PE = 0).
  355.   * @rmtoll CR1          PE            LL_I2C_Disable
  356.   * @param  I2Cx I2C Instance.
  357.   * @retval None
  358.   */
  359. __STATIC_INLINE void LL_I2C_Disable(I2C_TypeDef *I2Cx)
  360. {
  361.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_PE);
  362. }
  363.  
  364. /**
  365.   * @brief  Check if the I2C peripheral is enabled or disabled.
  366.   * @rmtoll CR1          PE            LL_I2C_IsEnabled
  367.   * @param  I2Cx I2C Instance.
  368.   * @retval State of bit (1 or 0).
  369.   */
  370. __STATIC_INLINE uint32_t LL_I2C_IsEnabled(I2C_TypeDef *I2Cx)
  371. {
  372.   return (READ_BIT(I2Cx->CR1, I2C_CR1_PE) == (I2C_CR1_PE));
  373. }
  374.  
  375.  
  376. /**
  377.   * @brief  Enable DMA transmission requests.
  378.   * @rmtoll CR2          DMAEN         LL_I2C_EnableDMAReq_TX
  379.   * @param  I2Cx I2C Instance.
  380.   * @retval None
  381.   */
  382. __STATIC_INLINE void LL_I2C_EnableDMAReq_TX(I2C_TypeDef *I2Cx)
  383. {
  384.   SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
  385. }
  386.  
  387. /**
  388.   * @brief  Disable DMA transmission requests.
  389.   * @rmtoll CR2          DMAEN         LL_I2C_DisableDMAReq_TX
  390.   * @param  I2Cx I2C Instance.
  391.   * @retval None
  392.   */
  393. __STATIC_INLINE void LL_I2C_DisableDMAReq_TX(I2C_TypeDef *I2Cx)
  394. {
  395.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
  396. }
  397.  
  398. /**
  399.   * @brief  Check if DMA transmission requests are enabled or disabled.
  400.   * @rmtoll CR2          DMAEN         LL_I2C_IsEnabledDMAReq_TX
  401.   * @param  I2Cx I2C Instance.
  402.   * @retval State of bit (1 or 0).
  403.   */
  404. __STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef *I2Cx)
  405. {
  406.   return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN));
  407. }
  408.  
  409. /**
  410.   * @brief  Enable DMA reception requests.
  411.   * @rmtoll CR2          DMAEN         LL_I2C_EnableDMAReq_RX
  412.   * @param  I2Cx I2C Instance.
  413.   * @retval None
  414.   */
  415. __STATIC_INLINE void LL_I2C_EnableDMAReq_RX(I2C_TypeDef *I2Cx)
  416. {
  417.   SET_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
  418. }
  419.  
  420. /**
  421.   * @brief  Disable DMA reception requests.
  422.   * @rmtoll CR2          DMAEN         LL_I2C_DisableDMAReq_RX
  423.   * @param  I2Cx I2C Instance.
  424.   * @retval None
  425.   */
  426. __STATIC_INLINE void LL_I2C_DisableDMAReq_RX(I2C_TypeDef *I2Cx)
  427. {
  428.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_DMAEN);
  429. }
  430.  
  431. /**
  432.   * @brief  Check if DMA reception requests are enabled or disabled.
  433.   * @rmtoll CR2          DMAEN         LL_I2C_IsEnabledDMAReq_RX
  434.   * @param  I2Cx I2C Instance.
  435.   * @retval State of bit (1 or 0).
  436.   */
  437. __STATIC_INLINE uint32_t LL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef *I2Cx)
  438. {
  439.   return (READ_BIT(I2Cx->CR2, I2C_CR2_DMAEN) == (I2C_CR2_DMAEN));
  440. }
  441.  
  442. /**
  443.   * @brief  Get the data register address used for DMA transfer.
  444.   * @rmtoll DR           DR            LL_I2C_DMA_GetRegAddr
  445.   * @param  I2Cx I2C Instance.
  446.   * @retval Address of data register
  447.   */
  448. __STATIC_INLINE uint32_t LL_I2C_DMA_GetRegAddr(I2C_TypeDef *I2Cx)
  449. {
  450.   return (uint32_t) & (I2Cx->DR);
  451. }
  452.  
  453. /**
  454.   * @brief  Enable Clock stretching.
  455.   * @note   This bit can only be programmed when the I2C is disabled (PE = 0).
  456.   * @rmtoll CR1          NOSTRETCH     LL_I2C_EnableClockStretching
  457.   * @param  I2Cx I2C Instance.
  458.   * @retval None
  459.   */
  460. __STATIC_INLINE void LL_I2C_EnableClockStretching(I2C_TypeDef *I2Cx)
  461. {
  462.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH);
  463. }
  464.  
  465. /**
  466.   * @brief  Disable Clock stretching.
  467.   * @note   This bit can only be programmed when the I2C is disabled (PE = 0).
  468.   * @rmtoll CR1          NOSTRETCH     LL_I2C_DisableClockStretching
  469.   * @param  I2Cx I2C Instance.
  470.   * @retval None
  471.   */
  472. __STATIC_INLINE void LL_I2C_DisableClockStretching(I2C_TypeDef *I2Cx)
  473. {
  474.   SET_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH);
  475. }
  476.  
  477. /**
  478.   * @brief  Check if Clock stretching is enabled or disabled.
  479.   * @rmtoll CR1          NOSTRETCH     LL_I2C_IsEnabledClockStretching
  480.   * @param  I2Cx I2C Instance.
  481.   * @retval State of bit (1 or 0).
  482.   */
  483. __STATIC_INLINE uint32_t LL_I2C_IsEnabledClockStretching(I2C_TypeDef *I2Cx)
  484. {
  485.   return (READ_BIT(I2Cx->CR1, I2C_CR1_NOSTRETCH) != (I2C_CR1_NOSTRETCH));
  486. }
  487.  
  488. /**
  489.   * @brief  Enable General Call.
  490.   * @note   When enabled the Address 0x00 is ACKed.
  491.   * @rmtoll CR1          ENGC          LL_I2C_EnableGeneralCall
  492.   * @param  I2Cx I2C Instance.
  493.   * @retval None
  494.   */
  495. __STATIC_INLINE void LL_I2C_EnableGeneralCall(I2C_TypeDef *I2Cx)
  496. {
  497.   SET_BIT(I2Cx->CR1, I2C_CR1_ENGC);
  498. }
  499.  
  500. /**
  501.   * @brief  Disable General Call.
  502.   * @note   When disabled the Address 0x00 is NACKed.
  503.   * @rmtoll CR1          ENGC          LL_I2C_DisableGeneralCall
  504.   * @param  I2Cx I2C Instance.
  505.   * @retval None
  506.   */
  507. __STATIC_INLINE void LL_I2C_DisableGeneralCall(I2C_TypeDef *I2Cx)
  508. {
  509.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENGC);
  510. }
  511.  
  512. /**
  513.   * @brief  Check if General Call is enabled or disabled.
  514.   * @rmtoll CR1          ENGC          LL_I2C_IsEnabledGeneralCall
  515.   * @param  I2Cx I2C Instance.
  516.   * @retval State of bit (1 or 0).
  517.   */
  518. __STATIC_INLINE uint32_t LL_I2C_IsEnabledGeneralCall(I2C_TypeDef *I2Cx)
  519. {
  520.   return (READ_BIT(I2Cx->CR1, I2C_CR1_ENGC) == (I2C_CR1_ENGC));
  521. }
  522.  
  523. /**
  524.   * @brief  Set the Own Address1.
  525.   * @rmtoll OAR1         ADD0          LL_I2C_SetOwnAddress1\n
  526.   *         OAR1         ADD1_7        LL_I2C_SetOwnAddress1\n
  527.   *         OAR1         ADD8_9        LL_I2C_SetOwnAddress1\n
  528.   *         OAR1         ADDMODE       LL_I2C_SetOwnAddress1
  529.   * @param  I2Cx I2C Instance.
  530.   * @param  OwnAddress1 This parameter must be a value between Min_Data=0 and Max_Data=0x3FF.
  531.   * @param  OwnAddrSize This parameter can be one of the following values:
  532.   *         @arg @ref LL_I2C_OWNADDRESS1_7BIT
  533.   *         @arg @ref LL_I2C_OWNADDRESS1_10BIT
  534.   * @retval None
  535.   */
  536. __STATIC_INLINE void LL_I2C_SetOwnAddress1(I2C_TypeDef *I2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize)
  537. {
  538.   MODIFY_REG(I2Cx->OAR1, I2C_OAR1_ADD0 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD8_9 | I2C_OAR1_ADDMODE, OwnAddress1 | OwnAddrSize);
  539. }
  540.  
  541. /**
  542.   * @brief  Set the 7bits Own Address2.
  543.   * @note   This action has no effect if own address2 is enabled.
  544.   * @rmtoll OAR2         ADD2          LL_I2C_SetOwnAddress2
  545.   * @param  I2Cx I2C Instance.
  546.   * @param  OwnAddress2 This parameter must be a value between Min_Data=0 and Max_Data=0x7F.
  547.   * @retval None
  548.   */
  549. __STATIC_INLINE void LL_I2C_SetOwnAddress2(I2C_TypeDef *I2Cx, uint32_t OwnAddress2)
  550. {
  551.   MODIFY_REG(I2Cx->OAR2, I2C_OAR2_ADD2, OwnAddress2);
  552. }
  553.  
  554. /**
  555.   * @brief  Enable acknowledge on Own Address2 match address.
  556.   * @rmtoll OAR2         ENDUAL        LL_I2C_EnableOwnAddress2
  557.   * @param  I2Cx I2C Instance.
  558.   * @retval None
  559.   */
  560. __STATIC_INLINE void LL_I2C_EnableOwnAddress2(I2C_TypeDef *I2Cx)
  561. {
  562.   SET_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL);
  563. }
  564.  
  565. /**
  566.   * @brief  Disable  acknowledge on Own Address2 match address.
  567.   * @rmtoll OAR2         ENDUAL        LL_I2C_DisableOwnAddress2
  568.   * @param  I2Cx I2C Instance.
  569.   * @retval None
  570.   */
  571. __STATIC_INLINE void LL_I2C_DisableOwnAddress2(I2C_TypeDef *I2Cx)
  572. {
  573.   CLEAR_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL);
  574. }
  575.  
  576. /**
  577.   * @brief  Check if Own Address1 acknowledge is enabled or disabled.
  578.   * @rmtoll OAR2         ENDUAL        LL_I2C_IsEnabledOwnAddress2
  579.   * @param  I2Cx I2C Instance.
  580.   * @retval State of bit (1 or 0).
  581.   */
  582. __STATIC_INLINE uint32_t LL_I2C_IsEnabledOwnAddress2(I2C_TypeDef *I2Cx)
  583. {
  584.   return (READ_BIT(I2Cx->OAR2, I2C_OAR2_ENDUAL) == (I2C_OAR2_ENDUAL));
  585. }
  586.  
  587. /**
  588.   * @brief  Configure the Peripheral clock frequency.
  589.   * @rmtoll CR2          FREQ          LL_I2C_SetPeriphClock
  590.   * @param  I2Cx I2C Instance.
  591.   * @param  PeriphClock Peripheral Clock (in Hz)
  592.   * @retval None
  593.   */
  594. __STATIC_INLINE void LL_I2C_SetPeriphClock(I2C_TypeDef *I2Cx, uint32_t PeriphClock)
  595. {
  596.   MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock));
  597. }
  598.  
  599. /**
  600.   * @brief  Get the Peripheral clock frequency.
  601.   * @rmtoll CR2          FREQ          LL_I2C_GetPeriphClock
  602.   * @param  I2Cx I2C Instance.
  603.   * @retval Value of Peripheral Clock (in Hz)
  604.   */
  605. __STATIC_INLINE uint32_t LL_I2C_GetPeriphClock(I2C_TypeDef *I2Cx)
  606. {
  607.   return (uint32_t)(__LL_I2C_FREQ_MHZ_TO_HZ(READ_BIT(I2Cx->CR2, I2C_CR2_FREQ)));
  608. }
  609.  
  610. /**
  611.   * @brief  Configure the Duty cycle (Fast mode only).
  612.   * @rmtoll CCR          DUTY          LL_I2C_SetDutyCycle
  613.   * @param  I2Cx I2C Instance.
  614.   * @param  DutyCycle This parameter can be one of the following values:
  615.   *         @arg @ref LL_I2C_DUTYCYCLE_2
  616.   *         @arg @ref LL_I2C_DUTYCYCLE_16_9
  617.   * @retval None
  618.   */
  619. __STATIC_INLINE void LL_I2C_SetDutyCycle(I2C_TypeDef *I2Cx, uint32_t DutyCycle)
  620. {
  621.   MODIFY_REG(I2Cx->CCR, I2C_CCR_DUTY, DutyCycle);
  622. }
  623.  
  624. /**
  625.   * @brief  Get the Duty cycle (Fast mode only).
  626.   * @rmtoll CCR          DUTY          LL_I2C_GetDutyCycle
  627.   * @param  I2Cx I2C Instance.
  628.   * @retval Returned value can be one of the following values:
  629.   *         @arg @ref LL_I2C_DUTYCYCLE_2
  630.   *         @arg @ref LL_I2C_DUTYCYCLE_16_9
  631.   */
  632. __STATIC_INLINE uint32_t LL_I2C_GetDutyCycle(I2C_TypeDef *I2Cx)
  633. {
  634.   return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_DUTY));
  635. }
  636.  
  637. /**
  638.   * @brief  Configure the I2C master clock speed mode.
  639.   * @rmtoll CCR          FS            LL_I2C_SetClockSpeedMode
  640.   * @param  I2Cx I2C Instance.
  641.   * @param  ClockSpeedMode This parameter can be one of the following values:
  642.   *         @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE
  643.   *         @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE
  644.   * @retval None
  645.   */
  646. __STATIC_INLINE void LL_I2C_SetClockSpeedMode(I2C_TypeDef *I2Cx, uint32_t ClockSpeedMode)
  647. {
  648.   MODIFY_REG(I2Cx->CCR, I2C_CCR_FS, ClockSpeedMode);
  649. }
  650.  
  651. /**
  652.   * @brief  Get the the I2C master speed mode.
  653.   * @rmtoll CCR          FS            LL_I2C_GetClockSpeedMode
  654.   * @param  I2Cx I2C Instance.
  655.   * @retval Returned value can be one of the following values:
  656.   *         @arg @ref LL_I2C_CLOCK_SPEED_STANDARD_MODE
  657.   *         @arg @ref LL_I2C_CLOCK_SPEED_FAST_MODE
  658.   */
  659. __STATIC_INLINE uint32_t LL_I2C_GetClockSpeedMode(I2C_TypeDef *I2Cx)
  660. {
  661.   return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_FS));
  662. }
  663.  
  664. /**
  665.   * @brief  Configure the SCL, SDA rising time.
  666.   * @note   This bit can only be programmed when the I2C is disabled (PE = 0).
  667.   * @rmtoll TRISE        TRISE         LL_I2C_SetRiseTime
  668.   * @param  I2Cx I2C Instance.
  669.   * @param  RiseTime This parameter must be a value between Min_Data=0x02 and Max_Data=0x3F.
  670.   * @retval None
  671.   */
  672. __STATIC_INLINE void LL_I2C_SetRiseTime(I2C_TypeDef *I2Cx, uint32_t RiseTime)
  673. {
  674.   MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, RiseTime);
  675. }
  676.  
  677. /**
  678.   * @brief  Get the SCL, SDA rising time.
  679.   * @rmtoll TRISE        TRISE         LL_I2C_GetRiseTime
  680.   * @param  I2Cx I2C Instance.
  681.   * @retval Value between Min_Data=0x02 and Max_Data=0x3F
  682.   */
  683. __STATIC_INLINE uint32_t LL_I2C_GetRiseTime(I2C_TypeDef *I2Cx)
  684. {
  685.   return (uint32_t)(READ_BIT(I2Cx->TRISE, I2C_TRISE_TRISE));
  686. }
  687.  
  688. /**
  689.   * @brief  Configure the SCL high and low period.
  690.   * @note   This bit can only be programmed when the I2C is disabled (PE = 0).
  691.   * @rmtoll CCR          CCR           LL_I2C_SetClockPeriod
  692.   * @param  I2Cx I2C Instance.
  693.   * @param  ClockPeriod This parameter must be a value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
  694.   * @retval None
  695.   */
  696. __STATIC_INLINE void LL_I2C_SetClockPeriod(I2C_TypeDef *I2Cx, uint32_t ClockPeriod)
  697. {
  698.   MODIFY_REG(I2Cx->CCR, I2C_CCR_CCR, ClockPeriod);
  699. }
  700.  
  701. /**
  702.   * @brief  Get the SCL high and low period.
  703.   * @rmtoll CCR          CCR           LL_I2C_GetClockPeriod
  704.   * @param  I2Cx I2C Instance.
  705.   * @retval Value between Min_Data=0x004 and Max_Data=0xFFF, except in FAST DUTY mode where Min_Data=0x001.
  706.   */
  707. __STATIC_INLINE uint32_t LL_I2C_GetClockPeriod(I2C_TypeDef *I2Cx)
  708. {
  709.   return (uint32_t)(READ_BIT(I2Cx->CCR, I2C_CCR_CCR));
  710. }
  711.  
  712. /**
  713.   * @brief  Configure the SCL speed.
  714.   * @note   This bit can only be programmed when the I2C is disabled (PE = 0).
  715.   * @rmtoll CR2          FREQ          LL_I2C_ConfigSpeed\n
  716.   *         TRISE        TRISE         LL_I2C_ConfigSpeed\n
  717.   *         CCR          FS            LL_I2C_ConfigSpeed\n
  718.   *         CCR          DUTY          LL_I2C_ConfigSpeed\n
  719.   *         CCR          CCR           LL_I2C_ConfigSpeed
  720.   * @param  I2Cx I2C Instance.
  721.   * @param  PeriphClock Peripheral Clock (in Hz)
  722.   * @param  ClockSpeed This parameter must be a value lower than 400kHz (in Hz).
  723.   * @param  DutyCycle This parameter can be one of the following values:
  724.   *         @arg @ref LL_I2C_DUTYCYCLE_2
  725.   *         @arg @ref LL_I2C_DUTYCYCLE_16_9
  726.   * @retval None
  727.   */
  728. __STATIC_INLINE void LL_I2C_ConfigSpeed(I2C_TypeDef *I2Cx, uint32_t PeriphClock, uint32_t ClockSpeed,
  729.                                         uint32_t DutyCycle)
  730. {
  731.   uint32_t freqrange = 0x0U;
  732.   uint32_t clockconfig = 0x0U;
  733.  
  734.   /* Compute frequency range */
  735.   freqrange = __LL_I2C_FREQ_HZ_TO_MHZ(PeriphClock);
  736.  
  737.   /* Configure I2Cx: Frequency range register */
  738.   MODIFY_REG(I2Cx->CR2, I2C_CR2_FREQ, freqrange);
  739.  
  740.   /* Configure I2Cx: Rise Time register */
  741.   MODIFY_REG(I2Cx->TRISE, I2C_TRISE_TRISE, __LL_I2C_RISE_TIME(freqrange, ClockSpeed));
  742.  
  743.   /* Configure Speed mode, Duty Cycle and Clock control register value */
  744.   if (ClockSpeed > LL_I2C_MAX_SPEED_STANDARD)
  745.   {
  746.     /* Set Speed mode at fast and duty cycle for Clock Speed request in fast clock range */
  747.     clockconfig = LL_I2C_CLOCK_SPEED_FAST_MODE                                          | \
  748.                   __LL_I2C_SPEED_FAST_TO_CCR(PeriphClock, ClockSpeed, DutyCycle)        | \
  749.                   DutyCycle;
  750.   }
  751.   else
  752.   {
  753.     /* Set Speed mode at standard for Clock Speed request in standard clock range */
  754.     clockconfig = LL_I2C_CLOCK_SPEED_STANDARD_MODE                                      | \
  755.                   __LL_I2C_SPEED_STANDARD_TO_CCR(PeriphClock, ClockSpeed);
  756.   }
  757.  
  758.   /* Configure I2Cx: Clock control register */
  759.   MODIFY_REG(I2Cx->CCR, (I2C_CCR_FS | I2C_CCR_DUTY | I2C_CCR_CCR), clockconfig);
  760. }
  761.  
  762. /**
  763.   * @brief  Configure peripheral mode.
  764.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  765.   *         SMBus feature is supported by the I2Cx Instance.
  766.   * @rmtoll CR1          SMBUS         LL_I2C_SetMode\n
  767.   *         CR1          SMBTYPE       LL_I2C_SetMode\n
  768.   *         CR1          ENARP         LL_I2C_SetMode
  769.   * @param  I2Cx I2C Instance.
  770.   * @param  PeripheralMode This parameter can be one of the following values:
  771.   *         @arg @ref LL_I2C_MODE_I2C
  772.   *         @arg @ref LL_I2C_MODE_SMBUS_HOST
  773.   *         @arg @ref LL_I2C_MODE_SMBUS_DEVICE
  774.   *         @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP
  775.   * @retval None
  776.   */
  777. __STATIC_INLINE void LL_I2C_SetMode(I2C_TypeDef *I2Cx, uint32_t PeripheralMode)
  778. {
  779.   MODIFY_REG(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP, PeripheralMode);
  780. }
  781.  
  782. /**
  783.   * @brief  Get peripheral mode.
  784.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  785.   *         SMBus feature is supported by the I2Cx Instance.
  786.   * @rmtoll CR1          SMBUS         LL_I2C_GetMode\n
  787.   *         CR1          SMBTYPE       LL_I2C_GetMode\n
  788.   *         CR1          ENARP         LL_I2C_GetMode
  789.   * @param  I2Cx I2C Instance.
  790.   * @retval Returned value can be one of the following values:
  791.   *         @arg @ref LL_I2C_MODE_I2C
  792.   *         @arg @ref LL_I2C_MODE_SMBUS_HOST
  793.   *         @arg @ref LL_I2C_MODE_SMBUS_DEVICE
  794.   *         @arg @ref LL_I2C_MODE_SMBUS_DEVICE_ARP
  795.   */
  796. __STATIC_INLINE uint32_t LL_I2C_GetMode(I2C_TypeDef *I2Cx)
  797. {
  798.   return (uint32_t)(READ_BIT(I2Cx->CR1, I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP));
  799. }
  800.  
  801. /**
  802.   * @brief  Enable SMBus alert (Host or Device mode)
  803.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  804.   *         SMBus feature is supported by the I2Cx Instance.
  805.   * @note   SMBus Device mode:
  806.   *         - SMBus Alert pin is drived low and
  807.   *           Alert Response Address Header acknowledge is enabled.
  808.   *         SMBus Host mode:
  809.   *         - SMBus Alert pin management is supported.
  810.   * @rmtoll CR1          ALERT         LL_I2C_EnableSMBusAlert
  811.   * @param  I2Cx I2C Instance.
  812.   * @retval None
  813.   */
  814. __STATIC_INLINE void LL_I2C_EnableSMBusAlert(I2C_TypeDef *I2Cx)
  815. {
  816.   SET_BIT(I2Cx->CR1, I2C_CR1_ALERT);
  817. }
  818.  
  819. /**
  820.   * @brief  Disable SMBus alert (Host or Device mode)
  821.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  822.   *         SMBus feature is supported by the I2Cx Instance.
  823.   * @note   SMBus Device mode:
  824.   *         - SMBus Alert pin is not drived (can be used as a standard GPIO) and
  825.   *           Alert Response Address Header acknowledge is disabled.
  826.   *         SMBus Host mode:
  827.   *         - SMBus Alert pin management is not supported.
  828.   * @rmtoll CR1          ALERT         LL_I2C_DisableSMBusAlert
  829.   * @param  I2Cx I2C Instance.
  830.   * @retval None
  831.   */
  832. __STATIC_INLINE void LL_I2C_DisableSMBusAlert(I2C_TypeDef *I2Cx)
  833. {
  834.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_ALERT);
  835. }
  836.  
  837. /**
  838.   * @brief  Check if SMBus alert (Host or Device mode) is enabled or disabled.
  839.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  840.   *         SMBus feature is supported by the I2Cx Instance.
  841.   * @rmtoll CR1          ALERT         LL_I2C_IsEnabledSMBusAlert
  842.   * @param  I2Cx I2C Instance.
  843.   * @retval State of bit (1 or 0).
  844.   */
  845. __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusAlert(I2C_TypeDef *I2Cx)
  846. {
  847.   return (READ_BIT(I2Cx->CR1, I2C_CR1_ALERT) == (I2C_CR1_ALERT));
  848. }
  849.  
  850. /**
  851.   * @brief  Enable SMBus Packet Error Calculation (PEC).
  852.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  853.   *         SMBus feature is supported by the I2Cx Instance.
  854.   * @rmtoll CR1          ENPEC         LL_I2C_EnableSMBusPEC
  855.   * @param  I2Cx I2C Instance.
  856.   * @retval None
  857.   */
  858. __STATIC_INLINE void LL_I2C_EnableSMBusPEC(I2C_TypeDef *I2Cx)
  859. {
  860.   SET_BIT(I2Cx->CR1, I2C_CR1_ENPEC);
  861. }
  862.  
  863. /**
  864.   * @brief  Disable SMBus Packet Error Calculation (PEC).
  865.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  866.   *         SMBus feature is supported by the I2Cx Instance.
  867.   * @rmtoll CR1          ENPEC         LL_I2C_DisableSMBusPEC
  868.   * @param  I2Cx I2C Instance.
  869.   * @retval None
  870.   */
  871. __STATIC_INLINE void LL_I2C_DisableSMBusPEC(I2C_TypeDef *I2Cx)
  872. {
  873.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_ENPEC);
  874. }
  875.  
  876. /**
  877.   * @brief  Check if SMBus Packet Error Calculation (PEC) is enabled or disabled.
  878.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  879.   *         SMBus feature is supported by the I2Cx Instance.
  880.   * @rmtoll CR1          ENPEC         LL_I2C_IsEnabledSMBusPEC
  881.   * @param  I2Cx I2C Instance.
  882.   * @retval State of bit (1 or 0).
  883.   */
  884. __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx)
  885. {
  886.   return (READ_BIT(I2Cx->CR1, I2C_CR1_ENPEC) == (I2C_CR1_ENPEC));
  887. }
  888.  
  889. /**
  890.   * @}
  891.   */
  892.  
  893. /** @defgroup I2C_LL_EF_IT_Management IT_Management
  894.   * @{
  895.   */
  896.  
  897. /**
  898.   * @brief  Enable TXE interrupt.
  899.   * @rmtoll CR2          ITEVTEN       LL_I2C_EnableIT_TX\n
  900.   *         CR2          ITBUFEN       LL_I2C_EnableIT_TX
  901.   * @param  I2Cx I2C Instance.
  902.   * @retval None
  903.   */
  904. __STATIC_INLINE void LL_I2C_EnableIT_TX(I2C_TypeDef *I2Cx)
  905. {
  906.   SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
  907. }
  908.  
  909. /**
  910.   * @brief  Disable TXE interrupt.
  911.   * @rmtoll CR2          ITEVTEN       LL_I2C_DisableIT_TX\n
  912.   *         CR2          ITBUFEN       LL_I2C_DisableIT_TX
  913.   * @param  I2Cx I2C Instance.
  914.   * @retval None
  915.   */
  916. __STATIC_INLINE void LL_I2C_DisableIT_TX(I2C_TypeDef *I2Cx)
  917. {
  918.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
  919. }
  920.  
  921. /**
  922.   * @brief  Check if the TXE Interrupt is enabled or disabled.
  923.   * @rmtoll CR2          ITEVTEN       LL_I2C_IsEnabledIT_TX\n
  924.   *         CR2          ITBUFEN       LL_I2C_IsEnabledIT_TX
  925.   * @param  I2Cx I2C Instance.
  926.   * @retval State of bit (1 or 0).
  927.   */
  928. __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_TX(I2C_TypeDef *I2Cx)
  929. {
  930.   return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN));
  931. }
  932.  
  933. /**
  934.   * @brief  Enable RXNE interrupt.
  935.   * @rmtoll CR2          ITEVTEN       LL_I2C_EnableIT_RX\n
  936.   *         CR2          ITBUFEN       LL_I2C_EnableIT_RX
  937.   * @param  I2Cx I2C Instance.
  938.   * @retval None
  939.   */
  940. __STATIC_INLINE void LL_I2C_EnableIT_RX(I2C_TypeDef *I2Cx)
  941. {
  942.   SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
  943. }
  944.  
  945. /**
  946.   * @brief  Disable RXNE interrupt.
  947.   * @rmtoll CR2          ITEVTEN       LL_I2C_DisableIT_RX\n
  948.   *         CR2          ITBUFEN       LL_I2C_DisableIT_RX
  949.   * @param  I2Cx I2C Instance.
  950.   * @retval None
  951.   */
  952. __STATIC_INLINE void LL_I2C_DisableIT_RX(I2C_TypeDef *I2Cx)
  953. {
  954.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
  955. }
  956.  
  957. /**
  958.   * @brief  Check if the RXNE Interrupt is enabled or disabled.
  959.   * @rmtoll CR2          ITEVTEN       LL_I2C_IsEnabledIT_RX\n
  960.   *         CR2          ITBUFEN       LL_I2C_IsEnabledIT_RX
  961.   * @param  I2Cx I2C Instance.
  962.   * @retval State of bit (1 or 0).
  963.   */
  964. __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_RX(I2C_TypeDef *I2Cx)
  965. {
  966.   return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN) == (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN));
  967. }
  968.  
  969. /**
  970.   * @brief  Enable Events interrupts.
  971.   * @note   Any of these events will generate interrupt :
  972.   *         Start Bit (SB)
  973.   *         Address sent, Address matched (ADDR)
  974.   *         10-bit header sent (ADD10)
  975.   *         Stop detection  (STOPF)
  976.   *         Byte transfer finished (BTF)
  977.   *
  978.   * @note   Any of these events will generate interrupt if Buffer interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_BUF()) :
  979.   *         Receive buffer not empty (RXNE)
  980.   *         Transmit buffer empty (TXE)
  981.   * @rmtoll CR2          ITEVTEN       LL_I2C_EnableIT_EVT
  982.   * @param  I2Cx I2C Instance.
  983.   * @retval None
  984.   */
  985. __STATIC_INLINE void LL_I2C_EnableIT_EVT(I2C_TypeDef *I2Cx)
  986. {
  987.   SET_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN);
  988. }
  989.  
  990. /**
  991.   * @brief  Disable Events interrupts.
  992.   * @note   Any of these events will generate interrupt :
  993.   *         Start Bit (SB)
  994.   *         Address sent, Address matched (ADDR)
  995.   *         10-bit header sent (ADD10)
  996.   *         Stop detection  (STOPF)
  997.   *         Byte transfer finished (BTF)
  998.   *         Receive buffer not empty (RXNE)
  999.   *         Transmit buffer empty (TXE)
  1000.   * @rmtoll CR2          ITEVTEN       LL_I2C_DisableIT_EVT
  1001.   * @param  I2Cx I2C Instance.
  1002.   * @retval None
  1003.   */
  1004. __STATIC_INLINE void LL_I2C_DisableIT_EVT(I2C_TypeDef *I2Cx)
  1005. {
  1006.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN);
  1007. }
  1008.  
  1009. /**
  1010.   * @brief  Check if Events interrupts are enabled or disabled.
  1011.   * @rmtoll CR2          ITEVTEN       LL_I2C_IsEnabledIT_EVT
  1012.   * @param  I2Cx I2C Instance.
  1013.   * @retval State of bit (1 or 0).
  1014.   */
  1015. __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_EVT(I2C_TypeDef *I2Cx)
  1016. {
  1017.   return (READ_BIT(I2Cx->CR2, I2C_CR2_ITEVTEN) == (I2C_CR2_ITEVTEN));
  1018. }
  1019.  
  1020. /**
  1021.   * @brief  Enable Buffer interrupts.
  1022.   * @note   Any of these Buffer events will generate interrupt if Events interrupts are enabled too(using unitary function @ref LL_I2C_EnableIT_EVT()) :
  1023.   *         Receive buffer not empty (RXNE)
  1024.   *         Transmit buffer empty (TXE)
  1025.   * @rmtoll CR2          ITBUFEN       LL_I2C_EnableIT_BUF
  1026.   * @param  I2Cx I2C Instance.
  1027.   * @retval None
  1028.   */
  1029. __STATIC_INLINE void LL_I2C_EnableIT_BUF(I2C_TypeDef *I2Cx)
  1030. {
  1031.   SET_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN);
  1032. }
  1033.  
  1034. /**
  1035.   * @brief  Disable Buffer interrupts.
  1036.   * @note   Any of these Buffer events will generate interrupt :
  1037.   *         Receive buffer not empty (RXNE)
  1038.   *         Transmit buffer empty (TXE)
  1039.   * @rmtoll CR2          ITBUFEN       LL_I2C_DisableIT_BUF
  1040.   * @param  I2Cx I2C Instance.
  1041.   * @retval None
  1042.   */
  1043. __STATIC_INLINE void LL_I2C_DisableIT_BUF(I2C_TypeDef *I2Cx)
  1044. {
  1045.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN);
  1046. }
  1047.  
  1048. /**
  1049.   * @brief  Check if Buffer interrupts are enabled or disabled.
  1050.   * @rmtoll CR2          ITBUFEN       LL_I2C_IsEnabledIT_BUF
  1051.   * @param  I2Cx I2C Instance.
  1052.   * @retval State of bit (1 or 0).
  1053.   */
  1054. __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_BUF(I2C_TypeDef *I2Cx)
  1055. {
  1056.   return (READ_BIT(I2Cx->CR2, I2C_CR2_ITBUFEN) == (I2C_CR2_ITBUFEN));
  1057. }
  1058.  
  1059. /**
  1060.   * @brief  Enable Error interrupts.
  1061.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1062.   *         SMBus feature is supported by the I2Cx Instance.
  1063.   * @note   Any of these errors will generate interrupt :
  1064.   *         Bus Error detection (BERR)
  1065.   *         Arbitration Loss (ARLO)
  1066.   *         Acknowledge Failure(AF)
  1067.   *         Overrun/Underrun (OVR)
  1068.   *         SMBus Timeout detection (TIMEOUT)
  1069.   *         SMBus PEC error detection (PECERR)
  1070.   *         SMBus Alert pin event detection (SMBALERT)
  1071.   * @rmtoll CR2          ITERREN       LL_I2C_EnableIT_ERR
  1072.   * @param  I2Cx I2C Instance.
  1073.   * @retval None
  1074.   */
  1075. __STATIC_INLINE void LL_I2C_EnableIT_ERR(I2C_TypeDef *I2Cx)
  1076. {
  1077.   SET_BIT(I2Cx->CR2, I2C_CR2_ITERREN);
  1078. }
  1079.  
  1080. /**
  1081.   * @brief  Disable Error interrupts.
  1082.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1083.   *         SMBus feature is supported by the I2Cx Instance.
  1084.   * @note   Any of these errors will generate interrupt :
  1085.   *         Bus Error detection (BERR)
  1086.   *         Arbitration Loss (ARLO)
  1087.   *         Acknowledge Failure(AF)
  1088.   *         Overrun/Underrun (OVR)
  1089.   *         SMBus Timeout detection (TIMEOUT)
  1090.   *         SMBus PEC error detection (PECERR)
  1091.   *         SMBus Alert pin event detection (SMBALERT)
  1092.   * @rmtoll CR2          ITERREN       LL_I2C_DisableIT_ERR
  1093.   * @param  I2Cx I2C Instance.
  1094.   * @retval None
  1095.   */
  1096. __STATIC_INLINE void LL_I2C_DisableIT_ERR(I2C_TypeDef *I2Cx)
  1097. {
  1098.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_ITERREN);
  1099. }
  1100.  
  1101. /**
  1102.   * @brief  Check if Error interrupts are enabled or disabled.
  1103.   * @rmtoll CR2          ITERREN       LL_I2C_IsEnabledIT_ERR
  1104.   * @param  I2Cx I2C Instance.
  1105.   * @retval State of bit (1 or 0).
  1106.   */
  1107. __STATIC_INLINE uint32_t LL_I2C_IsEnabledIT_ERR(I2C_TypeDef *I2Cx)
  1108. {
  1109.   return (READ_BIT(I2Cx->CR2, I2C_CR2_ITERREN) == (I2C_CR2_ITERREN));
  1110. }
  1111.  
  1112. /**
  1113.   * @}
  1114.   */
  1115.  
  1116. /** @defgroup I2C_LL_EF_FLAG_management FLAG_management
  1117.   * @{
  1118.   */
  1119.  
  1120. /**
  1121.   * @brief  Indicate the status of Transmit data register empty flag.
  1122.   * @note   RESET: When next data is written in Transmit data register.
  1123.   *         SET: When Transmit data register is empty.
  1124.   * @rmtoll SR1          TXE           LL_I2C_IsActiveFlag_TXE
  1125.   * @param  I2Cx I2C Instance.
  1126.   * @retval State of bit (1 or 0).
  1127.   */
  1128. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_TXE(I2C_TypeDef *I2Cx)
  1129. {
  1130.   return (READ_BIT(I2Cx->SR1, I2C_SR1_TXE) == (I2C_SR1_TXE));
  1131. }
  1132.  
  1133. /**
  1134.   * @brief  Indicate the status of Byte Transfer Finished flag.
  1135.   *         RESET: When Data byte transfer not done.
  1136.   *         SET: When Data byte transfer succeeded.
  1137.   * @rmtoll SR1          BTF           LL_I2C_IsActiveFlag_BTF
  1138.   * @param  I2Cx I2C Instance.
  1139.   * @retval State of bit (1 or 0).
  1140.   */
  1141. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BTF(I2C_TypeDef *I2Cx)
  1142. {
  1143.   return (READ_BIT(I2Cx->SR1, I2C_SR1_BTF) == (I2C_SR1_BTF));
  1144. }
  1145.  
  1146. /**
  1147.   * @brief  Indicate the status of Receive data register not empty flag.
  1148.   * @note   RESET: When Receive data register is read.
  1149.   *         SET: When the received data is copied in Receive data register.
  1150.   * @rmtoll SR1          RXNE          LL_I2C_IsActiveFlag_RXNE
  1151.   * @param  I2Cx I2C Instance.
  1152.   * @retval State of bit (1 or 0).
  1153.   */
  1154. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_RXNE(I2C_TypeDef *I2Cx)
  1155. {
  1156.   return (READ_BIT(I2Cx->SR1, I2C_SR1_RXNE) == (I2C_SR1_RXNE));
  1157. }
  1158.  
  1159. /**
  1160.   * @brief  Indicate the status of Start Bit (master mode).
  1161.   * @note   RESET: When No Start condition.
  1162.   *         SET: When Start condition is generated.
  1163.   * @rmtoll SR1          SB            LL_I2C_IsActiveFlag_SB
  1164.   * @param  I2Cx I2C Instance.
  1165.   * @retval State of bit (1 or 0).
  1166.   */
  1167. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_SB(I2C_TypeDef *I2Cx)
  1168. {
  1169.   return (READ_BIT(I2Cx->SR1, I2C_SR1_SB) == (I2C_SR1_SB));
  1170. }
  1171.  
  1172. /**
  1173.   * @brief  Indicate the status of Address sent (master mode) or Address matched flag (slave mode).
  1174.   * @note   RESET: Clear default value.
  1175.   *         SET: When the address is fully sent (master mode) or when the received slave address matched with one of the enabled slave address (slave mode).
  1176.   * @rmtoll SR1          ADDR          LL_I2C_IsActiveFlag_ADDR
  1177.   * @param  I2Cx I2C Instance.
  1178.   * @retval State of bit (1 or 0).
  1179.   */
  1180. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADDR(I2C_TypeDef *I2Cx)
  1181. {
  1182.   return (READ_BIT(I2Cx->SR1, I2C_SR1_ADDR) == (I2C_SR1_ADDR));
  1183. }
  1184.  
  1185. /**
  1186.   * @brief  Indicate the status of 10-bit header sent (master mode).
  1187.   * @note   RESET: When no ADD10 event occurred.
  1188.   *         SET: When the master has sent the first address byte (header).
  1189.   * @rmtoll SR1          ADD10         LL_I2C_IsActiveFlag_ADD10
  1190.   * @param  I2Cx I2C Instance.
  1191.   * @retval State of bit (1 or 0).
  1192.   */
  1193. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ADD10(I2C_TypeDef *I2Cx)
  1194. {
  1195.   return (READ_BIT(I2Cx->SR1, I2C_SR1_ADD10) == (I2C_SR1_ADD10));
  1196. }
  1197.  
  1198. /**
  1199.   * @brief  Indicate the status of Acknowledge failure flag.
  1200.   * @note   RESET: No acknowledge failure.
  1201.   *         SET: When an acknowledge failure is received after a byte transmission.
  1202.   * @rmtoll SR1          AF            LL_I2C_IsActiveFlag_AF
  1203.   * @param  I2Cx I2C Instance.
  1204.   * @retval State of bit (1 or 0).
  1205.   */
  1206. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_AF(I2C_TypeDef *I2Cx)
  1207. {
  1208.   return (READ_BIT(I2Cx->SR1, I2C_SR1_AF) == (I2C_SR1_AF));
  1209. }
  1210.  
  1211. /**
  1212.   * @brief  Indicate the status of Stop detection flag (slave mode).
  1213.   * @note   RESET: Clear default value.
  1214.   *         SET: When a Stop condition is detected.
  1215.   * @rmtoll SR1          STOPF         LL_I2C_IsActiveFlag_STOP
  1216.   * @param  I2Cx I2C Instance.
  1217.   * @retval State of bit (1 or 0).
  1218.   */
  1219. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_STOP(I2C_TypeDef *I2Cx)
  1220. {
  1221.   return (READ_BIT(I2Cx->SR1, I2C_SR1_STOPF) == (I2C_SR1_STOPF));
  1222. }
  1223.  
  1224. /**
  1225.   * @brief  Indicate the status of Bus error flag.
  1226.   * @note   RESET: Clear default value.
  1227.   *         SET: When a misplaced Start or Stop condition is detected.
  1228.   * @rmtoll SR1          BERR          LL_I2C_IsActiveFlag_BERR
  1229.   * @param  I2Cx I2C Instance.
  1230.   * @retval State of bit (1 or 0).
  1231.   */
  1232. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BERR(I2C_TypeDef *I2Cx)
  1233. {
  1234.   return (READ_BIT(I2Cx->SR1, I2C_SR1_BERR) == (I2C_SR1_BERR));
  1235. }
  1236.  
  1237. /**
  1238.   * @brief  Indicate the status of Arbitration lost flag.
  1239.   * @note   RESET: Clear default value.
  1240.   *         SET: When arbitration lost.
  1241.   * @rmtoll SR1          ARLO          LL_I2C_IsActiveFlag_ARLO
  1242.   * @param  I2Cx I2C Instance.
  1243.   * @retval State of bit (1 or 0).
  1244.   */
  1245. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_ARLO(I2C_TypeDef *I2Cx)
  1246. {
  1247.   return (READ_BIT(I2Cx->SR1, I2C_SR1_ARLO) == (I2C_SR1_ARLO));
  1248. }
  1249.  
  1250. /**
  1251.   * @brief  Indicate the status of Overrun/Underrun flag.
  1252.   * @note   RESET: Clear default value.
  1253.   *         SET: When an overrun/underrun error occurs (Clock Stretching Disabled).
  1254.   * @rmtoll SR1          OVR           LL_I2C_IsActiveFlag_OVR
  1255.   * @param  I2Cx I2C Instance.
  1256.   * @retval State of bit (1 or 0).
  1257.   */
  1258. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_OVR(I2C_TypeDef *I2Cx)
  1259. {
  1260.   return (READ_BIT(I2Cx->SR1, I2C_SR1_OVR) == (I2C_SR1_OVR));
  1261. }
  1262.  
  1263. /**
  1264.   * @brief  Indicate the status of SMBus PEC error flag in reception.
  1265.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1266.   *         SMBus feature is supported by the I2Cx Instance.
  1267.   * @rmtoll SR1          PECERR        LL_I2C_IsActiveSMBusFlag_PECERR
  1268.   * @param  I2Cx I2C Instance.
  1269.   * @retval State of bit (1 or 0).
  1270.   */
  1271. __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
  1272. {
  1273.   return (READ_BIT(I2Cx->SR1, I2C_SR1_PECERR) == (I2C_SR1_PECERR));
  1274. }
  1275.  
  1276. /**
  1277.   * @brief  Indicate the status of SMBus Timeout detection flag.
  1278.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1279.   *         SMBus feature is supported by the I2Cx Instance.
  1280.   * @rmtoll SR1          TIMEOUT       LL_I2C_IsActiveSMBusFlag_TIMEOUT
  1281.   * @param  I2Cx I2C Instance.
  1282.   * @retval State of bit (1 or 0).
  1283.   */
  1284. __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
  1285. {
  1286.   return (READ_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT) == (I2C_SR1_TIMEOUT));
  1287. }
  1288.  
  1289. /**
  1290.   * @brief  Indicate the status of SMBus alert flag.
  1291.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1292.   *         SMBus feature is supported by the I2Cx Instance.
  1293.   * @rmtoll SR1          SMBALERT      LL_I2C_IsActiveSMBusFlag_ALERT
  1294.   * @param  I2Cx I2C Instance.
  1295.   * @retval State of bit (1 or 0).
  1296.   */
  1297. __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
  1298. {
  1299.   return (READ_BIT(I2Cx->SR1, I2C_SR1_SMBALERT) == (I2C_SR1_SMBALERT));
  1300. }
  1301.  
  1302. /**
  1303.   * @brief  Indicate the status of Bus Busy flag.
  1304.   * @note   RESET: Clear default value.
  1305.   *         SET: When a Start condition is detected.
  1306.   * @rmtoll SR2          BUSY          LL_I2C_IsActiveFlag_BUSY
  1307.   * @param  I2Cx I2C Instance.
  1308.   * @retval State of bit (1 or 0).
  1309.   */
  1310. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_BUSY(I2C_TypeDef *I2Cx)
  1311. {
  1312.   return (READ_BIT(I2Cx->SR2, I2C_SR2_BUSY) == (I2C_SR2_BUSY));
  1313. }
  1314.  
  1315. /**
  1316.   * @brief  Indicate the status of Dual flag.
  1317.   * @note   RESET: Received address matched with OAR1.
  1318.   *         SET: Received address matched with OAR2.
  1319.   * @rmtoll SR2          DUALF         LL_I2C_IsActiveFlag_DUAL
  1320.   * @param  I2Cx I2C Instance.
  1321.   * @retval State of bit (1 or 0).
  1322.   */
  1323. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_DUAL(I2C_TypeDef *I2Cx)
  1324. {
  1325.   return (READ_BIT(I2Cx->SR2, I2C_SR2_DUALF) == (I2C_SR2_DUALF));
  1326. }
  1327.  
  1328. /**
  1329.   * @brief  Indicate the status of SMBus Host address reception (Slave mode).
  1330.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1331.   *         SMBus feature is supported by the I2Cx Instance.
  1332.   * @note   RESET: No SMBus Host address
  1333.   *         SET: SMBus Host address received.
  1334.   * @note   This status is cleared by hardware after a STOP condition or repeated START condition.
  1335.   * @rmtoll SR2          SMBHOST       LL_I2C_IsActiveSMBusFlag_SMBHOST
  1336.   * @param  I2Cx I2C Instance.
  1337.   * @retval State of bit (1 or 0).
  1338.   */
  1339. __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef *I2Cx)
  1340. {
  1341.   return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBHOST) == (I2C_SR2_SMBHOST));
  1342. }
  1343.  
  1344. /**
  1345.   * @brief  Indicate the status of SMBus Device default address reception (Slave mode).
  1346.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1347.   *         SMBus feature is supported by the I2Cx Instance.
  1348.   * @note   RESET: No SMBus Device default address
  1349.   *         SET: SMBus Device default address received.
  1350.   * @note   This status is cleared by hardware after a STOP condition or repeated START condition.
  1351.   * @rmtoll SR2          SMBDEFAULT    LL_I2C_IsActiveSMBusFlag_SMBDEFAULT
  1352.   * @param  I2Cx I2C Instance.
  1353.   * @retval State of bit (1 or 0).
  1354.   */
  1355. __STATIC_INLINE uint32_t LL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef *I2Cx)
  1356. {
  1357.   return (READ_BIT(I2Cx->SR2, I2C_SR2_SMBDEFAULT) == (I2C_SR2_SMBDEFAULT));
  1358. }
  1359.  
  1360. /**
  1361.   * @brief  Indicate the status of General call address reception (Slave mode).
  1362.   * @note   RESET: No General call address
  1363.   *         SET: General call address received.
  1364.   * @note   This status is cleared by hardware after a STOP condition or repeated START condition.
  1365.   * @rmtoll SR2          GENCALL       LL_I2C_IsActiveFlag_GENCALL
  1366.   * @param  I2Cx I2C Instance.
  1367.   * @retval State of bit (1 or 0).
  1368.   */
  1369. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef *I2Cx)
  1370. {
  1371.   return (READ_BIT(I2Cx->SR2, I2C_SR2_GENCALL) == (I2C_SR2_GENCALL));
  1372. }
  1373.  
  1374. /**
  1375.   * @brief  Indicate the status of Master/Slave flag.
  1376.   * @note   RESET: Slave Mode.
  1377.   *         SET: Master Mode.
  1378.   * @rmtoll SR2          MSL           LL_I2C_IsActiveFlag_MSL
  1379.   * @param  I2Cx I2C Instance.
  1380.   * @retval State of bit (1 or 0).
  1381.   */
  1382. __STATIC_INLINE uint32_t LL_I2C_IsActiveFlag_MSL(I2C_TypeDef *I2Cx)
  1383. {
  1384.   return (READ_BIT(I2Cx->SR2, I2C_SR2_MSL) == (I2C_SR2_MSL));
  1385. }
  1386.  
  1387. /**
  1388.   * @brief  Clear Address Matched flag.
  1389.   * @note   Clearing this flag is done by a read access to the I2Cx_SR1
  1390.   *         register followed by a read access to the I2Cx_SR2 register.
  1391.   * @rmtoll SR1          ADDR          LL_I2C_ClearFlag_ADDR
  1392.   * @param  I2Cx I2C Instance.
  1393.   * @retval None
  1394.   */
  1395. __STATIC_INLINE void LL_I2C_ClearFlag_ADDR(I2C_TypeDef *I2Cx)
  1396. {
  1397.   __IO uint32_t tmpreg;
  1398.   tmpreg = I2Cx->SR1;
  1399.   (void) tmpreg;
  1400.   tmpreg = I2Cx->SR2;
  1401.   (void) tmpreg;
  1402. }
  1403.  
  1404. /**
  1405.   * @brief  Clear Acknowledge failure flag.
  1406.   * @rmtoll SR1          AF            LL_I2C_ClearFlag_AF
  1407.   * @param  I2Cx I2C Instance.
  1408.   * @retval None
  1409.   */
  1410. __STATIC_INLINE void LL_I2C_ClearFlag_AF(I2C_TypeDef *I2Cx)
  1411. {
  1412.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_AF);
  1413. }
  1414.  
  1415. /**
  1416.   * @brief  Clear Stop detection flag.
  1417.   * @note   Clearing this flag is done by a read access to the I2Cx_SR1
  1418.   *         register followed by a write access to I2Cx_CR1 register.
  1419.   * @rmtoll SR1          STOPF         LL_I2C_ClearFlag_STOP\n
  1420.   *         CR1          PE            LL_I2C_ClearFlag_STOP
  1421.   * @param  I2Cx I2C Instance.
  1422.   * @retval None
  1423.   */
  1424. __STATIC_INLINE void LL_I2C_ClearFlag_STOP(I2C_TypeDef *I2Cx)
  1425. {
  1426.   __IO uint32_t tmpreg;
  1427.   tmpreg = I2Cx->SR1;
  1428.   (void) tmpreg;
  1429.   SET_BIT(I2Cx->CR1, I2C_CR1_PE);
  1430. }
  1431.  
  1432. /**
  1433.   * @brief  Clear Bus error flag.
  1434.   * @rmtoll SR1          BERR          LL_I2C_ClearFlag_BERR
  1435.   * @param  I2Cx I2C Instance.
  1436.   * @retval None
  1437.   */
  1438. __STATIC_INLINE void LL_I2C_ClearFlag_BERR(I2C_TypeDef *I2Cx)
  1439. {
  1440.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_BERR);
  1441. }
  1442.  
  1443. /**
  1444.   * @brief  Clear Arbitration lost flag.
  1445.   * @rmtoll SR1          ARLO          LL_I2C_ClearFlag_ARLO
  1446.   * @param  I2Cx I2C Instance.
  1447.   * @retval None
  1448.   */
  1449. __STATIC_INLINE void LL_I2C_ClearFlag_ARLO(I2C_TypeDef *I2Cx)
  1450. {
  1451.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_ARLO);
  1452. }
  1453.  
  1454. /**
  1455.   * @brief  Clear Overrun/Underrun flag.
  1456.   * @rmtoll SR1          OVR           LL_I2C_ClearFlag_OVR
  1457.   * @param  I2Cx I2C Instance.
  1458.   * @retval None
  1459.   */
  1460. __STATIC_INLINE void LL_I2C_ClearFlag_OVR(I2C_TypeDef *I2Cx)
  1461. {
  1462.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_OVR);
  1463. }
  1464.  
  1465. /**
  1466.   * @brief  Clear SMBus PEC error flag.
  1467.   * @rmtoll SR1          PECERR        LL_I2C_ClearSMBusFlag_PECERR
  1468.   * @param  I2Cx I2C Instance.
  1469.   * @retval None
  1470.   */
  1471. __STATIC_INLINE void LL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
  1472. {
  1473.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_PECERR);
  1474. }
  1475.  
  1476. /**
  1477.   * @brief  Clear SMBus Timeout detection flag.
  1478.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1479.   *         SMBus feature is supported by the I2Cx Instance.
  1480.   * @rmtoll SR1          TIMEOUT       LL_I2C_ClearSMBusFlag_TIMEOUT
  1481.   * @param  I2Cx I2C Instance.
  1482.   * @retval None
  1483.   */
  1484. __STATIC_INLINE void LL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
  1485. {
  1486.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_TIMEOUT);
  1487. }
  1488.  
  1489. /**
  1490.   * @brief  Clear SMBus Alert flag.
  1491.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1492.   *         SMBus feature is supported by the I2Cx Instance.
  1493.   * @rmtoll SR1          SMBALERT      LL_I2C_ClearSMBusFlag_ALERT
  1494.   * @param  I2Cx I2C Instance.
  1495.   * @retval None
  1496.   */
  1497. __STATIC_INLINE void LL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
  1498. {
  1499.   CLEAR_BIT(I2Cx->SR1, I2C_SR1_SMBALERT);
  1500. }
  1501.  
  1502. /**
  1503.   * @}
  1504.   */
  1505.  
  1506. /** @defgroup I2C_LL_EF_Data_Management Data_Management
  1507.   * @{
  1508.   */
  1509.  
  1510. /**
  1511.   * @brief  Enable Reset of I2C peripheral.
  1512.   * @rmtoll CR1          SWRST         LL_I2C_EnableReset
  1513.   * @param  I2Cx I2C Instance.
  1514.   * @retval None
  1515.   */
  1516. __STATIC_INLINE void LL_I2C_EnableReset(I2C_TypeDef *I2Cx)
  1517. {
  1518.   SET_BIT(I2Cx->CR1, I2C_CR1_SWRST);
  1519. }
  1520.  
  1521. /**
  1522.   * @brief  Disable Reset of I2C peripheral.
  1523.   * @rmtoll CR1          SWRST         LL_I2C_DisableReset
  1524.   * @param  I2Cx I2C Instance.
  1525.   * @retval None
  1526.   */
  1527. __STATIC_INLINE void LL_I2C_DisableReset(I2C_TypeDef *I2Cx)
  1528. {
  1529.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_SWRST);
  1530. }
  1531.  
  1532. /**
  1533.   * @brief  Check if the I2C peripheral is under reset state or not.
  1534.   * @rmtoll CR1          SWRST         LL_I2C_IsResetEnabled
  1535.   * @param  I2Cx I2C Instance.
  1536.   * @retval State of bit (1 or 0).
  1537.   */
  1538. __STATIC_INLINE uint32_t LL_I2C_IsResetEnabled(I2C_TypeDef *I2Cx)
  1539. {
  1540.   return (READ_BIT(I2Cx->CR1, I2C_CR1_SWRST) == (I2C_CR1_SWRST));
  1541. }
  1542.  
  1543. /**
  1544.   * @brief  Prepare the generation of a ACKnowledge or Non ACKnowledge condition after the address receive match code or next received byte.
  1545.   * @note   Usage in Slave or Master mode.
  1546.   * @rmtoll CR1          ACK           LL_I2C_AcknowledgeNextData
  1547.   * @param  I2Cx I2C Instance.
  1548.   * @param  TypeAcknowledge This parameter can be one of the following values:
  1549.   *         @arg @ref LL_I2C_ACK
  1550.   *         @arg @ref LL_I2C_NACK
  1551.   * @retval None
  1552.   */
  1553. __STATIC_INLINE void LL_I2C_AcknowledgeNextData(I2C_TypeDef *I2Cx, uint32_t TypeAcknowledge)
  1554. {
  1555.   MODIFY_REG(I2Cx->CR1, I2C_CR1_ACK, TypeAcknowledge);
  1556. }
  1557.  
  1558. /**
  1559.   * @brief  Generate a START or RESTART condition
  1560.   * @note   The START bit can be set even if bus is BUSY or I2C is in slave mode.
  1561.   *         This action has no effect when RELOAD is set.
  1562.   * @rmtoll CR1          START         LL_I2C_GenerateStartCondition
  1563.   * @param  I2Cx I2C Instance.
  1564.   * @retval None
  1565.   */
  1566. __STATIC_INLINE void LL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx)
  1567. {
  1568.   SET_BIT(I2Cx->CR1, I2C_CR1_START);
  1569. }
  1570.  
  1571. /**
  1572.   * @brief  Generate a STOP condition after the current byte transfer (master mode).
  1573.   * @rmtoll CR1          STOP          LL_I2C_GenerateStopCondition
  1574.   * @param  I2Cx I2C Instance.
  1575.   * @retval None
  1576.   */
  1577. __STATIC_INLINE void LL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx)
  1578. {
  1579.   SET_BIT(I2Cx->CR1, I2C_CR1_STOP);
  1580. }
  1581.  
  1582. /**
  1583.   * @brief  Enable bit POS (master/host mode).
  1584.   * @note   In that case, the ACK bit controls the (N)ACK of the next byte received or the PEC bit indicates that the next byte in shift register is a PEC.
  1585.   * @rmtoll CR1          POS           LL_I2C_EnableBitPOS
  1586.   * @param  I2Cx I2C Instance.
  1587.   * @retval None
  1588.   */
  1589. __STATIC_INLINE void LL_I2C_EnableBitPOS(I2C_TypeDef *I2Cx)
  1590. {
  1591.   SET_BIT(I2Cx->CR1, I2C_CR1_POS);
  1592. }
  1593.  
  1594. /**
  1595.   * @brief  Disable bit POS (master/host mode).
  1596.   * @note   In that case, the ACK bit controls the (N)ACK of the current byte received or the PEC bit indicates that the current byte in shift register is a PEC.
  1597.   * @rmtoll CR1          POS           LL_I2C_DisableBitPOS
  1598.   * @param  I2Cx I2C Instance.
  1599.   * @retval None
  1600.   */
  1601. __STATIC_INLINE void LL_I2C_DisableBitPOS(I2C_TypeDef *I2Cx)
  1602. {
  1603.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_POS);
  1604. }
  1605.  
  1606. /**
  1607.   * @brief  Check if bit POS  is enabled or disabled.
  1608.   * @rmtoll CR1          POS           LL_I2C_IsEnabledBitPOS
  1609.   * @param  I2Cx I2C Instance.
  1610.   * @retval State of bit (1 or 0).
  1611.   */
  1612. __STATIC_INLINE uint32_t LL_I2C_IsEnabledBitPOS(I2C_TypeDef *I2Cx)
  1613. {
  1614.   return (READ_BIT(I2Cx->CR1, I2C_CR1_POS) == (I2C_CR1_POS));
  1615. }
  1616.  
  1617. /**
  1618.   * @brief  Indicate the value of transfer direction.
  1619.   * @note   RESET: Bus is in read transfer (peripheral point of view).
  1620.   *         SET: Bus is in write transfer (peripheral point of view).
  1621.   * @rmtoll SR2          TRA           LL_I2C_GetTransferDirection
  1622.   * @param  I2Cx I2C Instance.
  1623.   * @retval Returned value can be one of the following values:
  1624.   *         @arg @ref LL_I2C_DIRECTION_WRITE
  1625.   *         @arg @ref LL_I2C_DIRECTION_READ
  1626.   */
  1627. __STATIC_INLINE uint32_t LL_I2C_GetTransferDirection(I2C_TypeDef *I2Cx)
  1628. {
  1629.   return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_TRA));
  1630. }
  1631.  
  1632. /**
  1633.   * @brief  Enable DMA last transfer.
  1634.   * @note   This action mean that next DMA EOT is the last transfer.
  1635.   * @rmtoll CR2          LAST          LL_I2C_EnableLastDMA
  1636.   * @param  I2Cx I2C Instance.
  1637.   * @retval None
  1638.   */
  1639. __STATIC_INLINE void LL_I2C_EnableLastDMA(I2C_TypeDef *I2Cx)
  1640. {
  1641.   SET_BIT(I2Cx->CR2, I2C_CR2_LAST);
  1642. }
  1643.  
  1644. /**
  1645.   * @brief  Disable DMA last transfer.
  1646.   * @note   This action mean that next DMA EOT is not the last transfer.
  1647.   * @rmtoll CR2          LAST          LL_I2C_DisableLastDMA
  1648.   * @param  I2Cx I2C Instance.
  1649.   * @retval None
  1650.   */
  1651. __STATIC_INLINE void LL_I2C_DisableLastDMA(I2C_TypeDef *I2Cx)
  1652. {
  1653.   CLEAR_BIT(I2Cx->CR2, I2C_CR2_LAST);
  1654. }
  1655.  
  1656. /**
  1657.   * @brief  Check if DMA last transfer is enabled or disabled.
  1658.   * @rmtoll CR2          LAST          LL_I2C_IsEnabledLastDMA
  1659.   * @param  I2Cx I2C Instance.
  1660.   * @retval State of bit (1 or 0).
  1661.   */
  1662. __STATIC_INLINE uint32_t LL_I2C_IsEnabledLastDMA(I2C_TypeDef *I2Cx)
  1663. {
  1664.   return (READ_BIT(I2Cx->CR2, I2C_CR2_LAST) == (I2C_CR2_LAST));
  1665. }
  1666.  
  1667. /**
  1668.   * @brief  Enable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode).
  1669.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1670.   *         SMBus feature is supported by the I2Cx Instance.
  1671.   * @note   This feature is cleared by hardware when the PEC byte is transferred or compared,
  1672.   *         or by a START or STOP condition, it is also cleared by software.
  1673.   * @rmtoll CR1          PEC           LL_I2C_EnableSMBusPECCompare
  1674.   * @param  I2Cx I2C Instance.
  1675.   * @retval None
  1676.   */
  1677. __STATIC_INLINE void LL_I2C_EnableSMBusPECCompare(I2C_TypeDef *I2Cx)
  1678. {
  1679.   SET_BIT(I2Cx->CR1, I2C_CR1_PEC);
  1680. }
  1681.  
  1682. /**
  1683.   * @brief  Disable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode).
  1684.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1685.   *         SMBus feature is supported by the I2Cx Instance.
  1686.   * @rmtoll CR1          PEC           LL_I2C_DisableSMBusPECCompare
  1687.   * @param  I2Cx I2C Instance.
  1688.   * @retval None
  1689.   */
  1690. __STATIC_INLINE void LL_I2C_DisableSMBusPECCompare(I2C_TypeDef *I2Cx)
  1691. {
  1692.   CLEAR_BIT(I2Cx->CR1, I2C_CR1_PEC);
  1693. }
  1694.  
  1695. /**
  1696.   * @brief  Check if the SMBus Packet Error byte transfer or internal comparison is requested or not.
  1697.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1698.   *         SMBus feature is supported by the I2Cx Instance.
  1699.   * @rmtoll CR1          PEC           LL_I2C_IsEnabledSMBusPECCompare
  1700.   * @param  I2Cx I2C Instance.
  1701.   * @retval State of bit (1 or 0).
  1702.   */
  1703. __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef *I2Cx)
  1704. {
  1705.   return (READ_BIT(I2Cx->CR1, I2C_CR1_PEC) == (I2C_CR1_PEC));
  1706. }
  1707.  
  1708. /**
  1709.   * @brief  Get the SMBus Packet Error byte calculated.
  1710.   * @note   Macro IS_SMBUS_ALL_INSTANCE(I2Cx) can be used to check whether or not
  1711.   *         SMBus feature is supported by the I2Cx Instance.
  1712.   * @rmtoll SR2          PEC           LL_I2C_GetSMBusPEC
  1713.   * @param  I2Cx I2C Instance.
  1714.   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
  1715.   */
  1716. __STATIC_INLINE uint32_t LL_I2C_GetSMBusPEC(I2C_TypeDef *I2Cx)
  1717. {
  1718.   return (uint32_t)(READ_BIT(I2Cx->SR2, I2C_SR2_PEC) >> I2C_SR2_PEC_Pos);
  1719. }
  1720.  
  1721. /**
  1722.   * @brief  Read Receive Data register.
  1723.   * @rmtoll DR           DR            LL_I2C_ReceiveData8
  1724.   * @param  I2Cx I2C Instance.
  1725.   * @retval Value between Min_Data=0x0 and Max_Data=0xFF
  1726.   */
  1727. __STATIC_INLINE uint8_t LL_I2C_ReceiveData8(I2C_TypeDef *I2Cx)
  1728. {
  1729.   return (uint8_t)(READ_BIT(I2Cx->DR, I2C_DR_DR));
  1730. }
  1731.  
  1732. /**
  1733.   * @brief  Write in Transmit Data Register .
  1734.   * @rmtoll DR           DR            LL_I2C_TransmitData8
  1735.   * @param  I2Cx I2C Instance.
  1736.   * @param  Data Value between Min_Data=0x0 and Max_Data=0xFF
  1737.   * @retval None
  1738.   */
  1739. __STATIC_INLINE void LL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data)
  1740. {
  1741.   MODIFY_REG(I2Cx->DR, I2C_DR_DR, Data);
  1742. }
  1743.  
  1744. /**
  1745.   * @}
  1746.   */
  1747.  
  1748. #if defined(USE_FULL_LL_DRIVER)
  1749. /** @defgroup I2C_LL_EF_Init Initialization and de-initialization functions
  1750.   * @{
  1751.   */
  1752.  
  1753. uint32_t LL_I2C_Init(I2C_TypeDef *I2Cx, LL_I2C_InitTypeDef *I2C_InitStruct);
  1754. uint32_t LL_I2C_DeInit(I2C_TypeDef *I2Cx);
  1755. void LL_I2C_StructInit(LL_I2C_InitTypeDef *I2C_InitStruct);
  1756.  
  1757.  
  1758. /**
  1759.   * @}
  1760.   */
  1761. #endif /* USE_FULL_LL_DRIVER */
  1762.  
  1763. /**
  1764.   * @}
  1765.   */
  1766.  
  1767. /**
  1768.   * @}
  1769.   */
  1770.  
  1771. #endif /* I2C1 || I2C2 */
  1772.  
  1773. /**
  1774.   * @}
  1775.   */
  1776.  
  1777. #ifdef __cplusplus
  1778. }
  1779. #endif
  1780.  
  1781. #endif /* __STM32F1xx_LL_I2C_H */
  1782.  
  1783.