1 /**
2   ******************************************************************************
3   * @file    stm32u5xx_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) 2021 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32U5xx_HAL_I2C_EX_H
22 #define STM32U5xx_HAL_I2C_EX_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32u5xx_hal_def.h"
30 
31 /** @addtogroup STM32U5xx_HAL_Driver
32   * @{
33   */
34 
35 /** @addtogroup I2CEx
36   * @{
37   */
38 
39 /* Exported types ------------------------------------------------------------*/
40 /** @defgroup I2C_Exported_Types I2C Exported Types
41   * @{
42   */
43 
44 /** @defgroup I2C_Autonomous_Mode_Configuration_Structure_definition Autonomous Mode Configuration Structure definition
45   * @brief  I2C Autonomous Mode Configuration structure definition
46   * @{
47   */
48 typedef struct
49 {
50   uint32_t TriggerState;        /*!< Specifies the trigger state. This parameter can be a value
51                                      of @ref I2CEx_AutonomousMode_FunctionalState */
52 
53   uint32_t TriggerSelection;    /*!< Specifies the autonomous mode trigger signal selection. This parameter
54                                      can be a value of @ref I2CEx_AutonomousMode_TriggerSelection */
55 
56   uint32_t TriggerPolarity;     /*!< Specifies the autonomous mode trigger signal polarity sensitivity. This parameter
57                                      can be a value of @ref I2CEx_AutonomousMode_TriggerPolarity */
58 
59 } I2C_AutonomousModeConfTypeDef;
60 /**
61   * @}
62   */
63 
64 /**
65   * @}
66   */
67 
68 /* Exported constants --------------------------------------------------------*/
69 /** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants
70   * @{
71   */
72 
73 /** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter
74   * @{
75   */
76 #define I2C_ANALOGFILTER_ENABLE         0x00000000U
77 #define I2C_ANALOGFILTER_DISABLE        I2C_CR1_ANFOFF
78 /**
79   * @}
80   */
81 
82 /** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus
83   * @{
84   */
85 #define I2C_FASTMODEPLUS_ENABLE         0x00000000U           /*!< Enable Fast Mode Plus                        */
86 #define I2C_FASTMODEPLUS_DISABLE        0x00000001U           /*!< Disable Fast Mode Plus                       */
87 /**
88   * @}
89   */
90 
91 /** @defgroup I2CEx_AutonomousMode_FunctionalState I2C Extended Autonomous Mode State
92   * @{
93   */
94 #define I2C_AUTO_MODE_DISABLE           (0x00000000U)                    /*!< Autonomous mode disable  */
95 #define I2C_AUTO_MODE_ENABLE            I2C_AUTOCR_TRIGEN                /*!< Autonomous mode enable   */
96 /**
97   * @}
98   */
99 
100 /** @defgroup I2CEx_AutonomousMode_TriggerSelection I2C Extended Autonomous Mode Trigger Selection
101   * @{
102   */
103 #define I2C_TRIG_GRP1                   (0x10000000U)                    /*!< Trigger Group for I2C1, I2C2, I2C4, I2C5, I2C6 (depends on Product) */
104 #define I2C_TRIG_GRP2                   (0x20000000U)                    /*!< Trigger Group for I2C3 */
105 
106 #define I2C_GRP1_GPDMA_CH0_TCF_TRG      (uint32_t)(I2C_TRIG_GRP1 | (0x00000000U))
107 /*!< HW Trigger signal is GPDMA_CH0_TRG     */
108 #define I2C_GRP1_GPDMA_CH1_TCF_TRG      (uint32_t)(I2C_TRIG_GRP1 | (0x1U << I2C_AUTOCR_TRIGSEL_Pos))
109 /*!< HW Trigger signal is GPDMA_CH1_TRG     */
110 #define I2C_GRP1_GPDMA_CH2_TCF_TRG      (uint32_t)(I2C_TRIG_GRP1 | (0x2U << I2C_AUTOCR_TRIGSEL_Pos))
111 /*!< HW Trigger signal is GPDMA_CH2_TRG     */
112 #define I2C_GRP1_GPDMA_CH3_TCF_TRG      (uint32_t)(I2C_TRIG_GRP1 | (0x3U << I2C_AUTOCR_TRIGSEL_Pos))
113 /*!< HW Trigger signal is GPDMA_CH3_TRG     */
114 #define I2C_GRP1_EXTI5_TRG              (uint32_t)(I2C_TRIG_GRP1 | (0x4U << I2C_AUTOCR_TRIGSEL_Pos))
115 /*!< HW Trigger signal is EXTI5_TRG         */
116 #define I2C_GRP1_EXTI9_TRG              (uint32_t)(I2C_TRIG_GRP1 | (0x5U << I2C_AUTOCR_TRIGSEL_Pos))
117 /*!< HW Trigger signal is EXTI9_TRG         */
118 #define I2C_GRP1_LPTIM1_CH1_TRG         (uint32_t)(I2C_TRIG_GRP1 | (0x6U << I2C_AUTOCR_TRIGSEL_Pos))
119 /*!< HW Trigger signal is LPTIM1_CH1_TRG    */
120 #define I2C_GRP1_LPTIM2_CH1_TRG         (uint32_t)(I2C_TRIG_GRP1 | (0x7U << I2C_AUTOCR_TRIGSEL_Pos))
121 /*!< HW Trigger signal is LPTIM2_CH1_TRG    */
122 #define I2C_GRP1_COMP1_TRG              (uint32_t)(I2C_TRIG_GRP1 | (0x8U << I2C_AUTOCR_TRIGSEL_Pos))
123 /*!< HW Trigger signal is COMP1_TRG         */
124 #define I2C_GRP1_COMP2_TRG              (uint32_t)(I2C_TRIG_GRP1 | (0x9U << I2C_AUTOCR_TRIGSEL_Pos))
125 /*!< HW Trigger signal is COMP2_TRG         */
126 #define I2C_GRP1_RTC_ALRA_TRG           (uint32_t)(I2C_TRIG_GRP1 | (0xAU << I2C_AUTOCR_TRIGSEL_Pos))
127 /*!< HW Trigger signal is RTC_ALRA_TRG      */
128 #define I2C_GRP1_RTC_WUT_TRG            (uint32_t)(I2C_TRIG_GRP1 | (0xBU << I2C_AUTOCR_TRIGSEL_Pos))
129 /*!< HW Trigger signal is RTC_WUT_TRG       */
130 
131 #define I2C_GRP2_LPDMA_CH0_TCF_TRG      (uint32_t)(I2C_TRIG_GRP2 | (0x00000000U))
132 /*!< HW Trigger signal is LPDMA_CH0_TRG     */
133 #define I2C_GRP2_LPDMA_CH1_TCF_TRG      (uint32_t)(I2C_TRIG_GRP2 | (0x1U << I2C_AUTOCR_TRIGSEL_Pos))
134 /*!< HW Trigger signal is LPDMA_CH1_TRG     */
135 #define I2C_GRP2_LPDMA_CH2_TCF_TRG      (uint32_t)(I2C_TRIG_GRP2 | (0x2U << I2C_AUTOCR_TRIGSEL_Pos))
136 /*!< HW Trigger signal is LPDMA_CH2_TRG     */
137 #define I2C_GRP2_LPDMA_CH3_TCF_TRG      (uint32_t)(I2C_TRIG_GRP2 | (0x3U << I2C_AUTOCR_TRIGSEL_Pos))
138 /*!< HW Trigger signal is LPDMA_CH3_TRG     */
139 #define I2C_GRP2_EXTI5_TRG              (uint32_t)(I2C_TRIG_GRP2 | (0x4U << I2C_AUTOCR_TRIGSEL_Pos))
140 /*!< HW Trigger signal is EXTI5_TRG         */
141 #define I2C_GRP2_EXTI8_TRG              (uint32_t)(I2C_TRIG_GRP2 | (0x5U << I2C_AUTOCR_TRIGSEL_Pos))
142 /*!< HW Trigger signal is EXTI8_TRG         */
143 #define I2C_GRP2_LPTIM1_CH1_TRG         (uint32_t)(I2C_TRIG_GRP2 | (0x6U << I2C_AUTOCR_TRIGSEL_Pos))
144 /*!< HW Trigger signal is LPTIM1_CH1_TRG    */
145 #define I2C_GRP2_LPTIM3_CH1_TRG         (uint32_t)(I2C_TRIG_GRP2 | (0x7U << I2C_AUTOCR_TRIGSEL_Pos))
146 /*!< HW Trigger signal is LPTIM3_CH1_TRG    */
147 #define I2C_GRP2_COMP1_TRG              (uint32_t)(I2C_TRIG_GRP2 | (0x8U << I2C_AUTOCR_TRIGSEL_Pos))
148 /*!< HW Trigger signal is COMP1_TRG         */
149 #define I2C_GRP2_COMP2_TRG              (uint32_t)(I2C_TRIG_GRP2 | (0x9U << I2C_AUTOCR_TRIGSEL_Pos))
150 /*!< HW Trigger signal is COMP2_TRG         */
151 #define I2C_GRP2_RTC_ALRA_TRG           (uint32_t)(I2C_TRIG_GRP2 | (0xAU << I2C_AUTOCR_TRIGSEL_Pos))
152 /*!< HW Trigger signal is RTC_ALRA_TRG      */
153 #define I2C_GRP2_RTC_WUT_TRG            (uint32_t)(I2C_TRIG_GRP2 | (0xBU << I2C_AUTOCR_TRIGSEL_Pos))
154 /*!< HW Trigger signal is RTC_WUT_TRG       */
155 /**
156   * @}
157   */
158 
159 /** @defgroup I2CEx_AutonomousMode_TriggerPolarity Extended Autonomous Mode Trigger Polarity
160   * @{
161   */
162 #define I2C_TRIG_POLARITY_RISING        (0x00000000U)                    /*!< I2C HW Trigger signal on rising edge  */
163 #define I2C_TRIG_POLARITY_FALLING       I2C_AUTOCR_TRIGPOL               /*!< I2C HW Trigger signal on falling edge */
164 /**
165   * @}
166   */
167 
168 /**
169   * @}
170   */
171 
172 /* Exported macro ------------------------------------------------------------*/
173 /** @defgroup I2CEx_Exported_Macros I2C Extended Exported Macros
174   * @{
175   */
176 
177 /**
178   * @}
179   */
180 
181 /* Exported functions --------------------------------------------------------*/
182 /** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions
183   * @{
184   */
185 
186 /** @addtogroup I2CEx_Exported_Functions_Group1 Filter Mode Functions
187   * @{
188   */
189 /* Peripheral Control functions  ************************************************/
190 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter);
191 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter);
192 /**
193   * @}
194   */
195 
196 /** @addtogroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions
197   * @{
198   */
199 HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c);
200 HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c);
201 /**
202   * @}
203   */
204 
205 /** @addtogroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions
206   * @{
207   */
208 HAL_StatusTypeDef HAL_I2CEx_ConfigFastModePlus(I2C_HandleTypeDef *hi2c, uint32_t FastModePlus);
209 /**
210   * @}
211   */
212 
213 /** @addtogroup I2CEx_Exported_Functions_Group4 Autonomous Mode Functions
214   * @{
215   */
216 HAL_StatusTypeDef HAL_I2CEx_SetConfigAutonomousMode(I2C_HandleTypeDef *hi2c,
217                                                     const I2C_AutonomousModeConfTypeDef *sConfig);
218 HAL_StatusTypeDef HAL_I2CEx_GetConfigAutonomousMode(const I2C_HandleTypeDef *hi2c,
219                                                     I2C_AutonomousModeConfTypeDef *sConfig);
220 HAL_StatusTypeDef HAL_I2CEx_ClearConfigAutonomousMode(I2C_HandleTypeDef *hi2c);
221 /**
222   * @}
223   */
224 
225 /**
226   * @}
227   */
228 
229 /* Private constants ---------------------------------------------------------*/
230 /** @defgroup I2CEx_Private_Constants I2C Extended Private Constants
231   * @{
232   */
233 
234 /**
235   * @}
236   */
237 
238 /* Private macros ------------------------------------------------------------*/
239 /** @defgroup I2CEx_Private_Macro I2C Extended Private Macros
240   * @{
241   */
242 #define IS_I2C_ANALOG_FILTER(FILTER)    (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \
243                                          ((FILTER) == I2C_ANALOGFILTER_DISABLE))
244 
245 #define IS_I2C_DIGITAL_FILTER(FILTER)   ((FILTER) <= 0x0000000FU)
246 
247 #define IS_I2C_FASTMODEPLUS(__CONFIG__) (((__CONFIG__) == (I2C_FASTMODEPLUS_ENABLE))   || \
248                                          ((__CONFIG__) == (I2C_FASTMODEPLUS_DISABLE)))
249 
250 #define IS_I2C_AUTO_MODE(__MODE__)                  (((__MODE__) == I2C_AUTO_MODE_DISABLE) || \
251                                                      ((__MODE__) == I2C_AUTO_MODE_ENABLE))
252 
253 #define IS_I2C_TRIG_SOURCE(__INSTANCE__, __SOURCE__)  (((__INSTANCE__) == I2C3) ? \
254                                                        IS_I2C_GRP2_TRIG_SOURCE(__SOURCE__) : \
255                                                        IS_I2C_GRP1_TRIG_SOURCE(__SOURCE__))
256 
257 #define IS_I2C_GRP1_TRIG_SOURCE(__SOURCE__)  (((__SOURCE__) == I2C_GRP1_GPDMA_CH0_TCF_TRG  ) || \
258                                               ((__SOURCE__) == I2C_GRP1_GPDMA_CH1_TCF_TRG  ) || \
259                                               ((__SOURCE__) == I2C_GRP1_GPDMA_CH2_TCF_TRG  ) || \
260                                               ((__SOURCE__) == I2C_GRP1_GPDMA_CH3_TCF_TRG  ) || \
261                                               ((__SOURCE__) == I2C_GRP1_EXTI5_TRG          ) || \
262                                               ((__SOURCE__) == I2C_GRP1_EXTI9_TRG          ) || \
263                                               ((__SOURCE__) == I2C_GRP1_LPTIM1_CH1_TRG     ) || \
264                                               ((__SOURCE__) == I2C_GRP1_LPTIM2_CH1_TRG     ) || \
265                                               ((__SOURCE__) == I2C_GRP1_COMP1_TRG          ) || \
266                                               ((__SOURCE__) == I2C_GRP1_COMP2_TRG          ) || \
267                                               ((__SOURCE__) == I2C_GRP1_RTC_ALRA_TRG       ) || \
268                                               ((__SOURCE__) == I2C_GRP1_RTC_WUT_TRG        ))
269 
270 #define IS_I2C_GRP2_TRIG_SOURCE(__SOURCE__)  (((__SOURCE__) == I2C_GRP2_LPDMA_CH0_TCF_TRG  ) || \
271                                               ((__SOURCE__) == I2C_GRP2_LPDMA_CH1_TCF_TRG  ) || \
272                                               ((__SOURCE__) == I2C_GRP2_LPDMA_CH2_TCF_TRG  ) || \
273                                               ((__SOURCE__) == I2C_GRP2_LPDMA_CH3_TCF_TRG  ) || \
274                                               ((__SOURCE__) == I2C_GRP2_EXTI5_TRG          ) || \
275                                               ((__SOURCE__) == I2C_GRP2_EXTI8_TRG          ) || \
276                                               ((__SOURCE__) == I2C_GRP2_LPTIM1_CH1_TRG     ) || \
277                                               ((__SOURCE__) == I2C_GRP2_LPTIM3_CH1_TRG     ) || \
278                                               ((__SOURCE__) == I2C_GRP2_COMP1_TRG          ) || \
279                                               ((__SOURCE__) == I2C_GRP2_COMP2_TRG          ) || \
280                                               ((__SOURCE__) == I2C_GRP2_RTC_ALRA_TRG       ) || \
281                                               ((__SOURCE__) == I2C_GRP2_RTC_WUT_TRG        ))
282 
283 #define IS_I2C_TRIG_INPUT_INSTANCE(__INSTANCE__)    (IS_I2C_GRP1_INSTANCE(__INSTANCE__) || \
284                                                      IS_I2C_GRP2_INSTANCE(__INSTANCE__))
285 
286 #define IS_I2C_AUTO_MODE_TRG_POL(__POLARITY__)      (((__POLARITY__) == I2C_TRIG_POLARITY_RISING) || \
287                                                      ((__POLARITY__) == I2C_TRIG_POLARITY_FALLING))
288 /**
289   * @}
290   */
291 
292 /* Private Functions ---------------------------------------------------------*/
293 /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions
294   * @{
295   */
296 /* Private functions are defined in stm32u5xx_hal_i2c_ex.c file */
297 /**
298   * @}
299   */
300 
301 /**
302   * @}
303   */
304 
305 /**
306   * @}
307   */
308 
309 #ifdef __cplusplus
310 }
311 #endif
312 
313 #endif /* STM32U5xx_HAL_I2C_EX_H */
314