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