1 /**
2   ******************************************************************************
3   * @file    stm32l4xx_hal_i2c_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of I2C HAL Extended module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
10   *
11   * Redistribution and use in source and binary forms, with or without modification,
12   * are permitted provided that the following conditions are met:
13   *   1. Redistributions of source code must retain the above copyright notice,
14   *      this list of conditions and the following disclaimer.
15   *   2. Redistributions in binary form must reproduce the above copyright notice,
16   *      this list of conditions and the following disclaimer in the documentation
17   *      and/or other materials provided with the distribution.
18   *   3. Neither the name of STMicroelectronics nor the names of its contributors
19   *      may be used to endorse or promote products derived from this software
20   *      without specific prior written permission.
21   *
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32   *
33   ******************************************************************************
34   */
35 
36 /* Define to prevent recursive inclusion -------------------------------------*/
37 #ifndef STM32L4xx_HAL_I2C_EX_H
38 #define STM32L4xx_HAL_I2C_EX_H
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32l4xx_hal_def.h"
46 
47 /** @addtogroup STM32L4xx_HAL_Driver
48   * @{
49   */
50 
51 /** @addtogroup I2CEx
52   * @{
53   */
54 
55 /* Exported types ------------------------------------------------------------*/
56 /* Exported constants --------------------------------------------------------*/
57 
58 /** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants
59   * @{
60   */
61 
62 /** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter
63   * @{
64   */
65 #define I2C_ANALOGFILTER_ENABLE         0x00000000U
66 #define I2C_ANALOGFILTER_DISABLE        I2C_CR1_ANFOFF
67 /**
68   * @}
69   */
70 
71 /** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus
72   * @{
73   */
74 #define I2C_FMP_NOT_SUPPORTED           0xAAAA0000U                                     /*!< Fast Mode Plus not supported       */
75 #define I2C_FASTMODEPLUS_PB6            SYSCFG_CFGR1_I2C_PB6_FMP                        /*!< Enable Fast Mode Plus on PB6       */
76 #define I2C_FASTMODEPLUS_PB7            SYSCFG_CFGR1_I2C_PB7_FMP                        /*!< Enable Fast Mode Plus on PB7       */
77 #if defined(SYSCFG_CFGR1_I2C_PB8_FMP)
78 #define I2C_FASTMODEPLUS_PB8            SYSCFG_CFGR1_I2C_PB8_FMP                        /*!< Enable Fast Mode Plus on PB8       */
79 #define I2C_FASTMODEPLUS_PB9            SYSCFG_CFGR1_I2C_PB9_FMP                        /*!< Enable Fast Mode Plus on PB9       */
80 #else
81 #define I2C_FASTMODEPLUS_PB8            (uint32_t)(0x00000010U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PB8 not supported   */
82 #define I2C_FASTMODEPLUS_PB9            (uint32_t)(0x00000012U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PB9 not supported   */
83 #endif
84 #define I2C_FASTMODEPLUS_I2C1           SYSCFG_CFGR1_I2C1_FMP                           /*!< Enable Fast Mode Plus on I2C1 pins */
85 #if defined(SYSCFG_CFGR1_I2C2_FMP)
86 #define I2C_FASTMODEPLUS_I2C2           SYSCFG_CFGR1_I2C2_FMP                           /*!< Enable Fast Mode Plus on I2C2 pins */
87 #else
88 #define I2C_FASTMODEPLUS_I2C2           (uint32_t)(0x00000200U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C2 not supported  */
89 #endif
90 #define I2C_FASTMODEPLUS_I2C3           SYSCFG_CFGR1_I2C3_FMP                           /*!< Enable Fast Mode Plus on I2C3 pins */
91 #if defined(SYSCFG_CFGR1_I2C4_FMP)
92 #define I2C_FASTMODEPLUS_I2C4           SYSCFG_CFGR1_I2C4_FMP                           /*!< Enable Fast Mode Plus on I2C4 pins */
93 #else
94 #define I2C_FASTMODEPLUS_I2C4           (uint32_t)(0x00000800U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C4 not supported  */
95 #endif
96 /**
97   * @}
98   */
99 
100 /**
101   * @}
102   */
103 
104 /* Exported macro ------------------------------------------------------------*/
105 /* Exported functions --------------------------------------------------------*/
106 
107 /** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions
108   * @{
109   */
110 
111 /** @addtogroup I2CEx_Exported_Functions_Group1 Extended features functions
112   * @brief    Extended features functions
113   * @{
114   */
115 
116 /* Peripheral Control functions  ************************************************/
117 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter);
118 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter);
119 HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c);
120 HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c);
121 void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus);
122 void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
123 
124 /* Private constants ---------------------------------------------------------*/
125 /** @defgroup I2CEx_Private_Constants I2C Extended Private Constants
126   * @{
127   */
128 
129 /**
130   * @}
131   */
132 
133 /* Private macros ------------------------------------------------------------*/
134 /** @defgroup I2CEx_Private_Macro I2C Extended Private Macros
135   * @{
136   */
137 #define IS_I2C_ANALOG_FILTER(FILTER)    (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \
138                                           ((FILTER) == I2C_ANALOGFILTER_DISABLE))
139 
140 #define IS_I2C_DIGITAL_FILTER(FILTER)   ((FILTER) <= 0x0000000FU)
141 
142 #define IS_I2C_FASTMODEPLUS(__CONFIG__) ((((__CONFIG__) & I2C_FMP_NOT_SUPPORTED) != I2C_FMP_NOT_SUPPORTED) && \
143                                          ((((__CONFIG__) & (I2C_FASTMODEPLUS_PB6))  == I2C_FASTMODEPLUS_PB6)     || \
144                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB7))  == I2C_FASTMODEPLUS_PB7)     || \
145                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB8))  == I2C_FASTMODEPLUS_PB8)     || \
146                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB9))  == I2C_FASTMODEPLUS_PB9)     || \
147                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C1)) == I2C_FASTMODEPLUS_I2C1)    || \
148                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C2)) == I2C_FASTMODEPLUS_I2C2)    || \
149                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C3)) == I2C_FASTMODEPLUS_I2C3)    || \
150                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C4)) == I2C_FASTMODEPLUS_I2C4)))
151 /**
152   * @}
153   */
154 
155 /* Private Functions ---------------------------------------------------------*/
156 /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions
157   * @{
158   */
159 /* Private functions are defined in stm32l4xx_hal_i2c_ex.c file */
160 /**
161   * @}
162   */
163 
164 /**
165   * @}
166   */
167 
168 /**
169   * @}
170   */
171 
172 /**
173   * @}
174   */
175 
176 /**
177   * @}
178   */
179 
180 #ifdef __cplusplus
181 }
182 #endif
183 
184 #endif /* STM32L4xx_HAL_I2C_EX_H */
185 
186 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
187