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
106#ifndef VSF_GPIO_CFG_PIN_COUNT
107# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
108# define vsf_io_pin_mask_t uint64_t
109# define VSF_GPIO_CFG_PIN_COUNT 64
110# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
111# elif defined(VSF_HW_GPIO_PIN_AMSK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
112# define vsf_io_pin_mask_t uint64_t
113# define VSF_GPIO_CFG_PIN_COUNT 64
114# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
115# else
116# define vsf_io_pin_mask_t uint32_t
117# define VSF_GPIO_CFG_PIN_COUNT 32
118# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFF
119# endif
120#endif
121
145#ifndef VSF_GPIO_CFG_PREFIX
146# if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
147# define VSF_GPIO_CFG_PREFIX vsf
148# elif defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK != 0)
149# define VSF_GPIO_CFG_PREFIX vsf_hw
150# else
151# define VSF_GPIO_CFG_PREFIX vsf
152# endif
153#endif
154
155#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE
156# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE DISABLED
157#endif
158
159#ifndef VSF_GPIO_CFG_FUNCTION_RENAME
160# define VSF_GPIO_CFG_FUNCTION_RENAME ENABLED
161#endif
162
163
167#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
168# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG DISABLED
169#endif
170
174#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
175# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
176#endif
177
178
179#ifndef VSF_GPIO_CFG_INHERT_HAL_CAPABILITY
180# define VSF_GPIO_CFG_INHERT_HAL_CAPABILITY ENABLED
181#endif
182
183#ifndef vsf_gpio_pin_mask_t
184# if defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
185# define vsf_gpio_pin_mask_t uint64_t
186# else
187# define vsf_gpio_pin_mask_t uint32_t
188# endif
189#endif
190
191/*============================ MACROFIED FUNCTIONS ===========================*/
192
193#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM) \
194 VSF_P ## __PORT_NUM ## __PIN_NUM = ((VSF_PORT ##__PORT_NUM) << 8) | __PIN_NUM,
195
196#define VSF_GPIO_APIS(__prefix_name) \
197 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_capability_t, gpio, capability, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr) \
198 __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) \
199 __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) \
200 __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) \
201 __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) \
202 __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) \
203 __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) \
204 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr) \
205 __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) \
206 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
207 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, clear, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
208 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, toggle, VSF_MCONNECT(__prefix_name, _gpio_t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
209 __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) \
210 __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) \
211 __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) \
212 __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) \
213 __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)
214
215/*============================ TYPES =========================================*/
216
217#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
281typedef enum vsf_gpio_mode_t {
285 VSF_GPIO_INPUT = (0 << 0),
288 VSF_GPIO_ANALOG = (1 << 0),
296 VSF_GPIO_EXTI = (4 << 0),
298 VSF_GPIO_AF = (5 << 0),
299
300 // Turn on or off the internal pull-up and pull-down resistors of the IOs
301 // It is independent of the direction of the IO and the alternative function
305
312
313/*
315 VSF_GPIO_AF = (5 << 0),
316
317 VSF_GPIO_INVERT_INPUT = (1 << 7),
318 #define VSF_GPIO_INVERT_INPUT VSF_GPIO_INVERT_INPUT
319
320 VSF_GPIO_HIGH_DRIVE_STRENGTH = (1 << 8),
321 #define VSF_GPIO_HIGH_DRIVE_STRENGTH VSF_GPIO_HIGH_DRIVE_STRENGTH
322
323 VSF_GPIO_SPEED_LOW = (0 << 9),
324 VSF_GPIO_SPEED_MEDIUM = (1 << 9),
325 VSF_GPIO_SPEED_HIGH = (2 << 9),
326 VSF_GPIO_SPEED_VERY_HIGH = (3 << 9),
327 VSF_GPIO_SPEED_MASK = (3 << 9),
328 #define VSF_GPIO_SPEED_LOW VSF_GPIO_SPEED_LOW
329 #define VSF_GPIO_SPEED_MEDIUM VSF_GPIO_SPEED_MEDIUM
330 #define VSF_GPIO_SPEED_HIGH VSF_GPIO_SPEED_HIGH
331 #define VSF_GPIO_SPEED_VERY_HIGH VSF_GPIO_SPEED_VERY_HIGH
332 #define VSF_GPIO_SPEED_MASK VSF_GPIO_SPEED_MASK
333*/
335#endif
336
337enum {
339
340#ifndef VSF_GPIO_MODE_MASK
347#endif
348
352
359
363#ifdef VSF_GPIO_INVERT_INPUT
364 | VSF_GPIO_INVERT_INPUT
365#endif
366#ifdef VSF_GPIO_HIGH_DRIVE_STRENGTH
367 | VSF_GPIO_HIGH_DRIVE_STRENGTH
368#endif
369#ifdef VSF_GPIO_SPEED_MASK
371#endif
372#ifdef VSF_GPIO_SPEED_MASK
374#endif
376
377#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
379typedef struct vsf_gpio_t vsf_gpio_t;
380
382typedef void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr,
383 vsf_gpio_pin_mask_t pin_mask);
384
392
394typedef struct vsf_gpio_cfg_t {
399
402
409
419#endif
420
421#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
422typedef struct vsf_gpio_capability_t {
423#if VSF_GPIO_CFG_INHERT_HAL_CAPABILITY == ENABLED
425#endif
431 uint8_t is_async : 1;
432
436
439
444
453#endif
454
455typedef struct vsf_gpio_op_t {
456#undef __VSF_HAL_TEMPLATE_API
457#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
458
459 VSF_GPIO_APIS(vsf)
461
462#if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
473};
474#endif
475
476
477#if VSF_HW_GPIO_PORT_COUNT > 0
478typedef enum vsf_io_port_no_t {
479#if defined(VSF_GPIO_CFG_PORTA)
480 VSF_PORTA,
481#endif
482#if defined(VSF_GPIO_CFG_PORTB)
483 VSF_PORTB,
484#endif
485#if defined(VSF_GPIO_CFG_PORTC)
486 VSF_PORTC,
487#endif
488#if defined(VSF_GPIO_CFG_PORTD)
489 VSF_PORTD,
490#endif
491#if defined(VSF_GPIO_CFG_PORTE)
492 VSF_PORTE,
493#endif
494#if defined(VSF_GPIO_CFG_PORTF)
495 VSF_PORTF,
496#endif
497#if defined(VSF_GPIO_CFG_PORTG)
498 VSF_PORTG,
499#endif
500#if defined(VSF_GPIO_CFG_PORTH)
501 VSF_PORTH,
502#endif
503#if defined(VSF_GPIO_CFG_PORTI)
504 VSF_PORTI,
505#endif
506#if defined(VSF_GPIO_CFG_PORTJ)
507 VSF_PORTJ,
508#endif
509#if defined(VSF_GPIO_CFG_PORTK)
510 VSF_PORTK,
511#endif
513
514typedef enum vsf_io_port_pin_no_t {
515#if defined(VSF_GPIO_CFG_PORTA)
517#endif
518#if defined(VSF_GPIO_CFG_PORTB)
520#endif
521#if defined(VSF_GPIO_CFG_PORTC)
523#endif
524#if defined(VSF_GPIO_CFG_PORTD)
526#endif
527#if defined(VSF_GPIO_CFG_PORTE)
529#endif
530#if defined(VSF_GPIO_CFG_PORTF)
532#endif
533#if defined(VSF_GPIO_CFG_PORTG)
535#endif
536#if defined(VSF_GPIO_CFG_PORTH)
538#endif
539#if defined(VSF_GPIO_CFG_PORTI)
541#endif
542#if defined(VSF_GPIO_CFG_PORTJ)
544#endif
545#if defined(VSF_GPIO_CFG_PORTK)
547#endif
548} vsf_io_port_pin_no_t;
549#endif
550
551/*============================ GLOBAL VARIABLES ==============================*/
552/*============================ MACROFIED FUNCTIONS ===========================*/
553/*============================ PROTOTYPES ====================================*/
554
573 vsf_gpio_pin_mask_t pin_mask,
574 vsf_gpio_cfg_t *cfg);
575
577// \~english
578// @brief Configure one or more ports and pin of the gpio instance
579// @param[in] cfg: array of vsf_gpio_port_cfg_pins_t structures, refer @ref vsf_gpio_port_cfg_pins_t
580// @param[in] count: number of struct array vsf_gpio_port_cfg_pins_t
581// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
582// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
583//
584// \~chinese
585// @brief 配置 gpio 的一个或者多个端口和引脚
586// @param[in] cfg: vsf_gpio_port_cfg_pins_t 结构体数组, 参考 @ref vsf_gpio_port_cfg_pins_t
587// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pins_t 的数量
588// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE , 失败返回负数。
589// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
590// */
591//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
592// uint_fast8_t count);
593//
595// \~english
596// @brief Configure one pin for one or more ports of the gpio instance
597// @param[in] cfg: a pointer to structure @ref vsf_gpio_port_cfg_pin_t
598// @param[in] count: number of struct array vsf_gpio_port_cfg_pin_t
599// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
600// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
601//
602// \~chinese
603// @brief 配置 gpio 的一个或者多个端口的一个引脚
604// @param[in] cfg: 结构体 vsf_gpio_port_cfg_pin_t 的指针,参考 @ref vsf_gpio_port_cfg_pin_t
605// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pin_t 的数量
606// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE , 失败返回负数。
607// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
608// */
609//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
610// uint_fast8_t count);
611
612
627extern void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr,
628 vsf_gpio_pin_mask_t pin_mask,
629 vsf_gpio_pin_mask_t direction_mask);
630
646 vsf_gpio_pin_mask_t pin_mask);
647
660extern void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
661
674extern void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
675
688extern void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
689
702
717extern void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask,
719
732extern void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
733
746extern void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
747
760extern void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
761
781extern void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
782
802extern void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
803
814
827
845
860
861/*============================ INLINE FUNCTIONS ==============================*/
862
863static inline uint8_t vsf_gpio_get_port(uint16_t port_pin_index)
864{
865 return port_pin_index >> 8;
866}
867
868static inline uint8_t vsf_gpio_get_pin(uint16_t port_pin_index)
869{
870 return port_pin_index & 0xFF;
871}
872
873static inline vsf_err_t vsf_gpio_port_config_pin(vsf_gpio_t *gpio_ptr,
874 uint16_t pin_index,
875 vsf_gpio_cfg_t *cfg_ptr)
876{
877 return vsf_gpio_port_config_pins(gpio_ptr, 1 << pin_index, cfg_ptr);
878}
879
880/*============================ MACROS ========================================*/
881
882#if VSF_GPIO_CFG_FUNCTION_RENAME == ENABLED
883# define __vsf_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_t)
884# define vsf_gpio_capability(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_capability) ((__vsf_gpio_t *)(__GPIO))
885# define vsf_gpio_port_config_pins(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_port_config_pins) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
886# define vsf_gpio_set_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
887# define vsf_gpio_get_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
888# define vsf_gpio_set_input(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_input) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
889# define vsf_gpio_set_output(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_output) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
890# define vsf_gpio_switch_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_switch_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
891# define vsf_gpio_read(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read) ((__vsf_gpio_t *)(__GPIO))
892# define vsf_gpio_write(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_write) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
893# define vsf_gpio_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
894# define vsf_gpio_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
895# define vsf_gpio_output_and_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
896# define vsf_gpio_output_and_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
897# define vsf_gpio_toggle(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_toggle) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
898# define vsf_gpio_exti_irq_config(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_config) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
899# define vsf_gpio_exti_irq_enable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_enable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
900# define vsf_gpio_exti_irq_disable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_disable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
901
902# define vsf_gpio_exti_irq_pin_config(__GPIO, ...) VSF_MCONNECT(vsf_exti_gpio, _exti_irq_pin_config) ((vsf_exti_gpio_t *)(__GPIO), ##__VA_ARGS__)
903#endif
904
905// too long, put it end of file
906#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 0)
907# define VSF_PIN0 0
908# define VSF_PIN0_MASK (1 << VSF_PIN0)
909#endif
910
911#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 1)
912# define VSF_PIN1 1
913# define VSF_PIN1_MASK (1 << VSF_PIN1)
914#endif
915
916#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 2)
917# define VSF_PIN2 2
918# define VSF_PIN2_MASK (1 << VSF_PIN2)
919#endif
920
921#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 3)
922# define VSF_PIN3 3
923# define VSF_PIN3_MASK (1 << VSF_PIN3)
924#endif
925
926#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 4)
927# define VSF_PIN4 4
928# define VSF_PIN4_MASK (1 << VSF_PIN4)
929#endif
930
931#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 5)
932# define VSF_PIN5 5
933# define VSF_PIN5_MASK (1 << VSF_PIN5)
934#endif
935
936#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 6)
937# define VSF_PIN6 6
938# define VSF_PIN6_MASK (1 << VSF_PIN6)
939#endif
940
941#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 7)
942# define VSF_PIN7 7
943# define VSF_PIN7_MASK (1 << VSF_PIN7)
944#endif
945
946#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 8)
947# define VSF_PIN8 8
948# define VSF_PIN8_MASK (1 << VSF_PIN8)
949#endif
950
951#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 9)
952# define VSF_PIN9 9
953# define VSF_PIN9_MASK (1 << VSF_PIN9)
954#endif
955
956#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 10)
957# define VSF_PIN10 10
958# define VSF_PIN10_MASK (1 << VSF_PIN10)
959#endif
960
961#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 11)
962# define VSF_PIN11 11
963# define VSF_PIN11_MASK (1 << VSF_PIN11)
964#endif
965
966#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 12)
967# define VSF_PIN12 12
968# define VSF_PIN12_MASK (1 << VSF_PIN12)
969#endif
970
971#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 13)
972# define VSF_PIN13 13
973# define VSF_PIN13_MASK (1 << VSF_PIN13)
974#endif
975
976#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 14)
977# define VSF_PIN14 14
978# define VSF_PIN14_MASK (1 << VSF_PIN14)
979#endif
980
981#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 15)
982# define VSF_PIN15 15
983# define VSF_PIN15_MASK (1 << VSF_PIN15)
984#endif
985
986#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 16)
987# define VSF_PIN16 16
988# define VSF_PIN16_MASK (1 << VSF_PIN16)
989#endif
990
991#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 17)
992# define VSF_PIN17 17
993# define VSF_PIN17_MASK (1 << VSF_PIN17)
994#endif
995
996#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 18)
997# define VSF_PIN18 18
998# define VSF_PIN18_MASK (1 << VSF_PIN18)
999#endif
1000
1001#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 19)
1002# define VSF_PIN19 19
1003# define VSF_PIN19_MASK (1 << VSF_PIN19)
1004#endif
1005
1006#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 20)
1007# define VSF_PIN20 20
1008# define VSF_PIN20_MASK (1 << VSF_PIN20)
1009#endif
1010
1011#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 21)
1012# define VSF_PIN21 21
1013# define VSF_PIN21_MASK (1 << VSF_PIN21)
1014#endif
1015
1016#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 22)
1017# define VSF_PIN22 22
1018# define VSF_PIN22_MASK (1 << VSF_PIN22)
1019#endif
1020
1021#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 23)
1022# define VSF_PIN23 23
1023# define VSF_PIN23_MASK (1 << VSF_PIN23)
1024#endif
1025
1026#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 24)
1027# define VSF_PIN24 24
1028# define VSF_PIN24_MASK (1 << VSF_PIN24)
1029#endif
1030
1031#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 25)
1032# define VSF_PIN25 25
1033# define VSF_PIN25_MASK (1 << VSF_PIN25)
1034#endif
1035
1036#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 26)
1037# define VSF_PIN26 26
1038# define VSF_PIN26_MASK (1 << VSF_PIN26)
1039#endif
1040
1041#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 27)
1042# define VSF_PIN27 27
1043# define VSF_PIN27_MASK (1 << VSF_PIN27)
1044#endif
1045
1046#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 28)
1047# define VSF_PIN28 28
1048# define VSF_PIN28_MASK (1 << VSF_PIN28)
1049#endif
1050
1051#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 29)
1052# define VSF_PIN29 29
1053# define VSF_PIN29_MASK (1 << VSF_PIN29)
1054#endif
1055
1056#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 30)
1057# define VSF_PIN30 30
1058# define VSF_PIN30_MASK (1 << VSF_PIN30)
1059#endif
1060
1061#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 31)
1062# define VSF_PIN31 31
1063# define VSF_PIN31_MASK (1 << VSF_PIN31)
1064#endif
1065
1066#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 32)
1067# define VSF_PIN32 32
1068# define VSF_PIN32_MASK (1 << VSF_PIN32)
1069#endif
1070
1071#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 33)
1072# define VSF_PIN33 33
1073# define VSF_PIN33_MASK (1 << VSF_PIN33)
1074#endif
1075
1076#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 34)
1077# define VSF_PIN34 34
1078# define VSF_PIN34_MASK (1 << VSF_PIN34)
1079#endif
1080
1081#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 35)
1082# define VSF_PIN35 35
1083# define VSF_PIN35_MASK (1 << VSF_PIN35)
1084#endif
1085
1086#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 36)
1087# define VSF_PIN36 36
1088# define VSF_PIN36_MASK (1 << VSF_PIN36)
1089#endif
1090
1091#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 37)
1092# define VSF_PIN37 37
1093# define VSF_PIN37_MASK (1 << VSF_PIN37)
1094#endif
1095
1096#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 38)
1097# define VSF_PIN38 38
1098# define VSF_PIN38_MASK (1 << VSF_PIN38)
1099#endif
1100
1101#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 39)
1102# define VSF_PIN39 39
1103# define VSF_PIN39_MASK (1 << VSF_PIN39)
1104#endif
1105
1106#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 40)
1107# define VSF_PIN40 40
1108# define VSF_PIN40_MASK (1 << VSF_PIN40)
1109#endif
1110
1111#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 41)
1112# define VSF_PIN41 41
1113# define VSF_PIN41_MASK (1 << VSF_PIN41)
1114#endif
1115
1116#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 42)
1117# define VSF_PIN42 42
1118# define VSF_PIN42_MASK (1 << VSF_PIN42)
1119#endif
1120
1121#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 43)
1122# define VSF_PIN43 43
1123# define VSF_PIN43_MASK (1 << VSF_PIN43)
1124#endif
1125
1126#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 44)
1127# define VSF_PIN44 44
1128# define VSF_PIN44_MASK (1 << VSF_PIN44)
1129#endif
1130
1131#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 45)
1132# define VSF_PIN45 45
1133# define VSF_PIN45_MASK (1 << VSF_PIN45)
1134#endif
1135
1136#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 46)
1137# define VSF_PIN46 46
1138# define VSF_PIN46_MASK (1 << VSF_PIN46)
1139#endif
1140
1141#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 47)
1142# define VSF_PIN47 47
1143# define VSF_PIN47_MASK (1 << VSF_PIN47)
1144#endif
1145
1146#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 48)
1147# define VSF_PIN48 48
1148# define VSF_PIN48_MASK (1 << VSF_PIN48)
1149#endif
1150
1151#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 49)
1152# define VSF_PIN49 49
1153# define VSF_PIN49_MASK (1 << VSF_PIN49)
1154#endif
1155
1156#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 50)
1157# define VSF_PIN50 50
1158# define VSF_PIN50_MASK (1 << VSF_PIN50)
1159#endif
1160
1161#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 51)
1162# define VSF_PIN51 51
1163# define VSF_PIN51_MASK (1 << VSF_PIN51)
1164#endif
1165
1166#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 52)
1167# define VSF_PIN52 52
1168# define VSF_PIN52_MASK (1 << VSF_PIN52)
1169#endif
1170
1171#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 53)
1172# define VSF_PIN53 53
1173# define VSF_PIN53_MASK (1 << VSF_PIN53)
1174#endif
1175
1176#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 54)
1177# define VSF_PIN54 54
1178# define VSF_PIN54_MASK (1 << VSF_PIN54)
1179#endif
1180
1181#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 55)
1182# define VSF_PIN55 55
1183# define VSF_PIN55_MASK (1 << VSF_PIN55)
1184#endif
1185
1186#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 56)
1187# define VSF_PIN56 56
1188# define VSF_PIN56_MASK (1 << VSF_PIN56)
1189#endif
1190
1191#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 57)
1192# define VSF_PIN57 57
1193# define VSF_PIN57_MASK (1 << VSF_PIN57)
1194#endif
1195
1196#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 58)
1197# define VSF_PIN58 58
1198# define VSF_PIN58_MASK (1 << VSF_PIN58)
1199#endif
1200
1201#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 59)
1202# define VSF_PIN59 59
1203# define VSF_PIN59_MASK (1 << VSF_PIN59)
1204#endif
1205
1206#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 60)
1207# define VSF_PIN60 60
1208# define VSF_PIN60_MASK (1 << VSF_PIN60)
1209#endif
1210
1211#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 61)
1212# define VSF_PIN61 61
1213# define VSF_PIN61_MASK (1 << VSF_PIN61)
1214#endif
1215
1216#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 62)
1217# define VSF_PIN62 62
1218# define VSF_PIN62_MASK (1 << VSF_PIN62)
1219#endif
1220
1221#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 63)
1222# define VSF_PIN63 63
1223# define VSF_PIN63_MASK (1 << VSF_PIN63)
1224#endif
1225
1226#ifdef __cplusplus
1227}
1228#endif
1229
1230#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 stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_gpio.h:422
uint8_t support_output_and_clear
Definition vsf_template_gpio.h:435
uint8_t pin_count
Definition vsf_template_gpio.h:443
uint8_t support_interrupt
supports external interrupts
Definition vsf_template_gpio.h:438
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:451
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:424
gpio channel configuration
Definition vsf_template_gpio.h:394
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:397
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:395
Definition vsf_template_gpio.h:387
void * target_ptr
Definition vsf_template_gpio.h:389
vsf_gpio_exti_isr_handler_t * handler_fn
Definition vsf_template_gpio.h:388
vsf_arch_prio_t prio
Definition vsf_template_gpio.h:390
Definition vsf_template_gpio.h:455
Definition vsf_template_gpio.h:400
uint16_t port_pin_index
Definition vsf_template_gpio.h:401
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:407
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:405
Definition vsf_template_gpio.h:410
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
uint16_t port_index
Definition vsf_template_gpio.h:411
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:412
Definition vsf_template_gpio.h:471
const vsf_gpio_op_t * op
Definition vsf_template_gpio.h:472
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:889
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:382
#define vsf_gpio_switch_direction(__GPIO,...)
Definition vsf_template_gpio.h:890
#define vsf_gpio_get_direction(__GPIO,...)
Definition vsf_template_gpio.h:887
#define vsf_gpio_toggle(__GPIO,...)
Definition vsf_template_gpio.h:897
#define vsf_gpio_set(__GPIO,...)
Definition vsf_template_gpio.h:893
#define vsf_gpio_port_config_pins(__GPIO,...)
Definition vsf_template_gpio.h:885
#define vsf_gpio_output_and_clear(__GPIO,...)
Definition vsf_template_gpio.h:896
#define vsf_gpio_clear(__GPIO,...)
Definition vsf_template_gpio.h:894
#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM)
Definition vsf_template_gpio.h:193
#define VSF_GPIO_CFG_PIN_COUNT
Definition vsf_template_gpio.h:117
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:353
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:341
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:349
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:360
@ VSF_GPIO_FLOATING
Definition vsf_template_gpio.h:338
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:187
#define vsf_gpio_set_direction(__GPIO,...)
Definition vsf_template_gpio.h:886
#define vsf_gpio_output_and_set(__GPIO,...)
Definition vsf_template_gpio.h:895
#define vsf_gpio_write(__GPIO,...)
Definition vsf_template_gpio.h:892
#define vsf_gpio_set_input(__GPIO,...)
Definition vsf_template_gpio.h:888
#define vsf_gpio_exti_irq_enable(__GPIO,...)
Definition vsf_template_gpio.h:899
#define VSF_GPIO_APIS(__prefix_name)
Definition vsf_template_gpio.h:196
#define vsf_gpio_exti_irq_disable(__GPIO,...)
Definition vsf_template_gpio.h:900
#define vsf_gpio_exti_irq_config(__GPIO,...)
Definition vsf_template_gpio.h:898
#define vsf_gpio_read(__GPIO)
Definition vsf_template_gpio.h:891
vsf_gpio_mode_t
Predefined VSF GPIO modes that can be reimplemented in specific hal drivers.
Definition vsf_template_gpio.h:281
@ VSF_GPIO_NO_PULL_UP_DOWN
Definition vsf_template_gpio.h:302
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Definition vsf_template_gpio.h:308
@ VSF_GPIO_OUTPUT_PUSH_PULL
Definition vsf_template_gpio.h:291
@ VSF_GPIO_EXTI
Set GPIO as external interrupt IO.
Definition vsf_template_gpio.h:296
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Definition vsf_template_gpio.h:307
@ VSF_GPIO_EXTI_MODE_NONE
Definition vsf_template_gpio.h:306
@ VSF_GPIO_EXTI_MODE_RISING
Definition vsf_template_gpio.h:309
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Definition vsf_template_gpio.h:311
@ VSF_GPIO_PULL_UP
Definition vsf_template_gpio.h:303
@ VSF_GPIO_AF
Set GPIO to Alternative Function.
Definition vsf_template_gpio.h:298
@ VSF_GPIO_INPUT
Definition vsf_template_gpio.h:285
@ VSF_GPIO_ANALOG
Definition vsf_template_gpio.h:288
@ VSF_GPIO_EXTI_MODE_FALLING
Definition vsf_template_gpio.h:310
@ VSF_GPIO_OUTPUT_OPEN_DRAIN
Definition vsf_template_gpio.h:294
@ VSF_GPIO_PULL_DOWN
Definition vsf_template_gpio.h:304
#define vsf_gpio_capability(__GPIO)
Definition vsf_template_gpio.h:884