1 /**
2   ******************************************************************************
3   * @file    stm32l0xx_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) 2016 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 __STM32L0xx_HAL_I2C_EX_H
38 #define __STM32L0xx_HAL_I2C_EX_H
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32l0xx_hal_def.h"
46 
47 /** @addtogroup STM32L0xx_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_CFGR2_I2C_PB6_FMP                        /*!< Enable Fast Mode Plus on PB6       */
76 #define I2C_FASTMODEPLUS_PB7            SYSCFG_CFGR2_I2C_PB7_FMP                        /*!< Enable Fast Mode Plus on PB7       */
77 #define I2C_FASTMODEPLUS_PB8            SYSCFG_CFGR2_I2C_PB8_FMP                        /*!< Enable Fast Mode Plus on PB8       */
78 #define I2C_FASTMODEPLUS_PB9            SYSCFG_CFGR2_I2C_PB9_FMP                        /*!< Enable Fast Mode Plus on PB9       */
79 #define I2C_FASTMODEPLUS_I2C1           SYSCFG_CFGR2_I2C1_FMP                           /*!< Enable Fast Mode Plus on I2C1 pins */
80 #if defined(SYSCFG_CFGR2_I2C2_FMP)
81 #define I2C_FASTMODEPLUS_I2C2           SYSCFG_CFGR2_I2C2_FMP                           /*!< Enable Fast Mode Plus on I2C2 pins */
82 #else
83 #define I2C_FASTMODEPLUS_I2C2           (uint32_t)(0x00000200U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C2 not supported  */
84 #endif
85 #if defined(SYSCFG_CFGR2_I2C3_FMP)
86 #define I2C_FASTMODEPLUS_I2C3           SYSCFG_CFGR2_I2C3_FMP                           /*!< Enable Fast Mode Plus on I2C3 pins */
87 #else
88 #define I2C_FASTMODEPLUS_I2C3           (uint32_t)(0x00000400U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C3 not supported  */
89 #endif
90 /**
91   * @}
92   */
93 
94 /**
95   * @}
96   */
97 
98 /* Exported macro ------------------------------------------------------------*/
99 /* Exported functions --------------------------------------------------------*/
100 
101 /** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions
102   * @{
103   */
104 
105 /** @addtogroup I2CEx_Exported_Functions_Group1 Extended features functions
106   * @brief    Extended features functions
107   * @{
108   */
109 
110 /* Peripheral Control functions  ************************************************/
111 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter);
112 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter);
113 HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c);
114 HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c);
115 void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus);
116 void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
117 
118 /* Private constants ---------------------------------------------------------*/
119 /** @defgroup I2CEx_Private_Constants I2C Extended Private Constants
120   * @{
121   */
122 
123 /**
124   * @}
125   */
126 
127 /* Private macros ------------------------------------------------------------*/
128 /** @defgroup I2CEx_Private_Macro I2C Extended Private Macros
129   * @{
130   */
131 #define IS_I2C_ANALOG_FILTER(FILTER)    (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \
132                                           ((FILTER) == I2C_ANALOGFILTER_DISABLE))
133 
134 #define IS_I2C_DIGITAL_FILTER(FILTER)   ((FILTER) <= 0x0000000FU)
135 
136 #define IS_I2C_FASTMODEPLUS(__CONFIG__) ((((__CONFIG__) & I2C_FMP_NOT_SUPPORTED) != I2C_FMP_NOT_SUPPORTED) && \
137                                          ((((__CONFIG__) & (I2C_FASTMODEPLUS_PB6))  == I2C_FASTMODEPLUS_PB6)     || \
138                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB7))  == I2C_FASTMODEPLUS_PB7)     || \
139                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB8))  == I2C_FASTMODEPLUS_PB8)     || \
140                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_PB9))  == I2C_FASTMODEPLUS_PB9)     || \
141                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C1)) == I2C_FASTMODEPLUS_I2C1)    || \
142                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C2)) == I2C_FASTMODEPLUS_I2C2)    || \
143                                           (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C3)) == I2C_FASTMODEPLUS_I2C3)))
144 /**
145   * @}
146   */
147 
148 /* Private Functions ---------------------------------------------------------*/
149 /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions
150   * @{
151   */
152 /* Private functions are defined in stm32l0xx_hal_i2c_ex.c file */
153 /**
154   * @}
155   */
156 
157 /**
158   * @}
159   */
160 
161 /**
162   * @}
163   */
164 
165 /**
166   * @}
167   */
168 
169 /**
170   * @}
171   */
172 
173 #ifdef __cplusplus
174 }
175 #endif
176 
177 #endif /* __STM32L0xx_HAL_I2C_EX_H */
178 
179 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
180