1 /**
2   ******************************************************************************
3   * @file    stm32mp1xx_hal_gpio.h
4   * @author  MCD Application Team
5   * @brief   Header file of GPIO HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2019 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 __STM32MP1xx_HAL_GPIO_H
21 #define __STM32MP1xx_HAL_GPIO_H
22 
23 #ifdef __cplusplus
24  extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32mp1xx_hal_def.h"
29 
30 /** @addtogroup STM32MP1xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup GPIO
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /** @defgroup GPIO_Exported_Types GPIO Exported Types
40   * @{
41   */
42 
43 /**
44   * @brief   GPIO Init structure definition
45   */
46 typedef struct
47 {
48   uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
49                            This parameter can be any value of @ref GPIO_pins_define */
50 
51   uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
52                            This parameter can be a value of @ref GPIO_mode_define */
53 
54   uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
55                            This parameter can be a value of @ref GPIO_pull_define */
56 
57   uint32_t Speed;     /*!< Specifies the speed for the selected pins.
58                            This parameter can be a value of @ref GPIO_speed_define */
59 
60   uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins.
61                             This parameter can be a value of @ref GPIO_Alternate_function_selection */
62 }GPIO_InitTypeDef;
63 
64 /**
65   * @brief  GPIO Bit SET and Bit RESET enumeration
66   */
67 typedef enum
68 {
69   GPIO_PIN_RESET = 0,
70   GPIO_PIN_SET
71 }GPIO_PinState;
72 /**
73   * @}
74   */
75 
76 /* Exported constants --------------------------------------------------------*/
77 
78 /** @defgroup GPIO_Exported_Constants  GPIO Exported Constants
79   * @{
80   */
81 
82 /** @defgroup GPIO_pins_define  GPIO pins define
83   * @{
84   */
85 #define GPIO_PIN_0                 ((uint16_t)0x0001U)  /* Pin 0 selected    */
86 #define GPIO_PIN_1                 ((uint16_t)0x0002U)  /* Pin 1 selected    */
87 #define GPIO_PIN_2                 ((uint16_t)0x0004U)  /* Pin 2 selected    */
88 #define GPIO_PIN_3                 ((uint16_t)0x0008U)  /* Pin 3 selected    */
89 #define GPIO_PIN_4                 ((uint16_t)0x0010U)  /* Pin 4 selected    */
90 #define GPIO_PIN_5                 ((uint16_t)0x0020U)  /* Pin 5 selected    */
91 #define GPIO_PIN_6                 ((uint16_t)0x0040U)  /* Pin 6 selected    */
92 #define GPIO_PIN_7                 ((uint16_t)0x0080U)  /* Pin 7 selected    */
93 #define GPIO_PIN_8                 ((uint16_t)0x0100U)  /* Pin 8 selected    */
94 #define GPIO_PIN_9                 ((uint16_t)0x0200U)  /* Pin 9 selected    */
95 #define GPIO_PIN_10                ((uint16_t)0x0400U)  /* Pin 10 selected   */
96 #define GPIO_PIN_11                ((uint16_t)0x0800U)  /* Pin 11 selected   */
97 #define GPIO_PIN_12                ((uint16_t)0x1000U)  /* Pin 12 selected   */
98 #define GPIO_PIN_13                ((uint16_t)0x2000U)  /* Pin 13 selected   */
99 #define GPIO_PIN_14                ((uint16_t)0x4000U)  /* Pin 14 selected   */
100 #define GPIO_PIN_15                ((uint16_t)0x8000U)  /* Pin 15 selected   */
101 #define GPIO_PIN_All               ((uint16_t)0xFFFFU)  /* All pins selected */
102 
103 #define GPIO_PIN_MASK              ((uint32_t)0x0000FFFFU) /* PIN mask for assert test */
104 /**
105   * @}
106   */
107 
108 /** @defgroup GPIO_mode_define  GPIO mode define
109   * @brief GPIO Configuration Mode
110   *        Elements values convention: 0xX0yz00YZ
111   *           - X  : GPIO mode or EXTI Mode
112   *           - y  : External IT or Event trigger detection
113   *           - z  : IO configuration on External IT or Event
114   *           - Y  : Output type (Push Pull or Open Drain)
115   *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)
116   * @{
117   */
118 #define  GPIO_MODE_INPUT                        ((uint32_t)0x00000000U)   /*!< Input Floating Mode                   */
119 #define  GPIO_MODE_OUTPUT_PP                    ((uint32_t)0x00000001U)   /*!< Output Push Pull Mode                 */
120 #define  GPIO_MODE_OUTPUT_OD                    ((uint32_t)0x00000011U)   /*!< Output Open Drain Mode                */
121 #define  GPIO_MODE_AF_PP                        ((uint32_t)0x00000002U)   /*!< Alternate Function Push Pull Mode     */
122 #define  GPIO_MODE_AF_OD                        ((uint32_t)0x00000012U)   /*!< Alternate Function Open Drain Mode    */
123 
124 #define GPIO_MODE_AF                            GPIO_MODE_AF_PP           /*!< Alternate Function for Input PIN      */
125 
126 #define  GPIO_MODE_ANALOG                       ((uint32_t)0x00000003U)   /*!< Analog Mode  */
127 
128 #define  GPIO_MODE_IT_RISING                ((uint32_t)0x10110000U)   /*!< External Interrupt Mode with Rising edge trigger detection          */
129 #define  GPIO_MODE_IT_FALLING               ((uint32_t)0x10210000U)   /*!< External Interrupt Mode with Falling edge trigger detection         */
130 #define  GPIO_MODE_IT_RISING_FALLING        ((uint32_t)0x10310000U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */
131 
132 #define  GPIO_MODE_EVT_RISING               ((uint32_t)0x10120000U)   /*!< External Event Mode with Rising edge trigger detection               */
133 #define  GPIO_MODE_EVT_FALLING              ((uint32_t)0x10220000U)   /*!< External Event Mode with Falling edge trigger detection              */
134 #define  GPIO_MODE_EVT_RISING_FALLING       ((uint32_t)0x10320000U)   /*!< External Event Mode with Rising/Falling edge trigger detection       */
135 /**
136   * @}
137   */
138 
139 /** @defgroup GPIO_speed_define  GPIO speed define
140   * @brief GPIO Output Maximum frequency
141   * @{
142   */
143 #define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
144 #define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
145 #define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */
146 #define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */
147 /**
148   * @}
149   */
150 
151  /** @defgroup GPIO_pull_define  GPIO pull define
152    * @brief GPIO Pull-Up or Pull-Down Activation
153    * @{
154    */
155 #define  GPIO_NOPULL        ((uint32_t)0x00000000U)   /*!< No Pull-up or Pull-down activation  */
156 #define  GPIO_PULLUP        ((uint32_t)0x00000001U)   /*!< Pull-up activation                  */
157 #define  GPIO_PULLDOWN      ((uint32_t)0x00000002U)   /*!< Pull-down activation                */
158 /**
159   * @}
160   */
161 
162 /**
163   * @}
164   */
165 
166 /* Exported macro ------------------------------------------------------------*/
167 /** @defgroup GPIO_Exported_Macros GPIO Exported Macros
168   * @{
169   */
170 
171 /**
172   * @brief  Checks whether the specified EXTI line is asserted or not.
173 
174   * @param  __EXTI_LINE__: specifies the EXTI line to check.
175   *          This parameter can be GPIO_PIN_x where x can be(0..15)
176   * @retval The new state of __EXTI_LINE__ (SET or RESET).
177   */
178 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) ((EXTI->RPR1 & (__EXTI_LINE__)) | (EXTI->FPR1 & (__EXTI_LINE__)))
179 
180 /**
181   * @brief  Clears the EXTI's line pending bits.
182   * @param  __EXTI_LINE__: specifies the EXTI lines to clear.
183   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
184 
185   * @retval None
186   */
187 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) do { \
188                                                      EXTI->RPR1 = (__EXTI_LINE__); \
189                                                      EXTI->FPR1 = (__EXTI_LINE__); \
190                                                    } while (0);
191 
192 /**
193   * @brief  Checks whether the specified EXTI line is asserted or not for Rising edge.
194 
195   * @param  __EXTI_LINE__: specifies the EXTI line to check.
196   *          This parameter can be GPIO_PIN_x where x can be(0..15)
197   * @retval The new state of __EXTI_LINE__ (SET or RESET).
198   */
199 #define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 & (__EXTI_LINE__))
200 
201 /**
202   * @brief  Checks whether the specified EXTI line is asserted or not for Falling edge.
203 
204   * @param  __EXTI_LINE__: specifies the EXTI line to check.
205   *          This parameter can be GPIO_PIN_x where x can be(0..15)
206   * @retval The new state of __EXTI_LINE__ (SET or RESET).
207   */
208 #define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 & (__EXTI_LINE__))
209 
210 /**
211   * @brief  Clears the EXTI's line pending bits for Risng edge.
212   * @param  __EXTI_LINE__: specifies the EXTI lines to clear.
213   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
214   * @retval None
215   */
216 #define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__) do { \
217                                                        EXTI->RPR1 = (__EXTI_LINE__); \
218                                                      } while (0);
219 
220 /**
221   * @brief  Clears the EXTI's line pending bits for Falling edge.
222   * @param  __EXTI_LINE__: specifies the EXTI lines to clear.
223   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
224   * @retval None
225   */
226 #define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__) do { \
227                                                        EXTI->FPR1 = (__EXTI_LINE__); \
228                                                      } while (0);
229 
230 /**
231   * @brief  Generates a Software interrupt on selected EXTI line.
232   * @param  __EXTI_LINE__: specifies the EXTI line to check.
233   *          This parameter can be GPIO_PIN_x where x can be(0..15)
234   * @retval None
235 
236   */
237 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 |= (__EXTI_LINE__))
238 
239 /**
240   * @brief  Check whether the specified EXTI line flag is set or not.
241   * @param  __EXTI_LINE__ specifies the EXTI line flag to check.
242   *         This parameter can be GPIO_PIN_x where x can be(0..15)
243   * @retval The new state of __EXTI_LINE__ (SET or RESET).
244   */
245 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__)       __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)
246 
247 /**
248   * @brief  Clear the EXTI line pending flags.
249   * @param  __EXTI_LINE__ specifies the EXTI lines flags to clear.
250   *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
251   * @retval None
252   */
253 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__)     __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)
254 
255 /**
256   * @}
257   */
258 
259 /* Include GPIO HAL Extension module */
260 #include "stm32mp1xx_hal_gpio_ex.h"
261 
262 /* Exported functions --------------------------------------------------------*/
263 /** @addtogroup GPIO_Exported_Functions
264   * @{
265   */
266 
267 /** @addtogroup GPIO_Exported_Functions_Group1
268   * @{
269   */
270 /* Initialization and de-initialization functions *****************************/
271 void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
272 void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
273 /**
274   * @}
275   */
276 
277 /** @addtogroup GPIO_Exported_Functions_Group2
278   * @{
279   */
280 /* IO operation functions *****************************************************/
281 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
282 void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
283 void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
284 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
285 void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
286 void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin);
287 void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin);
288 
289 /**
290   * @}
291   */
292 
293 /**
294   * @}
295   */
296 /* Private types -------------------------------------------------------------*/
297 /* Private variables ---------------------------------------------------------*/
298 /* Private constants ---------------------------------------------------------*/
299 /** @defgroup GPIO_Private_Constants GPIO Private Constants
300   * @{
301   */
302 
303 /**
304   * @}
305   */
306 
307 /* Private macros ------------------------------------------------------------*/
308 /** @defgroup GPIO_Private_Macros GPIO Private Macros
309   * @{
310   */
311 #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
312 
313 #define IS_GPIO_PIN(__PIN__)       ((((uint32_t)(__PIN__) & GPIO_PIN_MASK ) != 0x00u) &&\
314                                     (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00u))
315 
316 #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\
317                             ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\
318                             ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\
319                             ((MODE) == GPIO_MODE_AF_PP)              ||\
320                             ((MODE) == GPIO_MODE_AF_OD)              ||\
321                             ((MODE) == GPIO_MODE_IT_RISING)          ||\
322                             ((MODE) == GPIO_MODE_IT_FALLING)         ||\
323                             ((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\
324                             ((MODE) == GPIO_MODE_EVT_RISING)         ||\
325                             ((MODE) == GPIO_MODE_EVT_FALLING)        ||\
326                             ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
327                             ((MODE) == GPIO_MODE_ANALOG))
328 
329 #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW)  || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \
330                               ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH))
331 
332 #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
333                             ((PULL) == GPIO_PULLDOWN))
334 /**
335   * @}
336   */
337 
338 /* Private functions ---------------------------------------------------------*/
339 /** @defgroup GPIO_Private_Functions GPIO Private Functions
340   * @{
341   */
342 
343 /**
344   * @}
345   */
346 
347 /**
348   * @}
349   */
350 
351 /**
352   * @}
353   */
354 
355 #ifdef __cplusplus
356 }
357 #endif
358 
359 #endif /* __STM32MP1xx_HAL_GPIO_H */
360