VSF Documented
vsf_template_gpio.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TEMPLATE_GPIO_H__
19#define __VSF_TEMPLATE_GPIO_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
32// multi-class support enabled by default for maximum availability.
33#ifndef VSF_GPIO_CFG_MULTI_CLASS
34# define VSF_GPIO_CFG_MULTI_CLASS ENABLED
35#endif
36
37#if defined(VSF_HW_GPIO_PORT_COUNT) && !defined(VSF_HW_GPIO_PORT_MASK)
38# define VSF_HW_GPIO_PORT_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_GPIO_PORT_COUNT)
39#endif
40
41#if defined(VSF_HW_GPIO_PORT_MASK) && !defined(VSF_HW_GPIO_PORT_COUNT)
42# define VSF_HW_GPIO_PORT_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_GPIO_PORT_MASK)
43#endif
44
45#if defined(VSF_HW_GPIO_PIN_COUNT) && !defined(VSF_HW_GPIO_PIN_MASK)
46# define VSF_HW_GPIO_PIN_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_GPIO_PIN_COUNT)
47#endif
48
49#if defined(VSF_HW_GPIO_PIN_MASK) && !defined(VSF_HW_GPIO_PIN_COUNT)
50# define VSF_HW_GPIO_PIN_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_GPIO_PIN_MASK)
51#endif
52
53#ifdef VSF_HW_GPIO_PORT_COUNT
54# define VSF_HW_GPIO_COUNT VSF_HW_GPIO_PORT_COUNT
55#endif
56
57#ifdef VSF_HW_GPIO_PORT_MASK
58# define VSF_HW_GPIO_MASK VSF_HW_GPIO_PORT_MASK
59#endif
60
61#if !defined(VSF_GPIO_CFG_PORTA) && (VSF_HW_GPIO_PORT_MASK & (1ul << 0))
62# define VSF_GPIO_CFG_PORTA ENABLED
63#endif
64
65#if !defined(VSF_GPIO_CFG_PORTB) && (VSF_HW_GPIO_PORT_MASK & (1ul << 1))
66# define VSF_GPIO_CFG_PORTB ENABLED
67#endif
68
69#if !defined(VSF_GPIO_CFG_PORTC) && (VSF_HW_GPIO_PORT_MASK & (1ul << 2))
70# define VSF_GPIO_CFG_PORTC ENABLED
71#endif
72
73#if !defined(VSF_GPIO_CFG_PORTD) && (VSF_HW_GPIO_PORT_MASK & (1ul << 3))
74# define VSF_GPIO_CFG_PORTD ENABLED
75#endif
76
77#if !defined(VSF_GPIO_CFG_PORTE) && (VSF_HW_GPIO_PORT_MASK & (1ul << 4))
78# define VSF_GPIO_CFG_PORTE ENABLED
79#endif
80
81#if !defined(VSF_GPIO_CFG_PORTF) && (VSF_HW_GPIO_PORT_MASK & (1ul << 5))
82# define VSF_GPIO_CFG_PORTF ENABLED
83#endif
84
85#if !defined(VSF_GPIO_CFG_PORTG) && (VSF_HW_GPIO_PORT_MASK & (1ul << 6))
86# define VSF_GPIO_CFG_PORTG ENABLED
87#endif
88
89#if !defined(VSF_GPIO_CFG_PORTH) && (VSF_HW_GPIO_PORT_MASK & (1ul << 7))
90# define VSF_GPIO_CFG_PORTH ENABLED
91#endif
92
93#if !defined(VSF_GPIO_CFG_PORTI) && (VSF_HW_GPIO_PORT_MASK & (1ul << 8))
94# define VSF_GPIO_CFG_PORTI ENABLED
95#endif
96
97#if !defined(VSF_GPIO_CFG_PORTJ) && (VSF_HW_GPIO_PORT_MASK & (1ul << 9))
98# define VSF_GPIO_CFG_PORTJ ENABLED
99#endif
100
101#if !defined(VSF_GPIO_CFG_PORTK) && (VSF_HW_GPIO_PORT_MASK & (1ul << 10))
102# define VSF_GPIO_CFG_PORTK ENABLED
103#endif
104
105#if !defined(VSF_GPIO_CFG_PORTL) && (VSF_HW_GPIO_PORT_MASK & (1ul << 11))
106# define VSF_GPIO_CFG_PORTL ENABLED
107#endif
108
109#if !defined(VSF_GPIO_CFG_PORTM) && (VSF_HW_GPIO_PORT_MASK & (1ul << 12))
110# define VSF_GPIO_CFG_PORTM ENABLED
111#endif
112
113#if !defined(VSF_GPIO_CFG_PORTN) && (VSF_HW_GPIO_PORT_MASK & (1ul << 13))
114# define VSF_GPIO_CFG_PORTN ENABLED
115#endif
116
117#if !defined(VSF_GPIO_CFG_PORTO) && (VSF_HW_GPIO_PORT_MASK & (1ul << 14))
118# define VSF_GPIO_CFG_PORTO ENABLED
119#endif
120
121#if !defined(VSF_GPIO_CFG_PORTP) && (VSF_HW_GPIO_PORT_MASK & (1ul << 15))
122# define VSF_GPIO_CFG_PORTP ENABLED
123#endif
124
125
126#ifndef VSF_GPIO_CFG_PIN_COUNT
127# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
128# define vsf_io_pin_mask_t uint64_t
129# define VSF_GPIO_CFG_PIN_COUNT 64
130# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
131# elif defined(VSF_HW_GPIO_PIN_AMSK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
132# define vsf_io_pin_mask_t uint64_t
133# define VSF_GPIO_CFG_PIN_COUNT 64
134# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
135# else
136# define vsf_io_pin_mask_t uint32_t
137# define VSF_GPIO_CFG_PIN_COUNT 32
138# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFF
139# endif
140#endif
141
165#ifndef VSF_GPIO_CFG_PREFIX
166# if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
167# define VSF_GPIO_CFG_PREFIX vsf
168# elif defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK != 0)
169# define VSF_GPIO_CFG_PREFIX vsf_hw
170# else
171# define VSF_GPIO_CFG_PREFIX vsf
172# endif
173#endif
174
175#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE
176# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE DISABLED
177#endif
178
179#ifndef VSF_GPIO_CFG_FUNCTION_RENAME
180# define VSF_GPIO_CFG_FUNCTION_RENAME ENABLED
181#endif
182
183
187#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
188# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG DISABLED
189#endif
190
194#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
195# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
196#endif
197
198
199#ifndef VSF_GPIO_CFG_INHERT_HAL_CAPABILITY
200# define VSF_GPIO_CFG_INHERT_HAL_CAPABILITY ENABLED
201#endif
202
203#ifndef vsf_gpio_pin_mask_t
204# if defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
205# define vsf_gpio_pin_mask_t uint64_t
206# else
207# define vsf_gpio_pin_mask_t uint32_t
208# endif
209#endif
210
211/*============================ MACROFIED FUNCTIONS ===========================*/
212
213#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM) \
214 VSF_P ## __PORT_NUM ## __PIN_NUM = ((VSF_PORT ##__PORT_NUM) << 8) | __PIN_NUM,
215
216#define VSF_GPIO_APIS(__prefix_name) \
217 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_capability_t, gpio, capability, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr) \
218 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, port_config_pins, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t * cfg_ptr) \
219 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_direction, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask) \
220 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, get_direction, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
221 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_input, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
222 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_output, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
223 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, switch_direction, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
224 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr) \
225 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, write, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value) \
226 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
227 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, clear, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
228 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, toggle, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
229 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, output_and_set, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
230 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, output_and_clear, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
231 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_config, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_exti_irq_cfg_t *irq_cfg_ptr) \
232 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_enable, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
233 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_disable, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
234
235/*============================ TYPES =========================================*/
236
237#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
301typedef enum vsf_gpio_mode_t {
305 VSF_GPIO_INPUT = (0 << 0),
308 VSF_GPIO_ANALOG = (1 << 0),
316 VSF_GPIO_EXTI = (4 << 0),
318 VSF_GPIO_AF = (5 << 0),
319
320 // Turn on or off the internal pull-up and pull-down resistors of the IOs
321 // It is independent of the direction of the IO and the alternative function
325
332
333/*
335 VSF_GPIO_AF = (5 << 0),
336
337 VSF_GPIO_INVERT_INPUT = (1 << 7),
338 #define VSF_GPIO_INVERT_INPUT VSF_GPIO_INVERT_INPUT
339
340 VSF_GPIO_HIGH_DRIVE_STRENGTH = (1 << 8),
341 #define VSF_GPIO_HIGH_DRIVE_STRENGTH VSF_GPIO_HIGH_DRIVE_STRENGTH
342
343 VSF_GPIO_SPEED_LOW = (0 << 9),
344 VSF_GPIO_SPEED_MEDIUM = (1 << 9),
345 VSF_GPIO_SPEED_HIGH = (2 << 9),
346 VSF_GPIO_SPEED_VERY_HIGH = (3 << 9),
347 VSF_GPIO_SPEED_MASK = (3 << 9),
348 #define VSF_GPIO_SPEED_LOW VSF_GPIO_SPEED_LOW
349 #define VSF_GPIO_SPEED_MEDIUM VSF_GPIO_SPEED_MEDIUM
350 #define VSF_GPIO_SPEED_HIGH VSF_GPIO_SPEED_HIGH
351 #define VSF_GPIO_SPEED_VERY_HIGH VSF_GPIO_SPEED_VERY_HIGH
352 #define VSF_GPIO_SPEED_MASK VSF_GPIO_SPEED_MASK
353*/
355#endif
356
357enum {
359
360#ifndef VSF_GPIO_MODE_MASK
367#endif
368
372
379
383#ifdef VSF_GPIO_INVERT_INPUT
384 | VSF_GPIO_INVERT_INPUT
385#endif
386#ifdef VSF_GPIO_HIGH_DRIVE_STRENGTH
387 | VSF_GPIO_HIGH_DRIVE_STRENGTH
388#endif
389#ifdef VSF_GPIO_SPEED_MASK
391#endif
392#ifdef VSF_GPIO_SPEED_MASK
394#endif
396
397#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
399typedef struct vsf_gpio_t vsf_gpio_t;
400
402typedef void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr,
403 vsf_gpio_pin_mask_t pin_mask);
404
412
414typedef struct vsf_gpio_cfg_t {
419
422
429
439#endif
440
441#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
442typedef struct vsf_gpio_capability_t {
443#if VSF_GPIO_CFG_INHERT_HAL_CAPABILITY == ENABLED
445#endif
451 uint8_t is_async : 1;
452
456
459
464
473#endif
474
475typedef struct vsf_gpio_op_t {
476#undef __VSF_HAL_TEMPLATE_API
477#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
478
479 VSF_GPIO_APIS(vsf)
481
482#if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
493};
494#endif
495
496
497#if VSF_HW_GPIO_PORT_COUNT > 0
498typedef enum vsf_io_port_no_t {
499#if defined(VSF_GPIO_CFG_PORTA)
500 VSF_PORTA,
501#endif
502#if defined(VSF_GPIO_CFG_PORTB)
503 VSF_PORTB,
504#endif
505#if defined(VSF_GPIO_CFG_PORTC)
506 VSF_PORTC,
507#endif
508#if defined(VSF_GPIO_CFG_PORTD)
509 VSF_PORTD,
510#endif
511#if defined(VSF_GPIO_CFG_PORTE)
512 VSF_PORTE,
513#endif
514#if defined(VSF_GPIO_CFG_PORTF)
515 VSF_PORTF,
516#endif
517#if defined(VSF_GPIO_CFG_PORTG)
518 VSF_PORTG,
519#endif
520#if defined(VSF_GPIO_CFG_PORTH)
521 VSF_PORTH,
522#endif
523#if defined(VSF_GPIO_CFG_PORTI)
524 VSF_PORTI,
525#endif
526#if defined(VSF_GPIO_CFG_PORTJ)
527 VSF_PORTJ,
528#endif
529#if defined(VSF_GPIO_CFG_PORTK)
530 VSF_PORTK,
531#endif
532#if defined(VSF_GPIO_CFG_PORTL)
533 VSF_PORTL,
534#endif
535#if defined(VSF_GPIO_CFG_PORTM)
536 VSF_PORTM,
537#endif
538#if defined(VSF_GPIO_CFG_PORTN)
539 VSF_PORTN,
540#endif
541#if defined(VSF_GPIO_CFG_PORTO)
542 VSF_PORTO,
543#endif
544#if defined(VSF_GPIO_CFG_PORTP)
545 VSF_PORTP,
546#endif
548
549typedef enum vsf_io_port_pin_no_t {
550#if defined(VSF_GPIO_CFG_PORTA)
552#endif
553#if defined(VSF_GPIO_CFG_PORTB)
555#endif
556#if defined(VSF_GPIO_CFG_PORTC)
558#endif
559#if defined(VSF_GPIO_CFG_PORTD)
561#endif
562#if defined(VSF_GPIO_CFG_PORTE)
564#endif
565#if defined(VSF_GPIO_CFG_PORTF)
567#endif
568#if defined(VSF_GPIO_CFG_PORTG)
570#endif
571#if defined(VSF_GPIO_CFG_PORTH)
573#endif
574#if defined(VSF_GPIO_CFG_PORTI)
576#endif
577#if defined(VSF_GPIO_CFG_PORTJ)
579#endif
580#if defined(VSF_GPIO_CFG_PORTK)
582#endif
583#if defined(VSF_GPIO_CFG_PORTL)
585#endif
586#if defined(VSF_GPIO_CFG_PORTM)
588#endif
589#if defined(VSF_GPIO_CFG_PORTN)
591#endif
592#if defined(VSF_GPIO_CFG_PORTO)
594#endif
595#if defined(VSF_GPIO_CFG_PORTP)
597#endif
598} vsf_io_port_pin_no_t;
599#endif
600
601/*============================ GLOBAL VARIABLES ==============================*/
602/*============================ MACROFIED FUNCTIONS ===========================*/
603/*============================ PROTOTYPES ====================================*/
604
623 vsf_gpio_pin_mask_t pin_mask,
624 vsf_gpio_cfg_t *cfg);
625
627// \~english
628// @brief Configure one or more ports and pin of the gpio instance
629// @param[in] cfg: array of vsf_gpio_port_cfg_pins_t structures, refer @ref vsf_gpio_port_cfg_pins_t
630// @param[in] count: number of struct array vsf_gpio_port_cfg_pins_t
631// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
632// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
633//
634// \~chinese
635// @brief 配置 gpio 的一个或者多个端口和引脚
636// @param[in] cfg: vsf_gpio_port_cfg_pins_t 结构体数组, 参考 @ref vsf_gpio_port_cfg_pins_t
637// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pins_t 的数量
638// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE , 失败返回负数。
639// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
640// */
641//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
642// uint_fast8_t count);
643//
645// \~english
646// @brief Configure one pin for one or more ports of the gpio instance
647// @param[in] cfg: a pointer to structure @ref vsf_gpio_port_cfg_pin_t
648// @param[in] count: number of struct array vsf_gpio_port_cfg_pin_t
649// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
650// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
651//
652// \~chinese
653// @brief 配置 gpio 的一个或者多个端口的一个引脚
654// @param[in] cfg: 结构体 vsf_gpio_port_cfg_pin_t 的指针,参考 @ref vsf_gpio_port_cfg_pin_t
655// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pin_t 的数量
656// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE , 失败返回负数。
657// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
658// */
659//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
660// uint_fast8_t count);
661
662
677extern void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr,
678 vsf_gpio_pin_mask_t pin_mask,
679 vsf_gpio_pin_mask_t direction_mask);
680
696 vsf_gpio_pin_mask_t pin_mask);
697
710extern void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
711
724extern void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
725
738extern void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
739
752
767extern void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask,
769
782extern void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
783
796extern void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
797
810extern void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
811
831extern void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
832
852extern void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
853
864
877
895
910
911/*============================ INLINE FUNCTIONS ==============================*/
912
913static inline uint8_t vsf_gpio_get_port(uint16_t port_pin_index)
914{
915 return port_pin_index >> 8;
916}
917
918static inline uint8_t vsf_gpio_get_pin(uint16_t port_pin_index)
919{
920 return port_pin_index & 0xFF;
921}
922
923static inline vsf_err_t vsf_gpio_port_config_pin(vsf_gpio_t *gpio_ptr,
924 uint16_t pin_index,
925 vsf_gpio_cfg_t *cfg_ptr)
926{
927 return vsf_gpio_port_config_pins(gpio_ptr, 1 << pin_index, cfg_ptr);
928}
929
930/*============================ MACROS ========================================*/
931
932#if VSF_GPIO_CFG_FUNCTION_RENAME == ENABLED
933# define __vsf_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_t)
934# define vsf_gpio_capability(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_capability) ((__vsf_gpio_t *)(__GPIO))
935# define vsf_gpio_port_config_pins(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_port_config_pins) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
936# define vsf_gpio_set_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
937# define vsf_gpio_get_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
938# define vsf_gpio_set_input(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_input) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
939# define vsf_gpio_set_output(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_output) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
940# define vsf_gpio_switch_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_switch_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
941# define vsf_gpio_read(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read) ((__vsf_gpio_t *)(__GPIO))
942# define vsf_gpio_write(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_write) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
943# define vsf_gpio_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
944# define vsf_gpio_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
945# define vsf_gpio_output_and_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
946# define vsf_gpio_output_and_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
947# define vsf_gpio_toggle(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_toggle) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
948# define vsf_gpio_exti_irq_config(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_config) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
949# define vsf_gpio_exti_irq_enable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_enable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
950# define vsf_gpio_exti_irq_disable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_disable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
951#endif
952
953// too long, put it end of file
954#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 0)
955# define VSF_PIN0 0
956# define VSF_PIN0_MASK (1 << VSF_PIN0)
957#endif
958
959#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 1)
960# define VSF_PIN1 1
961# define VSF_PIN1_MASK (1 << VSF_PIN1)
962#endif
963
964#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 2)
965# define VSF_PIN2 2
966# define VSF_PIN2_MASK (1 << VSF_PIN2)
967#endif
968
969#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 3)
970# define VSF_PIN3 3
971# define VSF_PIN3_MASK (1 << VSF_PIN3)
972#endif
973
974#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 4)
975# define VSF_PIN4 4
976# define VSF_PIN4_MASK (1 << VSF_PIN4)
977#endif
978
979#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 5)
980# define VSF_PIN5 5
981# define VSF_PIN5_MASK (1 << VSF_PIN5)
982#endif
983
984#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 6)
985# define VSF_PIN6 6
986# define VSF_PIN6_MASK (1 << VSF_PIN6)
987#endif
988
989#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 7)
990# define VSF_PIN7 7
991# define VSF_PIN7_MASK (1 << VSF_PIN7)
992#endif
993
994#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 8)
995# define VSF_PIN8 8
996# define VSF_PIN8_MASK (1 << VSF_PIN8)
997#endif
998
999#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 9)
1000# define VSF_PIN9 9
1001# define VSF_PIN9_MASK (1 << VSF_PIN9)
1002#endif
1003
1004#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 10)
1005# define VSF_PIN10 10
1006# define VSF_PIN10_MASK (1 << VSF_PIN10)
1007#endif
1008
1009#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 11)
1010# define VSF_PIN11 11
1011# define VSF_PIN11_MASK (1 << VSF_PIN11)
1012#endif
1013
1014#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 12)
1015# define VSF_PIN12 12
1016# define VSF_PIN12_MASK (1 << VSF_PIN12)
1017#endif
1018
1019#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 13)
1020# define VSF_PIN13 13
1021# define VSF_PIN13_MASK (1 << VSF_PIN13)
1022#endif
1023
1024#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 14)
1025# define VSF_PIN14 14
1026# define VSF_PIN14_MASK (1 << VSF_PIN14)
1027#endif
1028
1029#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 15)
1030# define VSF_PIN15 15
1031# define VSF_PIN15_MASK (1 << VSF_PIN15)
1032#endif
1033
1034#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 16)
1035# define VSF_PIN16 16
1036# define VSF_PIN16_MASK (1 << VSF_PIN16)
1037#endif
1038
1039#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 17)
1040# define VSF_PIN17 17
1041# define VSF_PIN17_MASK (1 << VSF_PIN17)
1042#endif
1043
1044#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 18)
1045# define VSF_PIN18 18
1046# define VSF_PIN18_MASK (1 << VSF_PIN18)
1047#endif
1048
1049#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 19)
1050# define VSF_PIN19 19
1051# define VSF_PIN19_MASK (1 << VSF_PIN19)
1052#endif
1053
1054#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 20)
1055# define VSF_PIN20 20
1056# define VSF_PIN20_MASK (1 << VSF_PIN20)
1057#endif
1058
1059#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 21)
1060# define VSF_PIN21 21
1061# define VSF_PIN21_MASK (1 << VSF_PIN21)
1062#endif
1063
1064#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 22)
1065# define VSF_PIN22 22
1066# define VSF_PIN22_MASK (1 << VSF_PIN22)
1067#endif
1068
1069#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 23)
1070# define VSF_PIN23 23
1071# define VSF_PIN23_MASK (1 << VSF_PIN23)
1072#endif
1073
1074#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 24)
1075# define VSF_PIN24 24
1076# define VSF_PIN24_MASK (1 << VSF_PIN24)
1077#endif
1078
1079#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 25)
1080# define VSF_PIN25 25
1081# define VSF_PIN25_MASK (1 << VSF_PIN25)
1082#endif
1083
1084#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 26)
1085# define VSF_PIN26 26
1086# define VSF_PIN26_MASK (1 << VSF_PIN26)
1087#endif
1088
1089#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 27)
1090# define VSF_PIN27 27
1091# define VSF_PIN27_MASK (1 << VSF_PIN27)
1092#endif
1093
1094#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 28)
1095# define VSF_PIN28 28
1096# define VSF_PIN28_MASK (1 << VSF_PIN28)
1097#endif
1098
1099#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 29)
1100# define VSF_PIN29 29
1101# define VSF_PIN29_MASK (1 << VSF_PIN29)
1102#endif
1103
1104#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 30)
1105# define VSF_PIN30 30
1106# define VSF_PIN30_MASK (1 << VSF_PIN30)
1107#endif
1108
1109#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 31)
1110# define VSF_PIN31 31
1111# define VSF_PIN31_MASK (1 << VSF_PIN31)
1112#endif
1113
1114#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 32)
1115# define VSF_PIN32 32
1116# define VSF_PIN32_MASK (1 << VSF_PIN32)
1117#endif
1118
1119#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 33)
1120# define VSF_PIN33 33
1121# define VSF_PIN33_MASK (1 << VSF_PIN33)
1122#endif
1123
1124#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 34)
1125# define VSF_PIN34 34
1126# define VSF_PIN34_MASK (1 << VSF_PIN34)
1127#endif
1128
1129#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 35)
1130# define VSF_PIN35 35
1131# define VSF_PIN35_MASK (1 << VSF_PIN35)
1132#endif
1133
1134#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 36)
1135# define VSF_PIN36 36
1136# define VSF_PIN36_MASK (1 << VSF_PIN36)
1137#endif
1138
1139#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 37)
1140# define VSF_PIN37 37
1141# define VSF_PIN37_MASK (1 << VSF_PIN37)
1142#endif
1143
1144#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 38)
1145# define VSF_PIN38 38
1146# define VSF_PIN38_MASK (1 << VSF_PIN38)
1147#endif
1148
1149#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 39)
1150# define VSF_PIN39 39
1151# define VSF_PIN39_MASK (1 << VSF_PIN39)
1152#endif
1153
1154#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 40)
1155# define VSF_PIN40 40
1156# define VSF_PIN40_MASK (1 << VSF_PIN40)
1157#endif
1158
1159#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 41)
1160# define VSF_PIN41 41
1161# define VSF_PIN41_MASK (1 << VSF_PIN41)
1162#endif
1163
1164#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 42)
1165# define VSF_PIN42 42
1166# define VSF_PIN42_MASK (1 << VSF_PIN42)
1167#endif
1168
1169#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 43)
1170# define VSF_PIN43 43
1171# define VSF_PIN43_MASK (1 << VSF_PIN43)
1172#endif
1173
1174#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 44)
1175# define VSF_PIN44 44
1176# define VSF_PIN44_MASK (1 << VSF_PIN44)
1177#endif
1178
1179#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 45)
1180# define VSF_PIN45 45
1181# define VSF_PIN45_MASK (1 << VSF_PIN45)
1182#endif
1183
1184#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 46)
1185# define VSF_PIN46 46
1186# define VSF_PIN46_MASK (1 << VSF_PIN46)
1187#endif
1188
1189#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 47)
1190# define VSF_PIN47 47
1191# define VSF_PIN47_MASK (1 << VSF_PIN47)
1192#endif
1193
1194#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 48)
1195# define VSF_PIN48 48
1196# define VSF_PIN48_MASK (1 << VSF_PIN48)
1197#endif
1198
1199#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 49)
1200# define VSF_PIN49 49
1201# define VSF_PIN49_MASK (1 << VSF_PIN49)
1202#endif
1203
1204#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 50)
1205# define VSF_PIN50 50
1206# define VSF_PIN50_MASK (1 << VSF_PIN50)
1207#endif
1208
1209#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 51)
1210# define VSF_PIN51 51
1211# define VSF_PIN51_MASK (1 << VSF_PIN51)
1212#endif
1213
1214#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 52)
1215# define VSF_PIN52 52
1216# define VSF_PIN52_MASK (1 << VSF_PIN52)
1217#endif
1218
1219#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 53)
1220# define VSF_PIN53 53
1221# define VSF_PIN53_MASK (1 << VSF_PIN53)
1222#endif
1223
1224#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 54)
1225# define VSF_PIN54 54
1226# define VSF_PIN54_MASK (1 << VSF_PIN54)
1227#endif
1228
1229#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 55)
1230# define VSF_PIN55 55
1231# define VSF_PIN55_MASK (1 << VSF_PIN55)
1232#endif
1233
1234#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 56)
1235# define VSF_PIN56 56
1236# define VSF_PIN56_MASK (1 << VSF_PIN56)
1237#endif
1238
1239#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 57)
1240# define VSF_PIN57 57
1241# define VSF_PIN57_MASK (1 << VSF_PIN57)
1242#endif
1243
1244#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 58)
1245# define VSF_PIN58 58
1246# define VSF_PIN58_MASK (1 << VSF_PIN58)
1247#endif
1248
1249#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 59)
1250# define VSF_PIN59 59
1251# define VSF_PIN59_MASK (1 << VSF_PIN59)
1252#endif
1253
1254#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 60)
1255# define VSF_PIN60 60
1256# define VSF_PIN60_MASK (1 << VSF_PIN60)
1257#endif
1258
1259#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 61)
1260# define VSF_PIN61 61
1261# define VSF_PIN61_MASK (1 << VSF_PIN61)
1262#endif
1263
1264#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 62)
1265# define VSF_PIN62 62
1266# define VSF_PIN62_MASK (1 << VSF_PIN62)
1267#endif
1268
1269#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 63)
1270# define VSF_PIN63 63
1271# define VSF_PIN63_MASK (1 << VSF_PIN63)
1272#endif
1273
1274#ifdef __cplusplus
1275}
1276#endif
1277
1278#endif /* __VSF_TEMPLATE_GPIO_H__ */
vsf_err_t
Definition __type.h:42
vsf_gpio_mode_t
Definition gpio.h:31
#define VSF_GPIO_SPEED_MASK
Definition gpio.h:86
vsf_arch_prio_t
Definition cortex_a_generic.h:88
vsf_io_port_no_t
Definition io.h:90
#define K(t, v)
Definition keyboard.h:40
unsigned short uint16_t
Definition lvgl.h:41
unsigned char uint8_t
Definition lvgl.h:40
Definition vsf_template_gpio.h:442
uint8_t support_output_and_clear
Definition vsf_template_gpio.h:455
uint8_t pin_count
Definition vsf_template_gpio.h:463
uint8_t support_interrupt
supports external interrupts
Definition vsf_template_gpio.h:458
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:471
inherit(vsf_peripheral_capability_t) uint8_t is_async uint8_t support_output_and_set
To avoid bumps when converting from input to output.
Definition vsf_template_gpio.h:444
gpio channel configuration
Definition vsf_template_gpio.h:414
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:417
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:415
Definition vsf_template_gpio.h:407
void * target_ptr
Definition vsf_template_gpio.h:409
vsf_gpio_exti_isr_handler_t * handler_fn
Definition vsf_template_gpio.h:408
vsf_arch_prio_t prio
Definition vsf_template_gpio.h:410
Definition vsf_template_gpio.h:475
Definition vsf_template_gpio.h:420
uint16_t port_pin_index
Definition vsf_template_gpio.h:421
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:427
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:425
Definition vsf_template_gpio.h:430
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:437
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:435
uint16_t port_index
Definition vsf_template_gpio.h:431
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:432
Definition vsf_template_gpio.h:491
const vsf_gpio_op_t * op
Definition vsf_template_gpio.h:492
Definition vsf_template_hal_driver.h:203
vk_av_control_value_t value
Definition vsf_audio.h:171
#define VSF_MREPEAT(__COUNT, __MACRO, __PARAM)
Definition vsf_repeat_macro.h:51
#define vsf_gpio_set_output(__GPIO,...)
Definition vsf_template_gpio.h:939
void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
External interrupt callback function for gpio.
Definition vsf_template_gpio.h:402
#define vsf_gpio_switch_direction(__GPIO,...)
Definition vsf_template_gpio.h:940
#define vsf_gpio_get_direction(__GPIO,...)
Definition vsf_template_gpio.h:937
#define vsf_gpio_toggle(__GPIO,...)
Definition vsf_template_gpio.h:947
#define vsf_gpio_set(__GPIO,...)
Definition vsf_template_gpio.h:943
#define vsf_gpio_port_config_pins(__GPIO,...)
Definition vsf_template_gpio.h:935
#define vsf_gpio_output_and_clear(__GPIO,...)
Definition vsf_template_gpio.h:946
#define vsf_gpio_clear(__GPIO,...)
Definition vsf_template_gpio.h:944
#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM)
Definition vsf_template_gpio.h:213
#define VSF_GPIO_CFG_PIN_COUNT
Definition vsf_template_gpio.h:137
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:207
#define vsf_gpio_set_direction(__GPIO,...)
Definition vsf_template_gpio.h:936
#define vsf_gpio_output_and_set(__GPIO,...)
Definition vsf_template_gpio.h:945
#define vsf_gpio_write(__GPIO,...)
Definition vsf_template_gpio.h:942
#define vsf_gpio_set_input(__GPIO,...)
Definition vsf_template_gpio.h:938
#define vsf_gpio_exti_irq_enable(__GPIO,...)
Definition vsf_template_gpio.h:949
#define VSF_GPIO_APIS(__prefix_name)
Definition vsf_template_gpio.h:216
#define vsf_gpio_exti_irq_disable(__GPIO,...)
Definition vsf_template_gpio.h:950
#define vsf_gpio_exti_irq_config(__GPIO,...)
Definition vsf_template_gpio.h:948
#define vsf_gpio_read(__GPIO)
Definition vsf_template_gpio.h:941
vsf_gpio_mode_t
Predefined VSF GPIO modes that can be reimplemented in specific hal drivers.
Definition vsf_template_gpio.h:301
@ VSF_GPIO_NO_PULL_UP_DOWN
Definition vsf_template_gpio.h:322
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Definition vsf_template_gpio.h:328
@ VSF_GPIO_OUTPUT_PUSH_PULL
Definition vsf_template_gpio.h:311
@ VSF_GPIO_EXTI
Set GPIO as external interrupt IO.
Definition vsf_template_gpio.h:316
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Definition vsf_template_gpio.h:327
@ VSF_GPIO_EXTI_MODE_NONE
Definition vsf_template_gpio.h:326
@ VSF_GPIO_EXTI_MODE_RISING
Definition vsf_template_gpio.h:329
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Definition vsf_template_gpio.h:331
@ VSF_GPIO_PULL_UP
Definition vsf_template_gpio.h:323
@ VSF_GPIO_AF
Set GPIO to Alternative Function.
Definition vsf_template_gpio.h:318
@ VSF_GPIO_INPUT
Definition vsf_template_gpio.h:305
@ VSF_GPIO_ANALOG
Definition vsf_template_gpio.h:308
@ VSF_GPIO_EXTI_MODE_FALLING
Definition vsf_template_gpio.h:330
@ VSF_GPIO_OUTPUT_OPEN_DRAIN
Definition vsf_template_gpio.h:314
@ VSF_GPIO_PULL_DOWN
Definition vsf_template_gpio.h:324
#define vsf_gpio_capability(__GPIO)
Definition vsf_template_gpio.h:934
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:373
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:361
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:369
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:380
@ VSF_GPIO_FLOATING
Definition vsf_template_gpio.h:358