1 /**
2 ******************************************************************************
3 * @file stm32u5xx_ll_lpgpio.h
4 * @author MCD Application Team
5 * @brief Header file of LPGPIO LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2021 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 STM32U5xx_LL_LPGPIO_H
21 #define STM32U5xx_LL_LPGPIO_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u5xx.h"
29
30 /** @addtogroup STM32U5xx_LL_Driver
31 * @{
32 */
33
34 #if defined (LPGPIO1)
35
36 /** @defgroup LPGPIO_LL LPGPIO
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 #if defined(USE_FULL_LL_DRIVER)
45 /** @defgroup LPGPIO_LL_Private_Macros LPGPIO Private Macros
46 * @{
47 */
48
49 /**
50 * @}
51 */
52 #endif /*USE_FULL_LL_DRIVER*/
53
54 /* Exported types ------------------------------------------------------------*/
55 #if defined(USE_FULL_LL_DRIVER)
56 /** @defgroup LPGPIO_LL_ES_INIT LPGPIO Exported Init structures
57 * @{
58 */
59
60 /**
61 * @brief LL LPGPIO Init Structure definition
62 */
63 typedef struct
64 {
65 uint32_t Pin; /*!< Specifies the LPGPIO pins to be configured.
66 This parameter can be any value of @ref LPGPIO_LL_EC_PIN */
67
68 uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
69 This parameter can be a value of @ref LPGPIO_LL_EC_MODE.*/
70
71 } LL_LPGPIO_InitTypeDef;
72
73 /**
74 * @}
75 */
76 #endif /* USE_FULL_LL_DRIVER */
77
78 /* Exported constants --------------------------------------------------------*/
79 /** @defgroup LPGPIO_LL_Exported_Constants LPGPIO Exported Constants
80 * @{
81 */
82
83 /** @defgroup LPGPIO_LL_EC_PIN PIN
84 * @{
85 */
86 #define LL_LPGPIO_PIN_0 LPGPIO_BSRR_BS0 /*!< Select pin 0 */
87 #define LL_LPGPIO_PIN_1 LPGPIO_BSRR_BS1 /*!< Select pin 1 */
88 #define LL_LPGPIO_PIN_2 LPGPIO_BSRR_BS2 /*!< Select pin 2 */
89 #define LL_LPGPIO_PIN_3 LPGPIO_BSRR_BS3 /*!< Select pin 3 */
90 #define LL_LPGPIO_PIN_4 LPGPIO_BSRR_BS4 /*!< Select pin 4 */
91 #define LL_LPGPIO_PIN_5 LPGPIO_BSRR_BS5 /*!< Select pin 5 */
92 #define LL_LPGPIO_PIN_6 LPGPIO_BSRR_BS6 /*!< Select pin 6 */
93 #define LL_LPGPIO_PIN_7 LPGPIO_BSRR_BS7 /*!< Select pin 7 */
94 #define LL_LPGPIO_PIN_8 LPGPIO_BSRR_BS8 /*!< Select pin 8 */
95 #define LL_LPGPIO_PIN_9 LPGPIO_BSRR_BS9 /*!< Select pin 9 */
96 #define LL_LPGPIO_PIN_10 LPGPIO_BSRR_BS10 /*!< Select pin 10 */
97 #define LL_LPGPIO_PIN_11 LPGPIO_BSRR_BS11 /*!< Select pin 11 */
98 #define LL_LPGPIO_PIN_12 LPGPIO_BSRR_BS12 /*!< Select pin 12 */
99 #define LL_LPGPIO_PIN_13 LPGPIO_BSRR_BS13 /*!< Select pin 13 */
100 #define LL_LPGPIO_PIN_14 LPGPIO_BSRR_BS14 /*!< Select pin 14 */
101 #define LL_LPGPIO_PIN_15 LPGPIO_BSRR_BS15 /*!< Select pin 15 */
102 #define LL_LPGPIO_PIN_ALL (LPGPIO_BSRR_BS0 | LPGPIO_BSRR_BS1 | LPGPIO_BSRR_BS2 | \
103 LPGPIO_BSRR_BS3 | LPGPIO_BSRR_BS4 | LPGPIO_BSRR_BS5 | \
104 LPGPIO_BSRR_BS6 | LPGPIO_BSRR_BS7 | LPGPIO_BSRR_BS8 | \
105 LPGPIO_BSRR_BS9 | LPGPIO_BSRR_BS10 | LPGPIO_BSRR_BS11 | \
106 LPGPIO_BSRR_BS12 | LPGPIO_BSRR_BS13 | LPGPIO_BSRR_BS14 | \
107 LPGPIO_BSRR_BS15) /*!< Select all pins */
108 /**
109 * @}
110 */
111
112 /** @defgroup LPGPIO_LL_EC_MODE Mode
113 * @{
114 */
115 #define LL_LPGPIO_MODE_INPUT (0x00000000U) /*!< Select input mode */
116 #define LL_LPGPIO_MODE_OUTPUT LPGPIO_MODER_MOD0 /*!< Select output mode */
117 /**
118 * @}
119 */
120
121 /**
122 * @}
123 */
124
125 /* Exported macro ------------------------------------------------------------*/
126 /** @defgroup LPGPIO_LL_Exported_Macros LPGPIO Exported Macros
127 * @{
128 */
129
130 /** @defgroup LPGPIO_LL_EM_WRITE_READ Common Write and read registers Macros
131 * @{
132 */
133
134 /**
135 * @brief Write a value in LPGPIO register
136 * @param __INSTANCE__ LPGPIO Instance
137 * @param __REG__ Register to be written
138 * @param __VALUE__ Value to be written in the register
139 * @retval None
140 */
141 #define LL_LPGPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
142
143 /**
144 * @brief Read a value in LPGPIO register
145 * @param __INSTANCE__ LPGPIO Instance
146 * @param __REG__ Register to be read
147 * @retval Register value
148 */
149 #define LL_LPGPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
150 /**
151 * @}
152 */
153
154 /**
155 * @}
156 */
157
158 /* Exported functions --------------------------------------------------------*/
159 /** @defgroup LPGPIO_LL_Exported_Functions LPGPIO Exported Functions
160 * @{
161 */
162
163 /** @defgroup LPGPIO_LL_EF_Port_Configuration Port Configuration
164 * @{
165 */
166
167 /**
168 * @brief Configure lpgpio mode for a dedicated pin on dedicated port.
169 * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
170 * @note Warning: only one pin can be passed as parameter.
171 * @rmtoll MODER MODEy LL_LPGPIO_SetPinMode
172 * @param LPGPIOx LPGPIO Port
173 * @param Pin This parameter can be one of the following values:
174 * @arg @ref LL_LPGPIO_PIN_0
175 * @arg @ref LL_LPGPIO_PIN_1
176 * @arg @ref LL_LPGPIO_PIN_2
177 * @arg @ref LL_LPGPIO_PIN_3
178 * @arg @ref LL_LPGPIO_PIN_4
179 * @arg @ref LL_LPGPIO_PIN_5
180 * @arg @ref LL_LPGPIO_PIN_6
181 * @arg @ref LL_LPGPIO_PIN_7
182 * @arg @ref LL_LPGPIO_PIN_8
183 * @arg @ref LL_LPGPIO_PIN_9
184 * @arg @ref LL_LPGPIO_PIN_10
185 * @arg @ref LL_LPGPIO_PIN_11
186 * @arg @ref LL_LPGPIO_PIN_12
187 * @arg @ref LL_LPGPIO_PIN_13
188 * @arg @ref LL_LPGPIO_PIN_14
189 * @arg @ref LL_LPGPIO_PIN_15
190 * @param Mode This parameter can be one of the following values:
191 * @arg @ref LL_LPGPIO_MODE_INPUT
192 * @arg @ref LL_LPGPIO_MODE_OUTPUT
193 * @retval None
194 */
LL_LPGPIO_SetPinMode(GPIO_TypeDef * LPGPIOx,uint32_t Pin,uint32_t Mode)195 __STATIC_INLINE void LL_LPGPIO_SetPinMode(GPIO_TypeDef *LPGPIOx, uint32_t Pin, uint32_t Mode)
196 {
197 MODIFY_REG(LPGPIOx->MODER, (LPGPIO_MODER_MOD0 << (POSITION_VAL(Pin))), (Mode << (POSITION_VAL(Pin))));
198 }
199
200 /**
201 * @brief Return lpgpio mode for a dedicated pin on dedicated port.
202 * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
203 * @note Warning: only one pin can be passed as parameter.
204 * @rmtoll MODER MODEy LL_LPGPIO_GetPinMode
205 * @param LPGPIOx LPGPIO Port
206 * @param Pin This parameter can be one of the following values:
207 * @arg @ref LL_LPGPIO_PIN_0
208 * @arg @ref LL_LPGPIO_PIN_1
209 * @arg @ref LL_LPGPIO_PIN_2
210 * @arg @ref LL_LPGPIO_PIN_3
211 * @arg @ref LL_LPGPIO_PIN_4
212 * @arg @ref LL_LPGPIO_PIN_5
213 * @arg @ref LL_LPGPIO_PIN_6
214 * @arg @ref LL_LPGPIO_PIN_7
215 * @arg @ref LL_LPGPIO_PIN_8
216 * @arg @ref LL_LPGPIO_PIN_9
217 * @arg @ref LL_LPGPIO_PIN_10
218 * @arg @ref LL_LPGPIO_PIN_11
219 * @arg @ref LL_LPGPIO_PIN_12
220 * @arg @ref LL_LPGPIO_PIN_13
221 * @arg @ref LL_LPGPIO_PIN_14
222 * @arg @ref LL_LPGPIO_PIN_15
223 * @retval Returned value can be one of the following values:
224 * @arg @ref LL_LPGPIO_MODE_INPUT
225 * @arg @ref LL_LPGPIO_MODE_OUTPUT
226 */
LL_LPGPIO_GetPinMode(const GPIO_TypeDef * LPGPIOx,uint32_t Pin)227 __STATIC_INLINE uint32_t LL_LPGPIO_GetPinMode(const GPIO_TypeDef *LPGPIOx, uint32_t Pin)
228 {
229 return (uint32_t)(READ_BIT(LPGPIOx->MODER,
230 (LPGPIO_MODER_MOD0 << (POSITION_VAL(Pin)))) >> (POSITION_VAL(Pin)));
231 }
232
233 /**
234 * @}
235 */
236
237
238 /** @defgroup LPGPIO_LL_EF_Data_Access Data Access
239 * @{
240 */
241
242 /**
243 * @brief Return full input data register value for a dedicated port.
244 * @rmtoll IDR IDy LL_LPGPIO_ReadInputPort
245 * @param LPGPIOx LPGPIO Port
246 * @retval Input data register value of port
247 */
LL_LPGPIO_ReadInputPort(const GPIO_TypeDef * LPGPIOx)248 __STATIC_INLINE uint32_t LL_LPGPIO_ReadInputPort(const GPIO_TypeDef *LPGPIOx)
249 {
250 return (uint32_t)(READ_REG(LPGPIOx->IDR));
251 }
252
253 /**
254 * @brief Return if input data level for several pins of dedicated port is high or low.
255 * @rmtoll IDR IDy LL_LPGPIO_IsInputPinSet
256 * @param LPGPIOx LPGPIO Port
257 * @param PinMask This parameter can be a combination of the following values:
258 * @arg @ref LL_LPGPIO_PIN_0
259 * @arg @ref LL_LPGPIO_PIN_1
260 * @arg @ref LL_LPGPIO_PIN_2
261 * @arg @ref LL_LPGPIO_PIN_3
262 * @arg @ref LL_LPGPIO_PIN_4
263 * @arg @ref LL_LPGPIO_PIN_5
264 * @arg @ref LL_LPGPIO_PIN_6
265 * @arg @ref LL_LPGPIO_PIN_7
266 * @arg @ref LL_LPGPIO_PIN_8
267 * @arg @ref LL_LPGPIO_PIN_9
268 * @arg @ref LL_LPGPIO_PIN_10
269 * @arg @ref LL_LPGPIO_PIN_11
270 * @arg @ref LL_LPGPIO_PIN_12
271 * @arg @ref LL_LPGPIO_PIN_13
272 * @arg @ref LL_LPGPIO_PIN_14
273 * @arg @ref LL_LPGPIO_PIN_15
274 * @arg @ref LL_LPGPIO_PIN_ALL
275 * @retval State of bit (1 or 0).
276 */
LL_LPGPIO_IsInputPinSet(const GPIO_TypeDef * LPGPIOx,uint32_t PinMask)277 __STATIC_INLINE uint32_t LL_LPGPIO_IsInputPinSet(const GPIO_TypeDef *LPGPIOx, uint32_t PinMask)
278 {
279 return ((READ_BIT(LPGPIOx->IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
280 }
281
282 /**
283 * @brief Write output data register for the port.
284 * @rmtoll ODR ODy LL_LPGPIO_WriteOutputPort
285 * @param LPGPIOx LPGPIO Port
286 * @param PortValue Level value for each pin of the port
287 Value between 0 and 0xFFFF
288 * @retval None
289 */
LL_LPGPIO_WriteOutputPort(GPIO_TypeDef * LPGPIOx,uint32_t PortValue)290 __STATIC_INLINE void LL_LPGPIO_WriteOutputPort(GPIO_TypeDef *LPGPIOx, uint32_t PortValue)
291 {
292 WRITE_REG(LPGPIOx->ODR, PortValue);
293 }
294
295 /**
296 * @brief Return full output data register value for a dedicated port.
297 * @rmtoll ODR ODy LL_LPGPIO_ReadOutputPort
298 * @param LPGPIOx LPGPIO Port
299 * @retval Output data register value of port
300 */
LL_LPGPIO_ReadOutputPort(const GPIO_TypeDef * LPGPIOx)301 __STATIC_INLINE uint32_t LL_LPGPIO_ReadOutputPort(const GPIO_TypeDef *LPGPIOx)
302 {
303 return (uint32_t)(READ_REG(LPGPIOx->ODR));
304 }
305
306 /**
307 * @brief Return if input data level for several pins of dedicated port is high or low.
308 * @rmtoll ODR ODy LL_LPGPIO_IsOutputPinSet
309 * @param LPGPIOx LPGPIO Port
310 * @param PinMask This parameter can be a combination of the following values:
311 * @arg @ref LL_LPGPIO_PIN_0
312 * @arg @ref LL_LPGPIO_PIN_1
313 * @arg @ref LL_LPGPIO_PIN_2
314 * @arg @ref LL_LPGPIO_PIN_3
315 * @arg @ref LL_LPGPIO_PIN_4
316 * @arg @ref LL_LPGPIO_PIN_5
317 * @arg @ref LL_LPGPIO_PIN_6
318 * @arg @ref LL_LPGPIO_PIN_7
319 * @arg @ref LL_LPGPIO_PIN_8
320 * @arg @ref LL_LPGPIO_PIN_9
321 * @arg @ref LL_LPGPIO_PIN_10
322 * @arg @ref LL_LPGPIO_PIN_11
323 * @arg @ref LL_LPGPIO_PIN_12
324 * @arg @ref LL_LPGPIO_PIN_13
325 * @arg @ref LL_LPGPIO_PIN_14
326 * @arg @ref LL_LPGPIO_PIN_15
327 * @arg @ref LL_LPGPIO_PIN_ALL
328 * @retval State of bit (1 or 0).
329 */
LL_LPGPIO_IsOutputPinSet(const GPIO_TypeDef * LPGPIOx,uint32_t PinMask)330 __STATIC_INLINE uint32_t LL_LPGPIO_IsOutputPinSet(const GPIO_TypeDef *LPGPIOx, uint32_t PinMask)
331 {
332 return ((READ_BIT(LPGPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
333 }
334
335 /**
336 * @brief Set several pins to high level on dedicated gpio port.
337 * @rmtoll BSRR BSy LL_LPGPIO_SetOutputPin
338 * @param LPGPIOx LPGPIO Port
339 * @param PinMask This parameter can be a combination of the following values:
340 * @arg @ref LL_LPGPIO_PIN_0
341 * @arg @ref LL_LPGPIO_PIN_1
342 * @arg @ref LL_LPGPIO_PIN_2
343 * @arg @ref LL_LPGPIO_PIN_3
344 * @arg @ref LL_LPGPIO_PIN_4
345 * @arg @ref LL_LPGPIO_PIN_5
346 * @arg @ref LL_LPGPIO_PIN_6
347 * @arg @ref LL_LPGPIO_PIN_7
348 * @arg @ref LL_LPGPIO_PIN_8
349 * @arg @ref LL_LPGPIO_PIN_9
350 * @arg @ref LL_LPGPIO_PIN_10
351 * @arg @ref LL_LPGPIO_PIN_11
352 * @arg @ref LL_LPGPIO_PIN_12
353 * @arg @ref LL_LPGPIO_PIN_13
354 * @arg @ref LL_LPGPIO_PIN_14
355 * @arg @ref LL_LPGPIO_PIN_15
356 * @arg @ref LL_LPGPIO_PIN_ALL
357 * @retval None
358 */
LL_LPGPIO_SetOutputPin(GPIO_TypeDef * LPGPIOx,uint32_t PinMask)359 __STATIC_INLINE void LL_LPGPIO_SetOutputPin(GPIO_TypeDef *LPGPIOx, uint32_t PinMask)
360 {
361 WRITE_REG(LPGPIOx->BSRR, PinMask);
362 }
363
364 /**
365 * @brief Set several pins to low level on dedicated gpio port.
366 * @rmtoll BRR BRy LL_LPGPIO_ResetOutputPin
367 * @param LPGPIOx LPGPIO Port
368 * @param PinMask This parameter can be a combination of the following values:
369 * @arg @ref LL_LPGPIO_PIN_0
370 * @arg @ref LL_LPGPIO_PIN_1
371 * @arg @ref LL_LPGPIO_PIN_2
372 * @arg @ref LL_LPGPIO_PIN_3
373 * @arg @ref LL_LPGPIO_PIN_4
374 * @arg @ref LL_LPGPIO_PIN_5
375 * @arg @ref LL_LPGPIO_PIN_6
376 * @arg @ref LL_LPGPIO_PIN_7
377 * @arg @ref LL_LPGPIO_PIN_8
378 * @arg @ref LL_LPGPIO_PIN_9
379 * @arg @ref LL_LPGPIO_PIN_10
380 * @arg @ref LL_LPGPIO_PIN_11
381 * @arg @ref LL_LPGPIO_PIN_12
382 * @arg @ref LL_LPGPIO_PIN_13
383 * @arg @ref LL_LPGPIO_PIN_14
384 * @arg @ref LL_LPGPIO_PIN_15
385 * @arg @ref LL_LPGPIO_PIN_ALL
386 * @retval None
387 */
LL_LPGPIO_ResetOutputPin(GPIO_TypeDef * LPGPIOx,uint32_t PinMask)388 __STATIC_INLINE void LL_LPGPIO_ResetOutputPin(GPIO_TypeDef *LPGPIOx, uint32_t PinMask)
389 {
390 WRITE_REG(LPGPIOx->BRR, PinMask);
391 }
392
393 /**
394 * @brief Toggle data value for several pin of dedicated port.
395 * @rmtoll ODR ODy LL_LPGPIO_TogglePin
396 * @param LPGPIOx LPGPIO Port
397 * @param PinMask This parameter can be a combination of the following values:
398 * @arg @ref LL_LPGPIO_PIN_0
399 * @arg @ref LL_LPGPIO_PIN_1
400 * @arg @ref LL_LPGPIO_PIN_2
401 * @arg @ref LL_LPGPIO_PIN_3
402 * @arg @ref LL_LPGPIO_PIN_4
403 * @arg @ref LL_LPGPIO_PIN_5
404 * @arg @ref LL_LPGPIO_PIN_6
405 * @arg @ref LL_LPGPIO_PIN_7
406 * @arg @ref LL_LPGPIO_PIN_8
407 * @arg @ref LL_LPGPIO_PIN_9
408 * @arg @ref LL_LPGPIO_PIN_10
409 * @arg @ref LL_LPGPIO_PIN_11
410 * @arg @ref LL_LPGPIO_PIN_12
411 * @arg @ref LL_LPGPIO_PIN_13
412 * @arg @ref LL_LPGPIO_PIN_14
413 * @arg @ref LL_LPGPIO_PIN_15
414 * @arg @ref LL_LPGPIO_PIN_ALL
415 * @retval None
416 */
LL_LPGPIO_TogglePin(GPIO_TypeDef * LPGPIOx,uint32_t PinMask)417 __STATIC_INLINE void LL_LPGPIO_TogglePin(GPIO_TypeDef *LPGPIOx, uint32_t PinMask)
418 {
419 WRITE_REG(LPGPIOx->ODR, READ_REG(LPGPIOx->ODR) ^ PinMask);
420 }
421
422 /**
423 * @}
424 */
425
426 /**
427 * @}
428 */
429
430 #if defined(USE_FULL_LL_DRIVER)
431 /** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
432 * @{
433 */
434
435 ErrorStatus LL_LPGPIO_DeInit(const GPIO_TypeDef *LPGPIOx);
436 ErrorStatus LL_LPGPIO_Init(GPIO_TypeDef *LPGPIOx, const LL_LPGPIO_InitTypeDef *const LPGPIO_InitStruct);
437 void LL_LPGPIO_StructInit(LL_LPGPIO_InitTypeDef *LPGPIO_InitStruct);
438
439 /**
440 * @}
441 */
442 #endif /* USE_FULL_LL_DRIVER */
443
444 /**
445 * @}
446 */
447
448 #endif /* defined (LPGPIO1) */
449 /**
450 * @}
451 */
452
453 #ifdef __cplusplus
454 }
455 #endif
456
457 #endif /* STM32U5xx_LL_LPGPIO_H */
458