1 /**
2   ******************************************************************************
3   * @file    stm32f0xx_hal_i2c_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of I2C HAL Extended 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 STM32F0xx_HAL_I2C_EX_H
21 #define STM32F0xx_HAL_I2C_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f0xx_hal_def.h"
29 
30 /** @addtogroup STM32F0xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup I2CEx
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /* Exported constants --------------------------------------------------------*/
40 
41 /** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants
42   * @{
43   */
44 
45 /** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter
46   * @{
47   */
48 #define I2C_ANALOGFILTER_ENABLE         0x00000000U
49 #define I2C_ANALOGFILTER_DISABLE        I2C_CR1_ANFOFF
50 /**
51   * @}
52   */
53 
54 /** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus
55   * @{
56   */
57 #define I2C_FMP_NOT_SUPPORTED           0xAAAA0000U                                     /*!< Fast Mode Plus not supported       */
58 #if defined(SYSCFG_CFGR1_I2C_FMP_PA9)
59 #define I2C_FASTMODEPLUS_PA9            SYSCFG_CFGR1_I2C_FMP_PA9                        /*!< Enable Fast Mode Plus on PA9       */
60 #define I2C_FASTMODEPLUS_PA10           SYSCFG_CFGR1_I2C_FMP_PA10                       /*!< Enable Fast Mode Plus on PA10      */
61 #else
62 #define I2C_FASTMODEPLUS_PA9            (uint32_t)(0x00000001U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PA9 not supported   */
63 #define I2C_FASTMODEPLUS_PA10           (uint32_t)(0x00000002U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PA10 not supported  */
64 #endif /* SYSCFG_CFGR1_I2C_FMP_PA9 */
65 #define I2C_FASTMODEPLUS_PB6            SYSCFG_CFGR1_I2C_FMP_PB6                        /*!< Enable Fast Mode Plus on PB6       */
66 #define I2C_FASTMODEPLUS_PB7            SYSCFG_CFGR1_I2C_FMP_PB7                        /*!< Enable Fast Mode Plus on PB7       */
67 #define I2C_FASTMODEPLUS_PB8            SYSCFG_CFGR1_I2C_FMP_PB8                        /*!< Enable Fast Mode Plus on PB8       */
68 #define I2C_FASTMODEPLUS_PB9            SYSCFG_CFGR1_I2C_FMP_PB9                        /*!< Enable Fast Mode Plus on PB9       */
69 #if defined(SYSCFG_CFGR1_I2C_FMP_I2C1)
70 #define I2C_FASTMODEPLUS_I2C1           SYSCFG_CFGR1_I2C_FMP_I2C1                       /*!< Enable Fast Mode Plus on I2C1 pins */
71 #else
72 #define I2C_FASTMODEPLUS_I2C1           (uint32_t)(0x00000100U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C1 not supported  */
73 #endif /* SYSCFG_CFGR1_I2C_FMP_I2C1 */
74 #if defined(SYSCFG_CFGR1_I2C_FMP_I2C2)
75 #define I2C_FASTMODEPLUS_I2C2           SYSCFG_CFGR1_I2C_FMP_I2C2                       /*!< Enable Fast Mode Plus on I2C2 pins */
76 #else
77 #define I2C_FASTMODEPLUS_I2C2           (uint32_t)(0x00000200U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C2 not supported  */
78 #endif /* SYSCFG_CFGR1_I2C_FMP_I2C2 */
79 /**
80   * @}
81   */
82 
83 /**
84   * @}
85   */
86 
87 /* Exported macro ------------------------------------------------------------*/
88 /* Exported functions --------------------------------------------------------*/
89 
90 /** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions
91   * @{
92   */
93 
94 /** @addtogroup I2CEx_Exported_Functions_Group1 Extended features functions
95   * @brief    Extended features functions
96   * @{
97   */
98 
99 /** @addtogroup I2CEx_Exported_Functions_Group1 Filter Mode Functions
100   * @{
101   */
102 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c,
103                                                uint32_t AnalogFilter);
104 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c,
105                                                 uint32_t DigitalFilter);
106 /**
107   * @}
108   */
109 #if defined(I2C_CR1_WUPEN)
110 
111 /** @addtogroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions
112   * @{
113   */
114 HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c);
115 HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c);
116 /**
117   * @}
118   */
119 #endif /* I2C_CR1_WUPEN */
120 
121 /** @addtogroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions
122   * @{
123   */
124 void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus);
125 void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
126 /**
127   * @}
128   */
129 
130 /* Private constants ---------------------------------------------------------*/
131 /** @defgroup I2CEx_Private_Constants I2C Extended Private Constants
132   * @{
133   */
134 
135 /**
136   * @}
137   */
138 
139 /* Private macros ------------------------------------------------------------*/
140 /** @defgroup I2CEx_Private_Macro I2C Extended Private Macros
141   * @{
142   */
143 #define IS_I2C_ANALOG_FILTER(FILTER)    (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \
144                                          ((FILTER) == I2C_ANALOGFILTER_DISABLE))
145 
146 #define IS_I2C_DIGITAL_FILTER(FILTER)   ((FILTER) <= 0x0000000FU)
147 
148 #define IS_I2C_FASTMODEPLUS(__CONFIG__) ((((__CONFIG__) & I2C_FMP_NOT_SUPPORTED) != I2C_FMP_NOT_SUPPORTED) && \
149                                          ((((__CONFIG__) & (I2C_FASTMODEPLUS_PA9))  == I2C_FASTMODEPLUS_PA9)     || \
150                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PA10)) == I2C_FASTMODEPLUS_PA10)    || \
151                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB6))  == I2C_FASTMODEPLUS_PB6)     || \
152                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB7))  == I2C_FASTMODEPLUS_PB7)     || \
153                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB8))  == I2C_FASTMODEPLUS_PB8)     || \
154                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB9))  == I2C_FASTMODEPLUS_PB9)     || \
155                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C1)) == I2C_FASTMODEPLUS_I2C1)    || \
156                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C2)) == I2C_FASTMODEPLUS_I2C2)))
157 /**
158   * @}
159   */
160 
161 /* Private Functions ---------------------------------------------------------*/
162 /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions
163   * @{
164   */
165 /* Private functions are defined in stm32f0xx_hal_i2c_ex.c file */
166 /**
167   * @}
168   */
169 
170 /**
171   * @}
172   */
173 
174 /**
175   * @}
176   */
177 
178 /**
179   * @}
180   */
181 
182 /**
183   * @}
184   */
185 
186 #ifdef __cplusplus
187 }
188 #endif
189 
190 #endif /* STM32F0xx_HAL_I2C_EX_H */
191