ll_gpio.h
Go to the documentation of this file.
1 /**
2  ****************************************************************************************
3  *
4  * @file ll_gpio.h
5  * @author BLE Driver Team
6  * @brief Header file containing functions prototypes of GPIO LL library.
7  *
8  ****************************************************************************************
9  * @attention
10  #####Copyright (c) 2019 GOODIX
11  All rights reserved.
12 
13  Redistribution and use in source and binary forms, with or without
14  modification, are permitted provided that the following conditions are met:
15  * Redistributions of source code must retain the above copyright
16  notice, this list of conditions and the following disclaimer.
17  * Redistributions in binary form must reproduce the above copyright
18  notice, this list of conditions and the following disclaimer in the
19  documentation and/or other materials provided with the distribution.
20  * Neither the name of GOODIX nor the names of its contributors may be used
21  to endorse or promote products derived from this software without
22  specific prior written permission.
23 
24  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  POSSIBILITY OF SUCH DAMAGE.
35  ****************************************************************************************
36  */
37 
38 /** @addtogroup PERIPHERAL Peripheral Driver
39  * @{
40  */
41 
42 /** @addtogroup LL_DRIVER LL Driver
43  * @{
44  */
45 
46 /** @defgroup LL_GPIO GPIO
47  * @brief GPIO LL module driver.
48  * @{
49  */
50 
51 /* Define to prevent recursive inclusion -------------------------------------*/
52 #ifndef LL_GPIO_H
53 #define LL_GPIO_H
54 
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58 
59 /* Includes ------------------------------------------------------------------*/
60 #include "gr5405.h"
61 
62 #if defined (GPIO0)
63 
64 /** @defgroup GPIO_LL_STRUCTURES Structures
65  * @{
66  */
67 
68 /* Exported types ------------------------------------------------------------*/
69 /** @defgroup GPIO_LL_ES_INIT GPIO Exported init structures
70  * @{
71  */
72 
73 /**
74  * @brief LL GPIO init configuration definition
75  */
76 typedef struct _ll_gpio_init
77 {
78  uint32_t pin; /*!< Specifies the GPIO pins to be GPIO_InitStructured.
79  This parameter can be any value of @ref GPIO_LL_EC_PIN */
80 
81  uint32_t mode; /*!< Specifies the operating mode for the selected pins.
82  This parameter can be a value of @ref GPIO_LL_EC_MODE.
83 
84  GPIO HW GPIO_InitStructuration can be modified afterwards using unitary function @ref ll_gpio_set_pin_mode(). */
85 
86  uint32_t pull; /*!< Specifies the operating Pull-up/Pull down for the selected pins.
87  This parameter can be a value of @ref GPIO_LL_EC_PULL.
88 
89  GPIO HW configuration can be modified afterwards using unitary function @ref ll_gpio_set_pin_pull().*/
90 
91  uint32_t mux; /*!< Specifies the Peripheral to be connected to the selected pins.
92  This parameter can be a value of GPIO_LL_EC_MUX.
93 
94  GPIO HW GPIO_InitStructuration can be modified afterwards using unitary function
95  @ref ll_gpio_set_pin_mux(). */
96 
97  uint32_t speed; /*!< Specifies the slew rate for the selected pins.
98  This parameter can be a value of @ref GPIO_LL_EC_SPEED.
99 
100  GPIO HW GPIO_InitStructuration can be modified afterwards using unitary function
101  @ref ll_gpio_set_pin_speed(). */
102 
103  uint32_t strength; /*!< Specifies the output drive strength for the selected pins.
104  This parameter can be a value of @ref GPIO_LL_EC_STRENGTH.
105 
106  GPIO HW GPIO_InitStructuration can be modified afterwards using unitary function
107  @ref ll_gpio_set_pin_strength(). */
108 
109  uint32_t input_type; /*!< Specifies the input type for the selected pins.
110  This parameter can be a value of @ref GPIO_LL_EC_INPUT_TYPE.
111 
112  GPIO HW GPIO_InitStructuration can be modified afterwards using unitary function
113  @ref ll_gpio_set_pin_input_type(). */
114 
115  uint32_t trigger; /*!< Specifies the trigger signal active edge.
116  This parameter can be a value of @ref GPIO_LL_EC_TRIGGER. */
117 
119 
120 /** @} */
121 
122 /** @} */
123 
124 /**
125  * @defgroup GPIO_LL_MACRO Defines
126  * @{
127  */
128 
129 /* Exported constants --------------------------------------------------------*/
130 /** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
131  * @{
132  */
133 /** @defgroup GPIO_LL_PRIVATE_MACRO GPIO private macro
134  * @{
135  */
136 #define LL_GPIO_MODE_INPUT_POS ((uint32_t)0x0U) /*!< Input mode bit position GPIO_LL_EC_MODE */
137 #define LL_GPIO_MODE_OUTPUT_POS ((uint32_t)0x1U) /*!< Output mode bit position GPIO_LL_EC_MODE */
138 #define LL_GPIO_STRENGTH_DS0_MASK ((uint32_t)0x10U) /*!< DS0 mask in GPIO_LL_EC_STRENGTH */
139 #define LL_GPIO_STRENGTH_DS1_MASK ((uint32_t)0x01U) /*!< DS1 mask in GPIO_LL_EC_STRENGTH */
140 #define LL_GPIO_STRENGTH_DS0_POS ((uint32_t)0x04U) /*!< DS0 bit position in GPIO_LL_EC_STRENGTH */
141 #define LL_GPIO_STRENGTH_DS1_POS ((uint32_t)0x00U) /*!< DS1 bit position in GPIO_LL_EC_STRENGTH */
142 /** @} */
143 
144 /** @defgroup GPIO_LL_EC_PIN PIN
145  * @{
146  */
147 #define LL_GPIO_PIN_0 ((uint32_t)0x0001U) /*!< Select pin 0 */
148 #define LL_GPIO_PIN_1 ((uint32_t)0x0002U) /*!< Select pin 1 */
149 #define LL_GPIO_PIN_2 ((uint32_t)0x0004U) /*!< Select pin 2 */
150 #define LL_GPIO_PIN_3 ((uint32_t)0x0008U) /*!< Select pin 3 */
151 #define LL_GPIO_PIN_4 ((uint32_t)0x0010U) /*!< Select pin 4 */
152 #define LL_GPIO_PIN_5 ((uint32_t)0x0020U) /*!< Select pin 5 */
153 #define LL_GPIO_PIN_6 ((uint32_t)0x0040U) /*!< Select pin 6 */
154 #define LL_GPIO_PIN_7 ((uint32_t)0x0080U) /*!< Select pin 7 */
155 #define LL_GPIO_PIN_8 ((uint32_t)0x0100U) /*!< Select pin 8 */
156 #define LL_GPIO_PIN_9 ((uint32_t)0x0200U) /*!< Select pin 9 */
157 #define LL_GPIO_PIN_10 ((uint32_t)0x0400U) /*!< Select pin 10 */
158 #define LL_GPIO_PIN_11 ((uint32_t)0x0800U) /*!< Select pin 11 */
159 #define LL_GPIO_PIN_12 ((uint32_t)0x1000U) /*!< Select pin 12 */
160 #define LL_GPIO_PIN_13 ((uint32_t)0x2000U) /*!< Select pin 13 */
161 #define LL_GPIO_PIN_ALL ((uint32_t)0x3FFFU) /*!< Select all pins */
162 /** @} */
163 
164 /** @defgroup GPIO_LL_EC_MODE Mode
165  * @{
166  */
167 #define LL_GPIO_MODE_NONE ((uint32_t)0x0U) /**< No input or output */
168 #define LL_GPIO_MODE_INPUT ((uint32_t)0x1U) /**< Select input mode */
169 #define LL_GPIO_MODE_OUTPUT ((uint32_t)0x2U) /**< Select output mode */
170 #define LL_GPIO_MODE_INOUT ((uint32_t)0x3U) /**< Select input and output mode */
171 /** @} */
172 
173 /** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
174  * @{
175  */
176 #define LL_GPIO_PULL_NO ((uint32_t)0x0U) /*!< Select I/O no pull */
177 #define LL_GPIO_PULL_UP ((uint32_t)0x1U) /*!< Select I/O pull up */
178 #define LL_GPIO_PULL_DOWN ((uint32_t)0x2U) /*!< Select I/O pull down */
179 /** @} */
180 
181 /** @defgroup GPIO_LL_EC_SPEED IO Speed
182  * @{
183  */
184 #define LL_GPIO_SPEED_MEDIUM ((uint32_t)0x1U) /*!< Select medium speed slew rate */
185 #define LL_GPIO_SPEED_HIGH ((uint32_t)0x0U) /*!< Select high speed slew rate */
186 /** @} */
187 
188 /** @defgroup GPIO_LL_EC_STRENGTH IO Strength
189  * @{
190  */
191 #define LL_GPIO_STRENGTH_LOW ((uint32_t)0x00U) /*!< Select low output driver strength */
192 #define LL_GPIO_STRENGTH_MEDIUM ((uint32_t)0x01U) /*!< Select medium output driver strength */
193 #define LL_GPIO_STRENGTH_HIGH ((uint32_t)0x10U) /*!< Select high output driver strength */
194 #define LL_GPIO_STRENGTH_ULTRA ((uint32_t)0x11U) /*!< Select high output driver strength */
195 /** @} */
196 
197 /** @defgroup GPIO_LL_EC_INPUT_TYPE Input type
198  * @{
199  */
200 #define LL_GPIO_INPUT_TYPE_CMOS ((uint32_t)0x00U) /**< CMOS input */
201 #define LL_GPIO_INPUT_TYPE_SCHMITT ((uint32_t)0x01U) /**< Schmitt input */
202 /** @} */
203 
204 /** @defgroup GPIO_LL_EC_TRIGGER Interrupt Trigger
205  * @{
206  */
207 #define LL_GPIO_TRIGGER_NONE ((uint32_t)0x00U) /*!< No Trigger Mode */
208 #define LL_GPIO_TRIGGER_RISING ((uint32_t)0x01U) /*!< Trigger Rising Mode */
209 #define LL_GPIO_TRIGGER_FALLING ((uint32_t)0x02U) /*!< Trigger Falling Mode */
210 #define LL_GPIO_TRIGGER_HIGH ((uint32_t)0x03U) /*!< Trigger High Mode */
211 #define LL_GPIO_TRIGGER_LOW ((uint32_t)0x04U) /*!< Trigger Low Mode */
212 #define LL_GPIO_TRIGGER_BOTH_EDGE ((uint32_t)0x05U) /*!< Trigger Both Rising and Falling Mode */
213 /** @} */
214 
215 /** @defgroup Address of GPIOx Registers
216  * @attention x=0/1/2
217  * @{
218  */
219 #define GPIO_DATA_ADDR(x) (GPIO##x##_BASE+0x00) /*!< GPIOx_DATA_ADDR */
220 #define GPIO_DATAOUT_ADDR(x) (GPIO##x##_BASE+0x04) /*!< GPIOx_DATAOUT_ADDR */
221 #define GPIO_OUTENSET_ADDR(x) (GPIO##x##_BASE+0x10) /*!< GPIOx_OUTENSET_ADDR */
222 #define GPIO_OUTENCLR_ADDR(x) (GPIO##x##_BASE+0x14) /*!< GPIOx_OUTENCLR_ADDR */
223 #define GPIO_ALTFUNCSET_ADDR(x) (GPIO##x##_BASE+0x18) /*!< GPIOx_ALTFUNCSET_ADDR */
224 #define GPIO_ALTFUNCCLR_ADDR(x) (GPIO##x##_BASE+0x1c) /*!< GPIOx_ALTFUNCCLR_ADDR */
225 #define GPIO_INTENSET_ADDR(x) (GPIO##x##_BASE+0x20) /*!< GPIOx_INTENSET_ADDR */
226 #define GPIO_INTENCLR_ADDR(x) (GPIO##x##_BASE+0x24) /*!< GPIOx_INTENCLR_ADDR */
227 #define GPIO_INTTYPESET_ADDR(x) (GPIO##x##_BASE+0x28) /*!< GPIOx_INTTYPESET_ADDR */
228 #define GPIO_INTTYPECLR_ADDR(x) (GPIO##x##_BASE+0x2c) /*!< GPIOx_INTTYPECLR_ADDR */
229 #define GPIO_INTPOLSET_ADDR(x) (GPIO##x##_BASE+0x30) /*!< GPIOx_INTPOLSET_ADDR */
230 #define GPIO_INTPOLCLR_ADDR(x) (GPIO##x##_BASE+0x34) /*!< GPIOx_INTPOLCLR_ADDR */
231 #define GPIO_INTSTAT_ADDR(x) (GPIO##x##_BASE+0x38) /*!< GPIOx_INTSTAT_ADDR */
232 #define GPIO_INTDBESET_ADDR(x) (GPIO##x##_BASE+0x40) /*!< GPIOx_INTDBESET_ADDR */
233 #define GPIO_INTDBECLR_ADDR(x) (GPIO##x##_BASE+0x44) /*!< GPIOx_INTDBECLR_ADDR */
234 /** @} */
235 
236 /** @defgroup GPIO_LL_BITBAND_SET Set nth bit for GPIOx register 0 or 1
237  * @attention x=0/1/2,0<=n<=31
238  * @{
239  */
240 #define SET_GPIO_DATA(x,n) BIT_ADDR(GPIO_DATA_ADDR(x),n) /*!< BITBAND GPIOx_DATA_ADDR */
241 #define SET_GPIO_DATAOUT(x,n) BIT_ADDR(GPIO_DATAOUT_ADDR(x),n) /*!< BITBAND GPIOx_DATAOUT_ADDR */
242 #define SET_GPIO_OUTENSET(x,n) BIT_ADDR(GPIO_OUTENSET_ADDR(x),n) /*!< BITBAND GPIOx_OUTENSET_ADDR */
243 #define SET_GPIO_OUTENCLR(x,n) BIT_ADDR(GPIO_OUTENCLR_ADDR(x),n) /*!< BITBAND GPIOx_OUTENCLR_ADDR */
244 #define SET_GPIO_ALTFUNCSET(x,n) BIT_ADDR(GPIO_ALTFUNCSET_ADDR(x),n) /*!< BITBAND GPIOx_ALTFUNCSET_ADDR */
245 #define SET_GPIO_ALTFUNCCLR(x,n) BIT_ADDR(GPIO_ALTFUNCCLR_ADDR(x),n) /*!< BITBAND GPIOx_ALTFUNCCLR_ADDR */
246 #define SET_GPIO_INTENSET(x,n) BIT_ADDR(GPIO_INTENSET_ADDR(x),n) /*!< BITBAND GPIOx_INTENSET_ADDR */
247 #define SET_GPIO_INTENCLR(x,n) BIT_ADDR(GPIO_INTENCLR_ADDR(x),n) /*!< BITBAND GPIOx_INTENCLR_ADDR */
248 #define SET_GPIO_INTTYPESET(x,n) BIT_ADDR(GPIO_INTTYPESET_ADDR(x),n) /*!< BITBAND GPIOx_INTTYPESET_ADDR */
249 #define SET_GPIO_INTTYPECLR(x,n) BIT_ADDR(GPIO_INTTYPECLR_ADDR(x),n) /*!< BITBAND GPIOx_INTTYPECLR_ADDR */
250 #define SET_GPIO_INTPOLSET(x,n) BIT_ADDR(GPIO_INTPOLSET_ADDR(x),n) /*!< BITBAND GPIOx_INTPOLSET_ADDR */
251 #define SET_GPIO_INTPOLCLR(x,n) BIT_ADDR(GPIO_INTPOLCLR_ADDR(x),n) /*!< BITBAND GPIOx_INTPOLCLR_ADDR */
252 #define SET_GPIO_INTSTAT(x,n) BIT_ADDR(GPIO_INTSTAT_ADDR(x),n) /*!< BITBAND GPIOx_INTSTAT_ADDR */
253 #define SET_GPIO_INTDBESET(x,n) BIT_ADDR(GPIO_INTDBESET_ADDR(x),n) /*!< BITBAND GPIOx_INTDBESET_ADDR */
254 #define SET_GPIO_INTDBECLR(x,n) BIT_ADDR(GPIO_INTDBECLR_ADDR(x),n) /*!< BITBAND GPIOx_INTDBECLR_ADDR */
255 /** @} */
256 
257 /** @defgroup GPIO_LL_EC_DEFAULT_CONFIG InitStrcut default configuration
258  * @{
259  */
260 
261 /**
262  * @brief LL GPIO InitStrcut default configuration
263  */
264 #define LL_GPIO_DEFAULT_CONFIG \
265 { \
266  .pin = LL_GPIO_PIN_ALL, \
267  .mode = LL_GPIO_MODE_INPUT, \
268  .pull = LL_GPIO_PULL_DOWN, \
269  .mux = IO_MUX_GPIO, \
270  .speed = LL_GPIO_SPEED_MEDIUM, \
271  .strength = LL_GPIO_STRENGTH_MEDIUM, \
272  .input_type = LL_GPIO_INPUT_TYPE_CMOS, \
273  .trigger = LL_GPIO_TRIGGER_NONE, \
274 }
275 /** @} */
276 
277 /** @} */
278 
279 /* Exported macro ------------------------------------------------------------*/
280 /** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
281  * @{
282  */
283 
284 /** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
285  * @{
286  */
287 
288 /**
289  * @brief Write a value in GPIO register
290  * @param __instance__ GPIO instance
291  * @param __REG__ Register to be written
292  * @param __VALUE__ Value to be written in the register
293  * @retval None
294  */
295 #define LL_GPIO_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
296 
297 /**
298  * @brief Read a value in GPIO register
299  * @param __instance__ GPIO instance
300  * @param __REG__ Register to be read
301  * @retval Register value
302  */
303 #define LL_GPIO_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
304 
305 /** @} */
306 
307 /** @} */
308 
309 /* Private types -------------------------------------------------------------*/
310 /* Private variables ---------------------------------------------------------*/
311 /* Private constants ---------------------------------------------------------*/
312 /* Private macros ------------------------------------------------------------*/
313 /** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
314  * @{
315  */
316 
317 /** @brief Get the starting position of the specified GPIO instance in related pull-up/pull-down register.
318  * @param __GPIOx__ This parameter can be one of the following values:
319  * @arg GPIO0
320  * @arg GPIO1
321  * @retval none
322  */
323 #define LL_GPIO_GET_RESISTOR_POS(__GPIOx__) (((__GPIOx__) == GPIO0) ? 0 : 16)
324 
325 /** @brief Get the starting position of the specified GPIO instance in related DPAD register.
326  * @param __GPIOx__ This parameter can be one of the following values:
327  * @arg GPIO0
328  * @arg GPIO1
329  * @retval none
330  */
331 #define LL_GPIO_GET_DPAD_POS(__GPIOx__) (((__GPIOx__) == GPIO0) ? 0 : 16)
332 
333 /** @brief Get mux control register address of specified GPIO instance.
334  * @param __GPIOx__ This parameter can be one of the following values:
335  * @arg GPIO0
336  * @arg GPIO1
337  * @retval none
338  */
339 #define LL_GPIO_GET_REG_MUX_CTRL_0_7( __GPIOx__) \
340  (((__GPIOx__) == GPIO0) ? &(MCU_SUB->DPAD_MUX_CTL_00_07) : &(MCU_SUB->DPAD_MUX_CTL_16_23))
341 
342 /** @brief Get mux control register address of specified GPIO instance.
343  * @param __GPIOx__ This parameter can be one of the following values:
344  * @arg GPIO0
345  * @arg GPIO1
346  * @retval none
347  */
348 #define LL_GPIO_GET_REG_MUX_CTRL_8_15( __GPIOx__) \
349  (((__GPIOx__) == GPIO0) ? &(MCU_SUB->DPAD_MUX_CTL_08_15) : &(MCU_SUB->DPAD_MUX_CTL_24_31))
350 
351 /** @} */
352 
353 /** @} */
354 
355 /* Exported functions --------------------------------------------------------*/
356 /** @defgroup GPIO_LL_DRIVER_FUNCTIONS Functions
357  * @{
358  */
359 
360 /** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
361  * @{
362  */
363 
364 /**
365  * @brief Set several pins to input/output mode on dedicated port.
366  *
367  * Register|BitsName
368  * --------|--------
369  * OUTENSET | OUTENSET
370  * OUTENCLR | OUTENCLR
371  *
372  * @param GPIOx GPIO Port
373  * @param pin_mask This parameter can be a combination of the following values:
374  * @arg @ref LL_GPIO_PIN_0
375  * @arg @ref LL_GPIO_PIN_1
376  * @arg @ref LL_GPIO_PIN_2
377  * @arg @ref LL_GPIO_PIN_3
378  * @arg @ref LL_GPIO_PIN_4
379  * @arg @ref LL_GPIO_PIN_5
380  * @arg @ref LL_GPIO_PIN_6
381  * @arg @ref LL_GPIO_PIN_7
382  * @arg @ref LL_GPIO_PIN_8
383  * @arg @ref LL_GPIO_PIN_9
384  * @arg @ref LL_GPIO_PIN_10
385  * @arg @ref LL_GPIO_PIN_11
386  * @arg @ref LL_GPIO_PIN_12
387  * @arg @ref LL_GPIO_PIN_13
388  * @arg @ref LL_GPIO_PIN_ALL
389  * @param mode This parameter can be one of the following values:
390  * @arg @ref LL_GPIO_MODE_NONE
391  * @arg @ref LL_GPIO_MODE_INPUT
392  * @arg @ref LL_GPIO_MODE_OUTPUT
393  * @arg @ref LL_GPIO_MODE_INOUT
394  * @retval None
395  */
396 __STATIC_INLINE void ll_gpio_set_pin_mode(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t mode)
397 {
398  uint32_t ie_mask = (pin_mask << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
399  uint32_t oe_mask = (pin_mask << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
400  uint32_t ie = ((mode == LL_GPIO_MODE_INPUT) || (mode == LL_GPIO_MODE_INOUT)) ? ie_mask : 0x0000U;
401  uint32_t oe = ((mode == LL_GPIO_MODE_OUTPUT) || (mode == LL_GPIO_MODE_INOUT)) ? oe_mask : 0x0000U;
402  MODIFY_REG(MCU_PAD->DPAD_IE_BUS, ie_mask, ie);
403  WRITE_REG(GPIOx->OUTENCLR, oe_mask);
404  WRITE_REG(GPIOx->OUTENSET, oe);
405 }
406 
407 /**
408  * @brief Return gpio mode for a dedicated pin on dedicated port.
409  * @note I/O mode can be Input mode, General purpose output.
410  * @note Warning: only one pin can be passed as parameter.
411  *
412  * Register|BitsName
413  * --------|--------
414  * OUTENSET | OUTENSET
415  *
416  * @param GPIOx GPIO Port
417  * @param pin This parameter can be one of the following values:
418  * @arg @ref LL_GPIO_PIN_0
419  * @arg @ref LL_GPIO_PIN_1
420  * @arg @ref LL_GPIO_PIN_2
421  * @arg @ref LL_GPIO_PIN_3
422  * @arg @ref LL_GPIO_PIN_4
423  * @arg @ref LL_GPIO_PIN_5
424  * @arg @ref LL_GPIO_PIN_6
425  * @arg @ref LL_GPIO_PIN_7
426  * @arg @ref LL_GPIO_PIN_8
427  * @arg @ref LL_GPIO_PIN_9
428  * @arg @ref LL_GPIO_PIN_10
429  * @arg @ref LL_GPIO_PIN_11
430  * @arg @ref LL_GPIO_PIN_12
431  * @arg @ref LL_GPIO_PIN_13
432  * @retval Returned value can be one of the following values:
433  * @arg @ref LL_GPIO_MODE_NONE
434  * @arg @ref LL_GPIO_MODE_INPUT
435  * @arg @ref LL_GPIO_MODE_OUTPUT
436  * @arg @ref LL_GPIO_MODE_INOUT
437  */
438 __STATIC_INLINE uint32_t ll_gpio_get_pin_mode(gpio_regs_t *GPIOx, uint32_t pin)
439 {
440  uint32_t ie_mask = (pin << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
441  uint32_t oe_mask = (pin << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
442  uint32_t ie = READ_BITS(MCU_PAD->DPAD_IE_BUS, ie_mask) >> (POSITION_VAL(pin));
443  uint32_t oe = READ_BITS(GPIOx->OUTENSET, oe_mask) >> (POSITION_VAL(pin));
444  return (((ie >> MCU_PAD_DPAD_IE_POS) << LL_GPIO_MODE_INPUT_POS)
445  | ((oe >> GPIO_OUTENSET_Pos) << LL_GPIO_MODE_OUTPUT_POS));
446 }
447 
448 /**
449  * @brief Set several pins input type on dedicated port.
450  *
451  * Register|BitsName
452  * --------|--------
453  * OUTENSET | OUTENSET
454  * OUTENCLR | OUTENCLR
455  *
456  * @param GPIOx GPIO Port
457  * @param pin_mask This parameter can be a combination of the following values:
458  * @arg @ref LL_GPIO_PIN_0
459  * @arg @ref LL_GPIO_PIN_1
460  * @arg @ref LL_GPIO_PIN_2
461  * @arg @ref LL_GPIO_PIN_3
462  * @arg @ref LL_GPIO_PIN_4
463  * @arg @ref LL_GPIO_PIN_5
464  * @arg @ref LL_GPIO_PIN_6
465  * @arg @ref LL_GPIO_PIN_7
466  * @arg @ref LL_GPIO_PIN_8
467  * @arg @ref LL_GPIO_PIN_9
468  * @arg @ref LL_GPIO_PIN_10
469  * @arg @ref LL_GPIO_PIN_11
470  * @arg @ref LL_GPIO_PIN_12
471  * @arg @ref LL_GPIO_PIN_13
472  * @arg @ref LL_GPIO_PIN_ALL
473  * @param type This parameter can be one of the following values:
474  * @arg @ref LL_GPIO_INPUT_TYPE_CMOS
475  * @arg @ref LL_GPIO_INPUT_TYPE_SCHMITT
476  * @retval None
477  */
478 __STATIC_INLINE void ll_gpio_set_pin_input_type(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t type)
479 {
480  pin_mask = (pin_mask << MCU_PAD_DPAD_IS_POS) & MCU_PAD_DPAD_IS;
481  MODIFY_REG(MCU_PAD->DPAD_IS_BUS, pin_mask, (type == LL_GPIO_INPUT_TYPE_SCHMITT) ? pin_mask : 0);
482 }
483 
484 /**
485  * @brief Return gpio input type for a dedicated pin on dedicated port.
486  * @note I/O mode can be Input mode, General purpose output.
487  * @note Warning: only one pin can be passed as parameter.
488  *
489  * Register|BitsName
490  * --------|--------
491  * OUTENSET | OUTENSET
492  *
493  * @param GPIOx GPIO Port
494  * @param pin This parameter can be one of the following values:
495  * @arg @ref LL_GPIO_PIN_0
496  * @arg @ref LL_GPIO_PIN_1
497  * @arg @ref LL_GPIO_PIN_2
498  * @arg @ref LL_GPIO_PIN_3
499  * @arg @ref LL_GPIO_PIN_4
500  * @arg @ref LL_GPIO_PIN_5
501  * @arg @ref LL_GPIO_PIN_6
502  * @arg @ref LL_GPIO_PIN_7
503  * @arg @ref LL_GPIO_PIN_8
504  * @arg @ref LL_GPIO_PIN_9
505  * @arg @ref LL_GPIO_PIN_10
506  * @arg @ref LL_GPIO_PIN_11
507  * @arg @ref LL_GPIO_PIN_12
508  * @arg @ref LL_GPIO_PIN_13
509  * @retval Returned value can be one of the following values:
510  * @arg @ref LL_GPIO_INPUT_TYPE_CMOS
511  * @arg @ref LL_GPIO_INPUT_TYPE_SCHMITT
512  */
513 __STATIC_INLINE uint32_t ll_gpio_get_pin_input_type(gpio_regs_t *GPIOx, uint32_t pin)
514 {
515  pin = (pin << MCU_PAD_DPAD_IS_POS) & MCU_PAD_DPAD_IS;
516  return ((uint32_t)(READ_BITS(MCU_PAD->DPAD_IS_BUS, pin) == pin) ?
518 }
519 
520 /**
521  * @brief Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
522  *
523  * Register|BitsName
524  * --------|--------
525  * DPAD_PE_BUS | PE
526  * DPAD_PS_BUS | PS
527  *
528  * @param GPIOx GPIO Port
529  * @param pin_mask This parameter can be a combination of the following values:
530  * @arg @ref LL_GPIO_PIN_0
531  * @arg @ref LL_GPIO_PIN_1
532  * @arg @ref LL_GPIO_PIN_2
533  * @arg @ref LL_GPIO_PIN_3
534  * @arg @ref LL_GPIO_PIN_4
535  * @arg @ref LL_GPIO_PIN_5
536  * @arg @ref LL_GPIO_PIN_6
537  * @arg @ref LL_GPIO_PIN_7
538  * @arg @ref LL_GPIO_PIN_8
539  * @arg @ref LL_GPIO_PIN_9
540  * @arg @ref LL_GPIO_PIN_10
541  * @arg @ref LL_GPIO_PIN_11
542  * @arg @ref LL_GPIO_PIN_12
543  * @arg @ref LL_GPIO_PIN_13
544  * @param pull This parameter can be one of the following values:
545  * @arg @ref LL_GPIO_PULL_NO
546  * @arg @ref LL_GPIO_PULL_UP
547  * @arg @ref LL_GPIO_PULL_DOWN
548  * @retval None
549  */
550 __STATIC_INLINE void ll_gpio_set_pin_pull(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t pull)
551 {
552  MODIFY_REG(MCU_PAD->DPAD_PS_BUS, pin_mask, ((pull == LL_GPIO_PULL_UP) ? pin_mask : 0x0000U));
553  MODIFY_REG(MCU_PAD->DPAD_PE_BUS, pin_mask, ((pull == LL_GPIO_PULL_NO) ? 0x0000U : pin_mask));
554 }
555 
556 /**
557  * @brief Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
558  * @note Warning: only one pin can be passed as parameter.
559  *
560  * Register|BitsName
561  * --------|--------
562  * DPAD_PE_BUS | PE
563  * DPAD_PS_BUS | PS
564  *
565  * @param GPIOx GPIO Port
566  * @param pin This parameter can be one of the following values:
567  * @arg @ref LL_GPIO_PIN_0
568  * @arg @ref LL_GPIO_PIN_1
569  * @arg @ref LL_GPIO_PIN_2
570  * @arg @ref LL_GPIO_PIN_3
571  * @arg @ref LL_GPIO_PIN_4
572  * @arg @ref LL_GPIO_PIN_5
573  * @arg @ref LL_GPIO_PIN_6
574  * @arg @ref LL_GPIO_PIN_7
575  * @arg @ref LL_GPIO_PIN_8
576  * @arg @ref LL_GPIO_PIN_9
577  * @arg @ref LL_GPIO_PIN_10
578  * @arg @ref LL_GPIO_PIN_11
579  * @arg @ref LL_GPIO_PIN_12
580  * @arg @ref LL_GPIO_PIN_13
581  * @retval Returned value can be one of the following values:
582  * @arg @ref LL_GPIO_PULL_NO
583  * @arg @ref LL_GPIO_PULL_UP
584  * @arg @ref LL_GPIO_PULL_DOWN
585  */
586 __STATIC_INLINE uint32_t ll_gpio_get_pin_pull(gpio_regs_t *GPIOx, uint32_t pin)
587 {
588  return ((READ_BITS(MCU_PAD->DPAD_PE_BUS, pin) == RESET) ? LL_GPIO_PULL_NO :
589  ((READ_BITS(MCU_PAD->DPAD_PS_BUS, pin) == RESET) ? LL_GPIO_PULL_DOWN : LL_GPIO_PULL_UP));
590 }
591 
592 /**
593  * @brief Configure gpio pinmux number of a dedicated pin from 0 to 15 for a dedicated port.
594  * @note Possible values are from AF0 to AF15 depending on target.
595  * @note Warning: only one pin can be passed as parameter.
596  *
597  * Register|BitsName
598  * --------|--------
599  * DPAD_MUX | DPAD_MUX
600  *
601  * @param GPIOx GPIO Port
602  * @param pin This parameter can be one of the following values:
603  * @arg @ref LL_GPIO_PIN_0
604  * @arg @ref LL_GPIO_PIN_1
605  * @arg @ref LL_GPIO_PIN_2
606  * @arg @ref LL_GPIO_PIN_3
607  * @arg @ref LL_GPIO_PIN_4
608  * @arg @ref LL_GPIO_PIN_5
609  * @arg @ref LL_GPIO_PIN_6
610  * @arg @ref LL_GPIO_PIN_7
611  * @arg @ref LL_GPIO_PIN_8
612  * @arg @ref LL_GPIO_PIN_9
613  * @arg @ref LL_GPIO_PIN_10
614  * @arg @ref LL_GPIO_PIN_11
615  * @arg @ref LL_GPIO_PIN_12
616  * @arg @ref LL_GPIO_PIN_13
617  * @param mux This parameter can be one of the following values:
618  * IO_MUX_GPIO define
619  * @retval None
620  */
621 __STATIC_INLINE void ll_gpio_set_pin_mux(gpio_regs_t *GPIOx, uint32_t pin, uint32_t mux)
622 {
623  uint8_t id;
624  uint32_t pos;
625 
626  pin = POSITION_VAL(pin);
627  if(GPIO0 == GPIOx)
628  {
629  id = pin >> 2;
630  pos = (pin & 3) << 3; /* pos = (pin % 4) * 8 */
631  }
632  else
633  {
634  id = 4;
635  pos = pin;
636  }
637 
638  MODIFY_REG(MCU_PAD->DPAD_MUX[id], IO_MUX_BIT_MASK << pos, mux << pos);
639 }
640 
641 /**
642  * @brief Return gpio alternate function of a dedicated pin from 0 to 15 for a dedicated port.
643  * @note Possible values are from AF0 to AF15 depending on target.
644  *
645  * Register|BitsName
646  * --------|--------
647  * DPAD_MUX | DPAD_MUX
648  *
649  * @param GPIOx GPIO Port
650  * @param pin This parameter can be one of the following values:
651  * @arg @ref LL_GPIO_PIN_0
652  * @arg @ref LL_GPIO_PIN_1
653  * @arg @ref LL_GPIO_PIN_2
654  * @arg @ref LL_GPIO_PIN_3
655  * @arg @ref LL_GPIO_PIN_4
656  * @arg @ref LL_GPIO_PIN_5
657  * @arg @ref LL_GPIO_PIN_6
658  * @arg @ref LL_GPIO_PIN_7
659  * @arg @ref LL_GPIO_PIN_8
660  * @arg @ref LL_GPIO_PIN_9
661  * @arg @ref LL_GPIO_PIN_10
662  * @arg @ref LL_GPIO_PIN_11
663  * @arg @ref LL_GPIO_PIN_12
664  * @arg @ref LL_GPIO_PIN_13
665  * @retval Returned value can be one of the following values:
666  * IO_MUX_GPIO define
667  */
668 __STATIC_INLINE uint32_t ll_gpio_get_pin_mux(gpio_regs_t *GPIOx, uint32_t pin)
669 {
670  uint8_t id;
671  uint32_t pos;
672 
673  pin = POSITION_VAL(pin);
674  if(GPIO0 == GPIOx)
675  {
676  id = pin >> 2;
677  pos = (pin & 3) << 3; /* pos = (pin % 4) * 8 */
678  }
679  else
680  {
681  id = 4;
682  pos = pin;
683  }
684 
685  return (READ_BITS(MCU_PAD->DPAD_MUX[id], IO_MUX_BIT_MASK << pos) >> pos);
686 }
687 
688 /**
689  * @brief Configure gpio speed for a dedicated pin on a dedicated port.
690  *
691  * Register|BitsName
692  * --------|--------
693  * MCU_PAD | DPAD_SR_BUS
694  * MCU_PAD | DPAD_SR_BUS
695  *
696  * @param GPIOx GPIO Port
697  * @param pin_mask This parameter can be a combination of the following values:
698  * @arg @ref LL_GPIO_PIN_0
699  * @arg @ref LL_GPIO_PIN_1
700  * @arg @ref LL_GPIO_PIN_2
701  * @arg @ref LL_GPIO_PIN_3
702  * @arg @ref LL_GPIO_PIN_4
703  * @arg @ref LL_GPIO_PIN_5
704  * @arg @ref LL_GPIO_PIN_6
705  * @arg @ref LL_GPIO_PIN_7
706  * @arg @ref LL_GPIO_PIN_8
707  * @arg @ref LL_GPIO_PIN_9
708  * @arg @ref LL_GPIO_PIN_10
709  * @arg @ref LL_GPIO_PIN_11
710  * @arg @ref LL_GPIO_PIN_12
711  * @arg @ref LL_GPIO_PIN_13
712  * @param speed This parameter can be one of the following values:
713  * @arg @ref LL_GPIO_SPEED_MEDIUM
714  * @arg @ref LL_GPIO_SPEED_HIGH
715  * @retval None
716  */
717 __STATIC_INLINE void ll_gpio_set_pin_speed(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t speed)
718 {
719  if(speed)
720  {
721  MODIFY_REG(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS, pin_mask << MCU_PAD_DPAD_SR_POS);
722  }
723  else
724  {
725  MODIFY_REG(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS, 0);
726  }
727 }
728 
729 /**
730  * @brief Return gpio speed for a dedicated pin on a dedicated port
731  * @note Warning: only one pin can be passed as parameter.
732  *
733  * Register|BitsName
734  * --------|--------
735  * MCU_PAD | DPAD_SR_BUS
736  * MCU_PAD | DPAD_SR_BUS
737  *
738  * @param GPIOx GPIO Port
739  * @param pin_mask This parameter can be one of the following values:
740  * @arg @ref LL_GPIO_PIN_0
741  * @arg @ref LL_GPIO_PIN_1
742  * @arg @ref LL_GPIO_PIN_2
743  * @arg @ref LL_GPIO_PIN_3
744  * @arg @ref LL_GPIO_PIN_4
745  * @arg @ref LL_GPIO_PIN_5
746  * @arg @ref LL_GPIO_PIN_6
747  * @arg @ref LL_GPIO_PIN_7
748  * @arg @ref LL_GPIO_PIN_8
749  * @arg @ref LL_GPIO_PIN_9
750  * @arg @ref LL_GPIO_PIN_10
751  * @arg @ref LL_GPIO_PIN_11
752  * @arg @ref LL_GPIO_PIN_12
753  * @arg @ref LL_GPIO_PIN_13
754  * @retval Returned value can be one of the following values:
755  * @arg @ref LL_GPIO_SPEED_MEDIUM
756  * @arg @ref LL_GPIO_SPEED_HIGH
757  */
758 __STATIC_INLINE uint32_t ll_gpio_get_pin_speed(gpio_regs_t *GPIOx, uint32_t pin_mask)
759 {
760  uint32_t pos;
761  pos = POSITION_VAL(pin_mask);
762  return (READ_BITS(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS ) >> pos >> MCU_PAD_DPAD_SR_POS);
763 }
764 
765 /**
766  * @brief Configure gpio output drive strength for a dedicated pin on a dedicated port.
767  *
768  * Register|BitsName
769  * --------|--------
770  * MCU_PAD | DPAD_DS0_BUS
771  * MCU_PAD | DPAD_DS1_BUS
772  *
773  * @param GPIOx GPIO Port
774  * @param pin_mask This parameter can be a combination of the following values:
775  * @arg @ref LL_GPIO_PIN_0
776  * @arg @ref LL_GPIO_PIN_1
777  * @arg @ref LL_GPIO_PIN_2
778  * @arg @ref LL_GPIO_PIN_3
779  * @arg @ref LL_GPIO_PIN_4
780  * @arg @ref LL_GPIO_PIN_5
781  * @arg @ref LL_GPIO_PIN_6
782  * @arg @ref LL_GPIO_PIN_7
783  * @arg @ref LL_GPIO_PIN_8
784  * @arg @ref LL_GPIO_PIN_9
785  * @arg @ref LL_GPIO_PIN_10
786  * @arg @ref LL_GPIO_PIN_11
787  * @arg @ref LL_GPIO_PIN_12
788  * @arg @ref LL_GPIO_PIN_13
789  * @param strength This parameter can be one of the following values:
790  * @arg @ref LL_GPIO_STRENGTH_LOW
791  * @arg @ref LL_GPIO_STRENGTH_MEDIUM
792  * @arg @ref LL_GPIO_STRENGTH_HIGH
793  * @arg @ref LL_GPIO_STRENGTH_ULTRA
794  * @retval None
795  */
796 __STATIC_INLINE void ll_gpio_set_pin_strength(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t strength)
797 {
798  uint8_t ds0 = (strength & LL_GPIO_STRENGTH_DS0_MASK) >> LL_GPIO_STRENGTH_DS0_POS;
799  uint8_t ds1 = (strength & LL_GPIO_STRENGTH_DS1_MASK) >> LL_GPIO_STRENGTH_DS1_POS;
800  if(ds0)
801  {
802  MODIFY_REG(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS , pin_mask << MCU_PAD_DPAD_DS0_POS);
803  }
804  else
805  {
806  MODIFY_REG(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS , 0);
807  }
808  if(ds1)
809  {
810  MODIFY_REG(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS , pin_mask << MCU_PAD_DPAD_DS1_POS);
811  }
812  else
813  {
814  MODIFY_REG(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS , 0);
815  }
816 }
817 
818 /**
819  * @brief Return gpio output drive strength for a dedicated pin on a dedicated port
820  * @note Warning: only one pin can be passed as parameter.
821  *
822  * Register|BitsName
823  * --------|--------
824  * MCU_PAD | DPAD_DS0_BUS
825  * MCU_PAD | DPAD_DS1_BUS
826  *
827  * @param GPIOx GPIO Port
828  * @param pin_mask This parameter can be one of the following values:
829  * @arg @ref LL_GPIO_PIN_0
830  * @arg @ref LL_GPIO_PIN_1
831  * @arg @ref LL_GPIO_PIN_2
832  * @arg @ref LL_GPIO_PIN_3
833  * @arg @ref LL_GPIO_PIN_4
834  * @arg @ref LL_GPIO_PIN_5
835  * @arg @ref LL_GPIO_PIN_6
836  * @arg @ref LL_GPIO_PIN_7
837  * @arg @ref LL_GPIO_PIN_8
838  * @arg @ref LL_GPIO_PIN_9
839  * @arg @ref LL_GPIO_PIN_10
840  * @arg @ref LL_GPIO_PIN_11
841  * @arg @ref LL_GPIO_PIN_12
842  * @arg @ref LL_GPIO_PIN_13
843  * @retval Returned value can be one of the following values:
844  * @arg @ref LL_GPIO_STRENGTH_LOW
845  * @arg @ref LL_GPIO_STRENGTH_MEDIUM
846  * @arg @ref LL_GPIO_STRENGTH_HIGH
847  * @arg @ref LL_GPIO_STRENGTH_ULTRA
848  */
849 __STATIC_INLINE uint32_t ll_gpio_get_pin_strength(gpio_regs_t *GPIOx, uint32_t pin_mask)
850 {
851  uint32_t pos;
852  pos = POSITION_VAL(pin_mask);
853  uint8_t ds0 = READ_BITS(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS ) >> MCU_PAD_DPAD_DS0_POS >> pos;
854  uint8_t ds1 = READ_BITS(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS ) >> MCU_PAD_DPAD_DS1_POS >> pos;
855  return ((ds0 << LL_GPIO_STRENGTH_DS0_POS) | (ds1 << LL_GPIO_STRENGTH_DS1_POS));
856 }
857 /** @} */
858 
859 /** @defgroup GPIO_LL_EF_Data_Access Data Access
860  * @{
861  */
862 
863 /**
864  * @brief Return full input data register value for a dedicated port.
865  *
866  * Register|BitsName
867  * --------|--------
868  * DATA | DATA
869  *
870  * @param GPIOx GPIO Port
871  * @retval Input data register value of port
872  */
873 __STATIC_INLINE uint32_t ll_gpio_read_input_port(gpio_regs_t *GPIOx)
874 {
875  return (uint32_t)(READ_REG(GPIOx->DATA));
876 }
877 
878 /**
879  * @brief Return if input data level for several pins of dedicated port is high or low.
880  *
881  * Register|BitsName
882  * --------|--------
883  * DATA | DATA
884  *
885  * @param GPIOx GPIO Port
886  * @param pin_mask This parameter can be a combination of the following values:
887  * @arg @ref LL_GPIO_PIN_0
888  * @arg @ref LL_GPIO_PIN_1
889  * @arg @ref LL_GPIO_PIN_2
890  * @arg @ref LL_GPIO_PIN_3
891  * @arg @ref LL_GPIO_PIN_4
892  * @arg @ref LL_GPIO_PIN_5
893  * @arg @ref LL_GPIO_PIN_6
894  * @arg @ref LL_GPIO_PIN_7
895  * @arg @ref LL_GPIO_PIN_8
896  * @arg @ref LL_GPIO_PIN_9
897  * @arg @ref LL_GPIO_PIN_10
898  * @arg @ref LL_GPIO_PIN_11
899  * @arg @ref LL_GPIO_PIN_12
900  * @arg @ref LL_GPIO_PIN_13
901  * @arg @ref LL_GPIO_PIN_ALL
902  * @retval State of bit (1 or 0).
903  */
904 __STATIC_INLINE uint8_t ll_gpio_read_input_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
905 {
906  return (READ_BITS(GPIOx->DATA, pin_mask) == (pin_mask));
907 }
908 
909 /**
910  * @brief Write output data register for the port.
911  *
912  * Register|BitsName
913  * --------|--------
914  * DATAOUT | DATAOUT
915  *
916  * @param GPIOx GPIO Port
917  * @param port_value Level value for each pin of the port
918  * @retval None
919  */
920 __STATIC_INLINE void ll_gpio_write_output_port(gpio_regs_t *GPIOx, uint32_t port_value)
921 {
922  WRITE_REG(GPIOx->DATAOUT, port_value);
923 }
924 
925 /**
926  * @brief Return full output data register value for a dedicated port.
927  *
928  * Register|BitsName
929  * --------|--------
930  * DATAOUT | DATAOUT
931  *
932  * @param GPIOx GPIO Port
933  * @retval Output data register value of port
934  */
935 __STATIC_INLINE uint32_t ll_gpio_read_output_port(gpio_regs_t *GPIOx)
936 {
937  return (uint32_t)(READ_REG(GPIOx->DATAOUT));
938 }
939 
940 /**
941  * @brief Return if output data level for several pins of dedicated port is high or low.
942  *
943  * Register|BitsName
944  * --------|--------
945  * DATA | DATAOUT
946  *
947  * @param GPIOx GPIO Port
948  * @param pin_mask This parameter can be a combination of the following values:
949  * @arg @ref LL_GPIO_PIN_0
950  * @arg @ref LL_GPIO_PIN_1
951  * @arg @ref LL_GPIO_PIN_2
952  * @arg @ref LL_GPIO_PIN_3
953  * @arg @ref LL_GPIO_PIN_4
954  * @arg @ref LL_GPIO_PIN_5
955  * @arg @ref LL_GPIO_PIN_6
956  * @arg @ref LL_GPIO_PIN_7
957  * @arg @ref LL_GPIO_PIN_8
958  * @arg @ref LL_GPIO_PIN_9
959  * @arg @ref LL_GPIO_PIN_10
960  * @arg @ref LL_GPIO_PIN_11
961  * @arg @ref LL_GPIO_PIN_12
962  * @arg @ref LL_GPIO_PIN_13
963  * @arg @ref LL_GPIO_PIN_ALL
964  * @retval State of bit (1 or 0).
965  */
966 __STATIC_INLINE uint32_t ll_gpio_read_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
967 {
968  return (READ_BITS(GPIOx->DATAOUT, pin_mask) == (pin_mask));
969 }
970 
971 /**
972  * @brief Return if input data level for several pins of dedicated port is high or low.
973  *
974  * Register|BitsName
975  * --------|--------
976  * DATAOUT | DATAOUT
977  *
978  * @param GPIOx GPIO Port
979  * @param pin_mask This parameter can be a combination of the following values:
980  * @arg @ref LL_GPIO_PIN_0
981  * @arg @ref LL_GPIO_PIN_1
982  * @arg @ref LL_GPIO_PIN_2
983  * @arg @ref LL_GPIO_PIN_3
984  * @arg @ref LL_GPIO_PIN_4
985  * @arg @ref LL_GPIO_PIN_5
986  * @arg @ref LL_GPIO_PIN_6
987  * @arg @ref LL_GPIO_PIN_7
988  * @arg @ref LL_GPIO_PIN_8
989  * @arg @ref LL_GPIO_PIN_9
990  * @arg @ref LL_GPIO_PIN_10
991  * @arg @ref LL_GPIO_PIN_11
992  * @arg @ref LL_GPIO_PIN_12
993  * @arg @ref LL_GPIO_PIN_13
994  * @arg @ref LL_GPIO_PIN_ALL
995  * @retval State of bit (1 or 0).
996  */
997 __STATIC_INLINE uint32_t ll_gpio_is_output_pin_set(gpio_regs_t *GPIOx, uint32_t pin_mask)
998 {
999  return (READ_BITS(GPIOx->OUTENSET, pin_mask) == (pin_mask));
1000 }
1001 
1002 /**
1003  * @brief Set several pins to high level on dedicated gpio port.
1004  *
1005  * Register|BitsName
1006  * --------|--------
1007  * DATAOUT | DATAOUT
1008  *
1009  * @param GPIOx GPIO Port
1010  * @param pin_mask This parameter can be a combination of the following values:
1011  * @arg @ref LL_GPIO_PIN_0
1012  * @arg @ref LL_GPIO_PIN_1
1013  * @arg @ref LL_GPIO_PIN_2
1014  * @arg @ref LL_GPIO_PIN_3
1015  * @arg @ref LL_GPIO_PIN_4
1016  * @arg @ref LL_GPIO_PIN_5
1017  * @arg @ref LL_GPIO_PIN_6
1018  * @arg @ref LL_GPIO_PIN_7
1019  * @arg @ref LL_GPIO_PIN_8
1020  * @arg @ref LL_GPIO_PIN_9
1021  * @arg @ref LL_GPIO_PIN_10
1022  * @arg @ref LL_GPIO_PIN_11
1023  * @arg @ref LL_GPIO_PIN_12
1024  * @arg @ref LL_GPIO_PIN_13
1025  * @arg @ref LL_GPIO_PIN_ALL
1026  * @retval None
1027  */
1028 __STATIC_INLINE void ll_gpio_set_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
1029 {
1030 #ifdef USE_GPIO_MASK_REGISTER
1031  WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], pin_mask & GPIO_MASKLOWBYTE_DATA);
1032  WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> GPIO_MASKHIGHBYTE_DATA_Pos)],
1033  pin_mask & GPIO_MASKHIGHBYTE_DATA);
1034 #else
1035  SET_BITS(GPIOx->DATAOUT, pin_mask);
1036 #endif
1037 }
1038 
1039 /**
1040  * @brief Set several pins to low level on dedicated gpio port.
1041  *
1042  * Register|BitsName
1043  * --------|--------
1044  * DATAOUT | DATAOUT
1045  *
1046  * @param GPIOx GPIO Port
1047  * @param pin_mask This parameter can be a combination of the following values:
1048  * @arg @ref LL_GPIO_PIN_0
1049  * @arg @ref LL_GPIO_PIN_1
1050  * @arg @ref LL_GPIO_PIN_2
1051  * @arg @ref LL_GPIO_PIN_3
1052  * @arg @ref LL_GPIO_PIN_4
1053  * @arg @ref LL_GPIO_PIN_5
1054  * @arg @ref LL_GPIO_PIN_6
1055  * @arg @ref LL_GPIO_PIN_7
1056  * @arg @ref LL_GPIO_PIN_8
1057  * @arg @ref LL_GPIO_PIN_9
1058  * @arg @ref LL_GPIO_PIN_10
1059  * @arg @ref LL_GPIO_PIN_11
1060  * @arg @ref LL_GPIO_PIN_12
1061  * @arg @ref LL_GPIO_PIN_13
1062  * @arg @ref LL_GPIO_PIN_ALL
1063  * @retval None
1064  */
1065 __STATIC_INLINE void ll_gpio_reset_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
1066 {
1067 #ifdef USE_GPIO_MASK_REGISTER
1068  WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], 0x0000U);
1069  WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> 8)], 0x0000U);
1070 #else
1071  CLEAR_BITS(GPIOx->DATAOUT, pin_mask);
1072 #endif
1073 }
1074 
1075 /**
1076  * @brief Toggle data value for several pin of dedicated port.
1077  *
1078  * Register|BitsName
1079  * --------|--------
1080  * DATAOUT | DATAOUT
1081  *
1082  * @param GPIOx GPIO Port
1083  * @param pin_mask This parameter can be a combination of the following values:
1084  * @arg @ref LL_GPIO_PIN_0
1085  * @arg @ref LL_GPIO_PIN_1
1086  * @arg @ref LL_GPIO_PIN_2
1087  * @arg @ref LL_GPIO_PIN_3
1088  * @arg @ref LL_GPIO_PIN_4
1089  * @arg @ref LL_GPIO_PIN_5
1090  * @arg @ref LL_GPIO_PIN_6
1091  * @arg @ref LL_GPIO_PIN_7
1092  * @arg @ref LL_GPIO_PIN_8
1093  * @arg @ref LL_GPIO_PIN_9
1094  * @arg @ref LL_GPIO_PIN_10
1095  * @arg @ref LL_GPIO_PIN_11
1096  * @arg @ref LL_GPIO_PIN_12
1097  * @arg @ref LL_GPIO_PIN_13
1098  * @arg @ref LL_GPIO_PIN_ALL
1099  * @retval None
1100  */
1101 __STATIC_INLINE void ll_gpio_toggle_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
1102 {
1103  WRITE_REG(GPIOx->DATAOUT, READ_REG(GPIOx->DATAOUT) ^ pin_mask);
1104 }
1105 
1106 /** @} */
1107 
1108 /** @defgroup GPIO_LL_EF_IT_Management IT_Management
1109  * @{
1110  */
1111 
1112 /**
1113  * @brief Enable GPIO Falling Edge Trigger for pins in the range of 0 to 15.
1114  * @note
1115  *
1116  * Register|BitsName
1117  * --------|--------
1118  * INTPOLCLR | INTPOLCLR
1119  * INTTYPESET | INTTYPESET
1120  *
1121  * @param GPIOx GPIO instance.
1122  * @param pin_mask This parameter can be a combination of the following values:
1123  * @arg @ref LL_GPIO_PIN_0
1124  * @arg @ref LL_GPIO_PIN_1
1125  * @arg @ref LL_GPIO_PIN_2
1126  * @arg @ref LL_GPIO_PIN_3
1127  * @arg @ref LL_GPIO_PIN_4
1128  * @arg @ref LL_GPIO_PIN_5
1129  * @arg @ref LL_GPIO_PIN_6
1130  * @arg @ref LL_GPIO_PIN_7
1131  * @arg @ref LL_GPIO_PIN_8
1132  * @arg @ref LL_GPIO_PIN_9
1133  * @arg @ref LL_GPIO_PIN_10
1134  * @arg @ref LL_GPIO_PIN_11
1135  * @arg @ref LL_GPIO_PIN_12
1136  * @arg @ref LL_GPIO_PIN_13
1137  * @arg @ref LL_GPIO_PIN_ALL
1138  * @retval None
1139  */
1140 __STATIC_INLINE void ll_gpio_enable_falling_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
1141 {
1142  WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1143  WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1144  WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1145 }
1146 
1147 /**
1148  * @brief Enable GPIO Rising Edge Trigger for pins in the range of 0 to 15.
1149  * @note
1150  *
1151  * Register|BitsName
1152  * --------|--------
1153  * INTPOLSET | INTPOLSET
1154  * INTTYPESET | INTTYPESET
1155  *
1156  * @param GPIOx GPIO instance.
1157  * @param pin_mask This parameter can be a combination of the following values:
1158  * @arg @ref LL_GPIO_PIN_0
1159  * @arg @ref LL_GPIO_PIN_1
1160  * @arg @ref LL_GPIO_PIN_2
1161  * @arg @ref LL_GPIO_PIN_3
1162  * @arg @ref LL_GPIO_PIN_4
1163  * @arg @ref LL_GPIO_PIN_5
1164  * @arg @ref LL_GPIO_PIN_6
1165  * @arg @ref LL_GPIO_PIN_7
1166  * @arg @ref LL_GPIO_PIN_8
1167  * @arg @ref LL_GPIO_PIN_9
1168  * @arg @ref LL_GPIO_PIN_10
1169  * @arg @ref LL_GPIO_PIN_11
1170  * @arg @ref LL_GPIO_PIN_12
1171  * @arg @ref LL_GPIO_PIN_13
1172  * @arg @ref LL_GPIO_PIN_ALL
1173  * @retval None
1174  */
1175 __STATIC_INLINE void ll_gpio_enable_rising_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
1176 {
1177  WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1178  WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1179  WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1180 }
1181 
1182 /**
1183  * @brief Enable GPIO High Level Trigger for pins in the range of 0 to 15.
1184  * @note
1185  *
1186  * Register|BitsName
1187  * --------|--------
1188  * INTPOLSET | INTPOLSET
1189  * INTTYPECLR | INTTYPECLR
1190  *
1191  * @param GPIOx GPIO instance.
1192  * @param pin_mask This parameter can be a combination of the following values:
1193  * @arg @ref LL_GPIO_PIN_0
1194  * @arg @ref LL_GPIO_PIN_1
1195  * @arg @ref LL_GPIO_PIN_2
1196  * @arg @ref LL_GPIO_PIN_3
1197  * @arg @ref LL_GPIO_PIN_4
1198  * @arg @ref LL_GPIO_PIN_5
1199  * @arg @ref LL_GPIO_PIN_6
1200  * @arg @ref LL_GPIO_PIN_7
1201  * @arg @ref LL_GPIO_PIN_8
1202  * @arg @ref LL_GPIO_PIN_9
1203  * @arg @ref LL_GPIO_PIN_10
1204  * @arg @ref LL_GPIO_PIN_11
1205  * @arg @ref LL_GPIO_PIN_12
1206  * @arg @ref LL_GPIO_PIN_13
1207  * @arg @ref LL_GPIO_PIN_ALL
1208  * @retval None
1209  */
1210 __STATIC_INLINE void ll_gpio_enable_high_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
1211 {
1212  WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1213  WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1214 }
1215 
1216 /**
1217  * @brief Enable GPIO Low Level Trigger for pins in the range of 0 to 15.
1218  * @note
1219  *
1220  * Register|BitsName
1221  * --------|--------
1222  * INTPOLCLR | INTPOLCLR
1223  * INTTYPECLR | INTTYPECLR
1224  *
1225  * @param GPIOx GPIO instance.
1226  * @param pin_mask This parameter can be a combination of the following values:
1227  * @arg @ref LL_GPIO_PIN_0
1228  * @arg @ref LL_GPIO_PIN_1
1229  * @arg @ref LL_GPIO_PIN_2
1230  * @arg @ref LL_GPIO_PIN_3
1231  * @arg @ref LL_GPIO_PIN_4
1232  * @arg @ref LL_GPIO_PIN_5
1233  * @arg @ref LL_GPIO_PIN_6
1234  * @arg @ref LL_GPIO_PIN_7
1235  * @arg @ref LL_GPIO_PIN_8
1236  * @arg @ref LL_GPIO_PIN_9
1237  * @arg @ref LL_GPIO_PIN_10
1238  * @arg @ref LL_GPIO_PIN_11
1239  * @arg @ref LL_GPIO_PIN_12
1240  * @arg @ref LL_GPIO_PIN_13
1241  * @arg @ref LL_GPIO_PIN_ALL
1242  * @retval None
1243  */
1244 __STATIC_INLINE void ll_gpio_enable_low_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
1245 {
1246  WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1247  WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1248 }
1249 
1250 /**
1251  * @brief Enable GPIO both edge Trigger for pins in the range of 0 to 15.
1252  * @note
1253  *
1254  * Register|BitsName
1255  * --------|--------
1256  * INTPOLCLR | INTPOLCLR
1257  * INTTYPESET | INTTYPESET
1258  * INTTYPESET | INTTYPESET
1259  *
1260  * @param GPIOx GPIO instance.
1261  * @param pin_mask This parameter can be a combination of the following values:
1262  * @arg @ref LL_GPIO_PIN_0
1263  * @arg @ref LL_GPIO_PIN_1
1264  * @arg @ref LL_GPIO_PIN_2
1265  * @arg @ref LL_GPIO_PIN_3
1266  * @arg @ref LL_GPIO_PIN_4
1267  * @arg @ref LL_GPIO_PIN_5
1268  * @arg @ref LL_GPIO_PIN_6
1269  * @arg @ref LL_GPIO_PIN_7
1270  * @arg @ref LL_GPIO_PIN_8
1271  * @arg @ref LL_GPIO_PIN_9
1272  * @arg @ref LL_GPIO_PIN_10
1273  * @arg @ref LL_GPIO_PIN_11
1274  * @arg @ref LL_GPIO_PIN_12
1275  * @arg @ref LL_GPIO_PIN_13
1276  * @arg @ref LL_GPIO_PIN_ALL
1277  * @retval None
1278  */
1279 __STATIC_INLINE void ll_gpio_enable_both_edge_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
1280 {
1281  WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1282  WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1283  WRITE_REG(GPIOx->INTDBESET, pin_mask);
1284 }
1285 
1286 /**
1287  * @brief Get trigger type for pins in the range of 0 to 15
1288  * @note
1289  *
1290  * Register|BitsName
1291  * --------|--------
1292  * INTPOLCLR | INTPOLCLR
1293  * INTTYPECLR | INTTYPECLR
1294  * INTTYPESET | INTTYPESET
1295  *
1296  * @param GPIOx GPIO instance.
1297  * @param pin_mask This parameter can be a combination of the following values:
1298  * @arg @ref LL_GPIO_PIN_0
1299  * @arg @ref LL_GPIO_PIN_1
1300  * @arg @ref LL_GPIO_PIN_2
1301  * @arg @ref LL_GPIO_PIN_3
1302  * @arg @ref LL_GPIO_PIN_4
1303  * @arg @ref LL_GPIO_PIN_5
1304  * @arg @ref LL_GPIO_PIN_6
1305  * @arg @ref LL_GPIO_PIN_7
1306  * @arg @ref LL_GPIO_PIN_8
1307  * @arg @ref LL_GPIO_PIN_9
1308  * @arg @ref LL_GPIO_PIN_10
1309  * @arg @ref LL_GPIO_PIN_11
1310  * @arg @ref LL_GPIO_PIN_12
1311  * @arg @ref LL_GPIO_PIN_13
1312  * @retval Returned value can be one of the following values:
1313  * @arg @ref LL_GPIO_PULL_NO
1314  * @arg @ref LL_GPIO_PULL_UP
1315  * @arg @ref LL_GPIO_PULL_DOWN
1316  */
1317 __STATIC_INLINE uint32_t ll_gpio_get_trigger_type(gpio_regs_t *GPIOx, uint32_t pin_mask)
1318 {
1319 /* INTTYPESET INTPOLSET INTDBESET
1320 TRIGGER_FALLING 1 0 0
1321 TRIGGER_RISING 1 1 0
1322 TRIGGER_BOTH_EDGE 1 X 1
1323 TRIGGER_HIGH 0 1 X
1324 TRIGGER_LOW 0 0 X
1325 */
1326  #define TYPE_SET ((uint32_t)0x4U) // GPIO INTTYPESET is set
1327  #define POL_SET ((uint32_t)0x2U) // GPIO INTPOLSET is set
1328  #define DBE_SET ((uint32_t)0x1U) // GPIO INTDBESET is set
1329 
1330  uint32_t pos = POSITION_VAL(pin_mask);
1331  uint32_t type = (READ_BITS(GPIOx->INTTYPESET, pin_mask) >> pos ) << 2;
1332  uint32_t pol = (READ_BITS(GPIOx->INTPOLSET, pin_mask) >> pos) << 1;
1333  uint32_t both_egde = (READ_BITS(GPIOx->INTDBESET, pin_mask) >> pos);
1334 
1335  switch (type | pol | both_egde)
1336  {
1337  case TYPE_SET:
1338  return LL_GPIO_TRIGGER_FALLING;
1339  case TYPE_SET | POL_SET:
1340  return LL_GPIO_TRIGGER_RISING;
1341  case TYPE_SET | DBE_SET:
1343  case TYPE_SET | POL_SET | DBE_SET:
1345  case POL_SET:
1346  return LL_GPIO_TRIGGER_HIGH;
1347  default:
1348  return LL_GPIO_TRIGGER_LOW;
1349  }
1350 
1351  #undef TYPE_SET
1352  #undef POL_SET
1353  #undef BOTH_SET
1354 }
1355 
1356 /**
1357  * @brief Enable GPIO interrupts for pins in the range of 0 to 15.
1358  * @note @ref GPIO_LL_EC_TRIGGER can be used to specify the interrupt trigger type
1359  *
1360  * Register|BitsName
1361  * --------|--------
1362  * INTENSET | INTENSET
1363  *
1364  * @param GPIOx GPIO instance.
1365  * @param pin_mask This parameter can be a combination of the following values:
1366  * @arg @ref LL_GPIO_PIN_0
1367  * @arg @ref LL_GPIO_PIN_1
1368  * @arg @ref LL_GPIO_PIN_2
1369  * @arg @ref LL_GPIO_PIN_3
1370  * @arg @ref LL_GPIO_PIN_4
1371  * @arg @ref LL_GPIO_PIN_5
1372  * @arg @ref LL_GPIO_PIN_6
1373  * @arg @ref LL_GPIO_PIN_7
1374  * @arg @ref LL_GPIO_PIN_8
1375  * @arg @ref LL_GPIO_PIN_9
1376  * @arg @ref LL_GPIO_PIN_10
1377  * @arg @ref LL_GPIO_PIN_11
1378  * @arg @ref LL_GPIO_PIN_12
1379  * @arg @ref LL_GPIO_PIN_13
1380  * @arg @ref LL_GPIO_PIN_ALL
1381  * @retval None
1382  */
1383 __STATIC_INLINE void ll_gpio_enable_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1384 {
1385  WRITE_REG(GPIOx->INTENSET, pin_mask);
1386 }
1387 
1388 /**
1389  * @brief Disable GPIO interrupts for pins in the range of 0 to 15.
1390  * @note @ref GPIO_LL_EC_TRIGGER can be used to specify the interrupt trigger type
1391  *
1392  * Register|BitsName
1393  * --------|--------
1394  * INTENCLR | INTENCLR
1395  *
1396  * @param GPIOx GPIO instance.
1397  * @param pin_mask This parameter can be a combination of the following values:
1398  * @arg @ref LL_GPIO_PIN_0
1399  * @arg @ref LL_GPIO_PIN_1
1400  * @arg @ref LL_GPIO_PIN_2
1401  * @arg @ref LL_GPIO_PIN_3
1402  * @arg @ref LL_GPIO_PIN_4
1403  * @arg @ref LL_GPIO_PIN_5
1404  * @arg @ref LL_GPIO_PIN_6
1405  * @arg @ref LL_GPIO_PIN_7
1406  * @arg @ref LL_GPIO_PIN_8
1407  * @arg @ref LL_GPIO_PIN_9
1408  * @arg @ref LL_GPIO_PIN_10
1409  * @arg @ref LL_GPIO_PIN_11
1410  * @arg @ref LL_GPIO_PIN_12
1411  * @arg @ref LL_GPIO_PIN_13
1412  * @arg @ref LL_GPIO_PIN_ALL
1413  * @retval None
1414  */
1415 __STATIC_INLINE void ll_gpio_disable_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1416 {
1417  WRITE_REG(GPIOx->INTENCLR, pin_mask);
1418 }
1419 
1420 /**
1421  * @brief Check if the Interrupt of specified GPIO pins is enabled or disabled.
1422  *
1423  * Register|BitsName
1424  * --------|--------
1425  * INTENSET | INTENSET
1426  *
1427  * @param GPIOx GPIO instance.
1428  * @param pin_mask This parameter can be a combination of the following values:
1429  * @arg @ref LL_GPIO_PIN_0
1430  * @arg @ref LL_GPIO_PIN_1
1431  * @arg @ref LL_GPIO_PIN_2
1432  * @arg @ref LL_GPIO_PIN_3
1433  * @arg @ref LL_GPIO_PIN_4
1434  * @arg @ref LL_GPIO_PIN_5
1435  * @arg @ref LL_GPIO_PIN_6
1436  * @arg @ref LL_GPIO_PIN_7
1437  * @arg @ref LL_GPIO_PIN_8
1438  * @arg @ref LL_GPIO_PIN_9
1439  * @arg @ref LL_GPIO_PIN_10
1440  * @arg @ref LL_GPIO_PIN_11
1441  * @arg @ref LL_GPIO_PIN_12
1442  * @arg @ref LL_GPIO_PIN_13
1443  * @arg @ref LL_GPIO_PIN_ALL
1444  * @retval State of bit (1 or 0).
1445  */
1446 __STATIC_INLINE uint32_t ll_gpio_is_enabled_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1447 {
1448  return (READ_BITS(GPIOx->INTENSET, pin_mask) == (pin_mask));
1449 }
1450 
1451 /** @} */
1452 
1453 /** @defgroup GPIO_LL_EF_Flag_Management Flag_Management
1454  * @{
1455  */
1456 
1457 /**
1458  * @brief Read GPIO Interrupt Combination Flag for pins in the range of 0 to 15
1459  * @note After an interrupt is triggered, the corresponding bit in the INTSTATUS Register is set.
1460  * The interrupt status can be cleared by writing 1 to corresponding bit in INTCLEAR Register.
1461  *
1462  * Register|BitsName
1463  * --------|--------
1464  * INTSTATUS | INTSTATUS
1465  *
1466  * @param GPIOx GPIO instance.
1467  * @param pin_mask This parameter can be a combination of the following values:
1468  * @arg @ref LL_GPIO_PIN_0
1469  * @arg @ref LL_GPIO_PIN_1
1470  * @arg @ref LL_GPIO_PIN_2
1471  * @arg @ref LL_GPIO_PIN_3
1472  * @arg @ref LL_GPIO_PIN_4
1473  * @arg @ref LL_GPIO_PIN_5
1474  * @arg @ref LL_GPIO_PIN_6
1475  * @arg @ref LL_GPIO_PIN_7
1476  * @arg @ref LL_GPIO_PIN_8
1477  * @arg @ref LL_GPIO_PIN_9
1478  * @arg @ref LL_GPIO_PIN_10
1479  * @arg @ref LL_GPIO_PIN_11
1480  * @arg @ref LL_GPIO_PIN_12
1481  * @arg @ref LL_GPIO_PIN_13
1482  * @arg @ref LL_GPIO_PIN_ALL
1483  * @retval Interrupt flag whose bits were set when the selected trigger event arrives on the interrupt
1484  */
1485 __STATIC_INLINE uint16_t ll_gpio_read_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1486 {
1487  return (uint16_t)(READ_BITS(GPIOx->INTSTAT, pin_mask));
1488 }
1489 
1490 /**
1491  * @brief Indicates if the GPIO Interrupt Flag is set or not for pins in the range of 0 to 15.
1492  * @note After an interrupt is triggered, the corresponding bit in the INTSTATUS Register is set.
1493  * The interrupt status can be cleared by writing 1 to corresponding bit in INTCLEAR Register.
1494  *
1495  * Register|BitsName
1496  * --------|--------
1497  * INTSTATUS | INTSTATUS
1498  *
1499  * @param GPIOx GPIO instance.
1500  * @param pin_mask This parameter can be a combination of the following values:
1501  * @arg @ref LL_GPIO_PIN_0
1502  * @arg @ref LL_GPIO_PIN_1
1503  * @arg @ref LL_GPIO_PIN_2
1504  * @arg @ref LL_GPIO_PIN_3
1505  * @arg @ref LL_GPIO_PIN_4
1506  * @arg @ref LL_GPIO_PIN_5
1507  * @arg @ref LL_GPIO_PIN_6
1508  * @arg @ref LL_GPIO_PIN_7
1509  * @arg @ref LL_GPIO_PIN_8
1510  * @arg @ref LL_GPIO_PIN_9
1511  * @arg @ref LL_GPIO_PIN_10
1512  * @arg @ref LL_GPIO_PIN_11
1513  * @arg @ref LL_GPIO_PIN_12
1514  * @arg @ref LL_GPIO_PIN_13
1515  * @arg @ref LL_GPIO_PIN_ALL
1516  * @retval State of bit (1 or 0).
1517  */
1518 __STATIC_INLINE uint32_t ll_gpio_is_active_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1519 {
1520  return (READ_BITS(GPIOx->INTSTAT, pin_mask) == pin_mask);
1521 }
1522 
1523 /**
1524  * @brief Clear Interrupt Status flag for pins in the range of 0 to 15.
1525  * @note After an interrupt is triggered, the corresponding bit in the INTSTATUS Register is set.
1526  * The interrupt status can be cleared by writing 1 to corresponding bit in INTCLEAR Register.
1527  *
1528  * Register|BitsName
1529  * --------|--------
1530  * INTSTATUS | INTSTATUS
1531  *
1532  * @param GPIOx GPIO instance.
1533  * @param pin_mask This parameter can be a combination of the following values:
1534  * @arg @ref LL_GPIO_PIN_0
1535  * @arg @ref LL_GPIO_PIN_1
1536  * @arg @ref LL_GPIO_PIN_2
1537  * @arg @ref LL_GPIO_PIN_3
1538  * @arg @ref LL_GPIO_PIN_4
1539  * @arg @ref LL_GPIO_PIN_5
1540  * @arg @ref LL_GPIO_PIN_6
1541  * @arg @ref LL_GPIO_PIN_7
1542  * @arg @ref LL_GPIO_PIN_8
1543  * @arg @ref LL_GPIO_PIN_9
1544  * @arg @ref LL_GPIO_PIN_10
1545  * @arg @ref LL_GPIO_PIN_11
1546  * @arg @ref LL_GPIO_PIN_12
1547  * @arg @ref LL_GPIO_PIN_13
1548  * @arg @ref LL_GPIO_PIN_ALL
1549  * @retval None
1550  */
1551 __STATIC_INLINE void ll_gpio_clear_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
1552 {
1553  WRITE_REG(GPIOx->INTSTAT, pin_mask);
1554 }
1555 
1556 /** @} */
1557 
1558 /** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
1559  * @{
1560  */
1561 /**
1562  * @brief Initialize GPIO registers according to the specified
1563  * parameters in p_gpio_init.
1564  * @param GPIOx GPIO instance.
1565  * @param p_gpio_init Pointer to a ll_gpio_init_t structure that contains the configuration
1566  * information for the specified GPIO peripheral.
1567  * @retval None
1568  */
1569 void ll_gpio_init(gpio_regs_t *GPIOx, const ll_gpio_init_t p_gpio_init);
1570 /** @} */
1571 
1572 /** @} */
1573 
1574 #endif /* defined (GPIO0) || defined (GPIO1) */
1575 
1576 #ifdef __cplusplus
1577 }
1578 #endif
1579 
1580 #endif /* LL_GPIO_H */
1581 
1582 /** @} */
1583 
1584 /** @} */
1585 
1586 /** @} */
ll_gpio_read_input_port
__STATIC_INLINE uint32_t ll_gpio_read_input_port(gpio_regs_t *GPIOx)
Return full input data register value for a dedicated port.
Definition: ll_gpio.h:873
_ll_gpio_init::pin
uint32_t pin
Definition: ll_gpio.h:78
LL_GPIO_STRENGTH_DS1_POS
#define LL_GPIO_STRENGTH_DS1_POS
Definition: ll_gpio.h:141
ll_gpio_get_pin_strength
__STATIC_INLINE uint32_t ll_gpio_get_pin_strength(gpio_regs_t *GPIOx, uint32_t pin_mask)
Return gpio output drive strength for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:849
gr5405.h
LL_GPIO_PULL_NO
#define LL_GPIO_PULL_NO
Definition: ll_gpio.h:176
LL_GPIO_TRIGGER_RISING
#define LL_GPIO_TRIGGER_RISING
Definition: ll_gpio.h:208
ll_gpio_is_output_pin_set
__STATIC_INLINE uint32_t ll_gpio_is_output_pin_set(gpio_regs_t *GPIOx, uint32_t pin_mask)
Return if input data level for several pins of dedicated port is high or low.
Definition: ll_gpio.h:997
ll_gpio_enable_high_trigger
__STATIC_INLINE void ll_gpio_enable_high_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO High Level Trigger for pins in the range of 0 to 15.
Definition: ll_gpio.h:1210
ll_gpio_is_enabled_it
__STATIC_INLINE uint32_t ll_gpio_is_enabled_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Check if the Interrupt of specified GPIO pins is enabled or disabled.
Definition: ll_gpio.h:1446
_ll_gpio_init
LL GPIO init configuration definition.
Definition: ll_gpio.h:77
ll_gpio_init_t
struct _ll_gpio_init ll_gpio_init_t
LL GPIO init configuration definition.
_ll_gpio_init::strength
uint32_t strength
Definition: ll_gpio.h:103
ll_gpio_get_pin_speed
__STATIC_INLINE uint32_t ll_gpio_get_pin_speed(gpio_regs_t *GPIOx, uint32_t pin_mask)
Return gpio speed for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:758
TYPE_SET
#define TYPE_SET
LL_GPIO_INPUT_TYPE_SCHMITT
#define LL_GPIO_INPUT_TYPE_SCHMITT
Definition: ll_gpio.h:201
ll_gpio_get_pin_input_type
__STATIC_INLINE uint32_t ll_gpio_get_pin_input_type(gpio_regs_t *GPIOx, uint32_t pin)
Return gpio input type for a dedicated pin on dedicated port.
Definition: ll_gpio.h:513
LL_GPIO_STRENGTH_DS1_MASK
#define LL_GPIO_STRENGTH_DS1_MASK
Definition: ll_gpio.h:139
LL_GPIO_PULL_UP
#define LL_GPIO_PULL_UP
Definition: ll_gpio.h:177
_ll_gpio_init::mux
uint32_t mux
Definition: ll_gpio.h:91
LL_GPIO_MODE_INOUT
#define LL_GPIO_MODE_INOUT
Definition: ll_gpio.h:170
ll_gpio_read_flag_it
__STATIC_INLINE uint16_t ll_gpio_read_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Read GPIO Interrupt Combination Flag for pins in the range of 0 to 15.
Definition: ll_gpio.h:1485
ll_gpio_read_output_pin
__STATIC_INLINE uint32_t ll_gpio_read_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
Return if output data level for several pins of dedicated port is high or low.
Definition: ll_gpio.h:966
_ll_gpio_init::trigger
uint32_t trigger
Definition: ll_gpio.h:115
ll_gpio_read_output_port
__STATIC_INLINE uint32_t ll_gpio_read_output_port(gpio_regs_t *GPIOx)
Return full output data register value for a dedicated port.
Definition: ll_gpio.h:935
ll_gpio_set_output_pin
__STATIC_INLINE void ll_gpio_set_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
Set several pins to high level on dedicated gpio port.
Definition: ll_gpio.h:1028
ll_gpio_enable_rising_trigger
__STATIC_INLINE void ll_gpio_enable_rising_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO Rising Edge Trigger for pins in the range of 0 to 15.
Definition: ll_gpio.h:1175
ll_gpio_enable_both_edge_trigger
__STATIC_INLINE void ll_gpio_enable_both_edge_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO both edge Trigger for pins in the range of 0 to 15.
Definition: ll_gpio.h:1279
ll_gpio_is_active_flag_it
__STATIC_INLINE uint32_t ll_gpio_is_active_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Indicates if the GPIO Interrupt Flag is set or not for pins in the range of 0 to 15.
Definition: ll_gpio.h:1518
ll_gpio_enable_it
__STATIC_INLINE void ll_gpio_enable_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO interrupts for pins in the range of 0 to 15.
Definition: ll_gpio.h:1383
ll_gpio_get_pin_mode
__STATIC_INLINE uint32_t ll_gpio_get_pin_mode(gpio_regs_t *GPIOx, uint32_t pin)
Return gpio mode for a dedicated pin on dedicated port.
Definition: ll_gpio.h:438
ll_gpio_get_pin_pull
__STATIC_INLINE uint32_t ll_gpio_get_pin_pull(gpio_regs_t *GPIOx, uint32_t pin)
Return gpio pull-up or pull-down for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:586
LL_GPIO_MODE_OUTPUT_POS
#define LL_GPIO_MODE_OUTPUT_POS
Definition: ll_gpio.h:137
ll_gpio_reset_output_pin
__STATIC_INLINE void ll_gpio_reset_output_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
Set several pins to low level on dedicated gpio port.
Definition: ll_gpio.h:1065
_ll_gpio_init::speed
uint32_t speed
Definition: ll_gpio.h:97
LL_GPIO_PULL_DOWN
#define LL_GPIO_PULL_DOWN
Definition: ll_gpio.h:178
LL_GPIO_TRIGGER_LOW
#define LL_GPIO_TRIGGER_LOW
Definition: ll_gpio.h:211
LL_GPIO_TRIGGER_HIGH
#define LL_GPIO_TRIGGER_HIGH
Definition: ll_gpio.h:210
LL_GPIO_TRIGGER_FALLING
#define LL_GPIO_TRIGGER_FALLING
Definition: ll_gpio.h:209
ll_gpio_toggle_pin
__STATIC_INLINE void ll_gpio_toggle_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
Toggle data value for several pin of dedicated port.
Definition: ll_gpio.h:1101
ll_gpio_write_output_port
__STATIC_INLINE void ll_gpio_write_output_port(gpio_regs_t *GPIOx, uint32_t port_value)
Write output data register for the port.
Definition: ll_gpio.h:920
ll_gpio_set_pin_speed
__STATIC_INLINE void ll_gpio_set_pin_speed(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t speed)
Configure gpio speed for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:717
LL_GPIO_TRIGGER_BOTH_EDGE
#define LL_GPIO_TRIGGER_BOTH_EDGE
Definition: ll_gpio.h:212
ll_gpio_get_trigger_type
__STATIC_INLINE uint32_t ll_gpio_get_trigger_type(gpio_regs_t *GPIOx, uint32_t pin_mask)
Get trigger type for pins in the range of 0 to 15.
Definition: ll_gpio.h:1317
_ll_gpio_init::input_type
uint32_t input_type
Definition: ll_gpio.h:109
LL_GPIO_MODE_INPUT
#define LL_GPIO_MODE_INPUT
Definition: ll_gpio.h:168
ll_gpio_enable_low_trigger
__STATIC_INLINE void ll_gpio_enable_low_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO Low Level Trigger for pins in the range of 0 to 15.
Definition: ll_gpio.h:1244
_ll_gpio_init::mode
uint32_t mode
Definition: ll_gpio.h:81
LL_GPIO_MODE_OUTPUT
#define LL_GPIO_MODE_OUTPUT
Definition: ll_gpio.h:169
ll_gpio_set_pin_mode
__STATIC_INLINE void ll_gpio_set_pin_mode(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t mode)
Set several pins to input/output mode on dedicated port.
Definition: ll_gpio.h:396
LL_GPIO_INPUT_TYPE_CMOS
#define LL_GPIO_INPUT_TYPE_CMOS
Definition: ll_gpio.h:200
LL_GPIO_STRENGTH_DS0_MASK
#define LL_GPIO_STRENGTH_DS0_MASK
Definition: ll_gpio.h:138
_ll_gpio_init::pull
uint32_t pull
Definition: ll_gpio.h:86
POL_SET
#define POL_SET
ll_gpio_enable_falling_trigger
__STATIC_INLINE void ll_gpio_enable_falling_trigger(gpio_regs_t *GPIOx, uint32_t pin_mask)
Enable GPIO Falling Edge Trigger for pins in the range of 0 to 15.
Definition: ll_gpio.h:1140
ll_gpio_set_pin_strength
__STATIC_INLINE void ll_gpio_set_pin_strength(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t strength)
Configure gpio output drive strength for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:796
LL_GPIO_MODE_INPUT_POS
#define LL_GPIO_MODE_INPUT_POS
Definition: ll_gpio.h:136
DBE_SET
#define DBE_SET
ll_gpio_set_pin_input_type
__STATIC_INLINE void ll_gpio_set_pin_input_type(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t type)
Set several pins input type on dedicated port.
Definition: ll_gpio.h:478
ll_gpio_read_input_pin
__STATIC_INLINE uint8_t ll_gpio_read_input_pin(gpio_regs_t *GPIOx, uint32_t pin_mask)
Return if input data level for several pins of dedicated port is high or low.
Definition: ll_gpio.h:904
LL_GPIO_STRENGTH_DS0_POS
#define LL_GPIO_STRENGTH_DS0_POS
Definition: ll_gpio.h:140
ll_gpio_init
void ll_gpio_init(gpio_regs_t *GPIOx, const ll_gpio_init_t p_gpio_init)
Initialize GPIO registers according to the specified parameters in p_gpio_init.
ll_gpio_set_pin_mux
__STATIC_INLINE void ll_gpio_set_pin_mux(gpio_regs_t *GPIOx, uint32_t pin, uint32_t mux)
Configure gpio pinmux number of a dedicated pin from 0 to 15 for a dedicated port.
Definition: ll_gpio.h:621
ll_gpio_disable_it
__STATIC_INLINE void ll_gpio_disable_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Disable GPIO interrupts for pins in the range of 0 to 15.
Definition: ll_gpio.h:1415
ll_gpio_set_pin_pull
__STATIC_INLINE void ll_gpio_set_pin_pull(gpio_regs_t *GPIOx, uint32_t pin_mask, uint32_t pull)
Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
Definition: ll_gpio.h:550
ll_gpio_get_pin_mux
__STATIC_INLINE uint32_t ll_gpio_get_pin_mux(gpio_regs_t *GPIOx, uint32_t pin)
Return gpio alternate function of a dedicated pin from 0 to 15 for a dedicated port.
Definition: ll_gpio.h:668
ll_gpio_clear_flag_it
__STATIC_INLINE void ll_gpio_clear_flag_it(gpio_regs_t *GPIOx, uint32_t pin_mask)
Clear Interrupt Status flag for pins in the range of 0 to 15.
Definition: ll_gpio.h:1551