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
39#ifndef VSF_GPIO_CFG_MULTI_CLASS
40# define VSF_GPIO_CFG_MULTI_CLASS ENABLED
41#endif
42
50#if defined(VSF_HW_GPIO_PORT_COUNT) && !defined(VSF_HW_GPIO_PORT_MASK)
51# define VSF_HW_GPIO_PORT_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_GPIO_PORT_COUNT)
52#endif
53
61#if defined(VSF_HW_GPIO_PORT_MASK) && !defined(VSF_HW_GPIO_PORT_COUNT)
62# define VSF_HW_GPIO_PORT_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_GPIO_PORT_MASK)
63#endif
64
72#if defined(VSF_HW_GPIO_PIN_COUNT) && !defined(VSF_HW_GPIO_PIN_MASK)
73# define VSF_HW_GPIO_PIN_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_GPIO_PIN_COUNT)
74#endif
75
83#if defined(VSF_HW_GPIO_PIN_MASK) && !defined(VSF_HW_GPIO_PIN_COUNT)
84# define VSF_HW_GPIO_PIN_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_GPIO_PIN_MASK)
85#endif
86
94#ifdef VSF_HW_GPIO_PORT_COUNT
95# define VSF_HW_GPIO_COUNT VSF_HW_GPIO_PORT_COUNT
96#endif
97
105#ifdef VSF_HW_GPIO_PORT_MASK
106# define VSF_HW_GPIO_MASK VSF_HW_GPIO_PORT_MASK
107#endif
108
117#if !defined(VSF_GPIO_CFG_PORTA) && (VSF_HW_GPIO_PORT_MASK & (1ul << 0))
118# define VSF_GPIO_CFG_PORTA ENABLED
119#endif
120
121#if !defined(VSF_GPIO_CFG_PORTB) && (VSF_HW_GPIO_PORT_MASK & (1ul << 1))
122# define VSF_GPIO_CFG_PORTB ENABLED
123#endif
124
125#if !defined(VSF_GPIO_CFG_PORTC) && (VSF_HW_GPIO_PORT_MASK & (1ul << 2))
126# define VSF_GPIO_CFG_PORTC ENABLED
127#endif
128
129#if !defined(VSF_GPIO_CFG_PORTD) && (VSF_HW_GPIO_PORT_MASK & (1ul << 3))
130# define VSF_GPIO_CFG_PORTD ENABLED
131#endif
132
133#if !defined(VSF_GPIO_CFG_PORTE) && (VSF_HW_GPIO_PORT_MASK & (1ul << 4))
134# define VSF_GPIO_CFG_PORTE ENABLED
135#endif
136
137#if !defined(VSF_GPIO_CFG_PORTF) && (VSF_HW_GPIO_PORT_MASK & (1ul << 5))
138# define VSF_GPIO_CFG_PORTF ENABLED
139#endif
140
141#if !defined(VSF_GPIO_CFG_PORTG) && (VSF_HW_GPIO_PORT_MASK & (1ul << 6))
142# define VSF_GPIO_CFG_PORTG ENABLED
143#endif
144
145#if !defined(VSF_GPIO_CFG_PORTH) && (VSF_HW_GPIO_PORT_MASK & (1ul << 7))
146# define VSF_GPIO_CFG_PORTH ENABLED
147#endif
148
149#if !defined(VSF_GPIO_CFG_PORTI) && (VSF_HW_GPIO_PORT_MASK & (1ul << 8))
150# define VSF_GPIO_CFG_PORTI ENABLED
151#endif
152
153#if !defined(VSF_GPIO_CFG_PORTJ) && (VSF_HW_GPIO_PORT_MASK & (1ul << 9))
154# define VSF_GPIO_CFG_PORTJ ENABLED
155#endif
156
157#if !defined(VSF_GPIO_CFG_PORTK) && (VSF_HW_GPIO_PORT_MASK & (1ul << 10))
158# define VSF_GPIO_CFG_PORTK ENABLED
159#endif
160
161#if !defined(VSF_GPIO_CFG_PORTL) && (VSF_HW_GPIO_PORT_MASK & (1ul << 11))
162# define VSF_GPIO_CFG_PORTL ENABLED
163#endif
164
165#if !defined(VSF_GPIO_CFG_PORTM) && (VSF_HW_GPIO_PORT_MASK & (1ul << 12))
166# define VSF_GPIO_CFG_PORTM ENABLED
167#endif
168
169#if !defined(VSF_GPIO_CFG_PORTN) && (VSF_HW_GPIO_PORT_MASK & (1ul << 13))
170# define VSF_GPIO_CFG_PORTN ENABLED
171#endif
172
173#if !defined(VSF_GPIO_CFG_PORTO) && (VSF_HW_GPIO_PORT_MASK & (1ul << 14))
174# define VSF_GPIO_CFG_PORTO ENABLED
175#endif
176
177#if !defined(VSF_GPIO_CFG_PORTP) && (VSF_HW_GPIO_PORT_MASK & (1ul << 15))
178# define VSF_GPIO_CFG_PORTP ENABLED
179#endif
184#ifndef VSF_GPIO_CFG_PIN_COUNT
185# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
186# define VSF_GPIO_CFG_PIN_COUNT 64
187# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
188# elif defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
189# define VSF_GPIO_CFG_PIN_COUNT 64
190# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFFFFFFFFFF
191# else
192# define VSF_GPIO_CFG_PIN_COUNT 32
193# define VSF_GPIO_CFG_PIN_MASK 0xFFFFFFFF
194# endif
195#endif
196
220#ifndef VSF_GPIO_CFG_PREFIX
221# if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
222# define VSF_GPIO_CFG_PREFIX vsf
223# elif defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK != 0)
224# define VSF_GPIO_CFG_PREFIX vsf_hw
225# else
226# define VSF_GPIO_CFG_PREFIX vsf
227# endif
228#endif
229
237#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE
238# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE DISABLED
239#endif
240
248#ifndef VSF_GPIO_CFG_FUNCTION_RENAME
249# define VSF_GPIO_CFG_FUNCTION_RENAME ENABLED
250#endif
251
252
256#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG
257# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG DISABLED
258#endif
259
263#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY
264# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
265#endif
266
267
268#ifndef VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY
269# define VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY ENABLED
270#endif
271
272/*============================ MACROFIED FUNCTIONS ===========================*/
273
274#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM) \
275 VSF_P ## __PORT_NUM ## __PIN_NUM = ((VSF_PORT ##__PORT_NUM) << 8) | __PIN_NUM,
276
277#define VSF_GPIO_APIS(__prefix_name) \
278 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_capability_t, gpio, capability, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
279 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, port_config_pins, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t * cfg_ptr) \
280 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_direction, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask) \
281 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, get_direction, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
282 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_input, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
283 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_output, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
284 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, switch_direction, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
285 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
286 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, write, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value) \
287 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
288 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, clear, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
289 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, toggle, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
290 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, output_and_set, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
291 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, output_and_clear, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
292 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_config, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_exti_irq_cfg_t *irq_cfg_ptr) \
293 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_enable, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
294 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_disable, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
295
296/*============================ TYPES =========================================*/
297
298#ifndef vsf_gpio_pin_mask_t
299# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
301# elif defined(VSF_HW_GPIO_PIN_AMSK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
303# else
305# endif
306# define vsf_gpio_pin_mask_t vsf_gpio_pin_mask_t
307#endif
308
309#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
373typedef enum vsf_gpio_mode_t {
384 VSF_GPIO_INPUT = (0 << 0),
385
394 VSF_GPIO_ANALOG = (1 << 0),
395
405
415
424 VSF_GPIO_EXTI = (4 << 0),
425
434 VSF_GPIO_AF = (5 << 0),
435
445
455
465
473
481
489
497
505
513
514/*
516 VSF_GPIO_AF = (5 << 0),
517
518 VSF_GPIO_INVERT_INPUT = (1 << 7),
519 #define VSF_GPIO_INVERT_INPUT VSF_GPIO_INVERT_INPUT
520
521 VSF_GPIO_DRIVE_STRENGTH_LOW = (0 << 8),
522 VSF_GPIO_DRIVE_STRENGTH_MEDIUM = (1 << 8),
523 VSF_GPIO_DRIVE_STRENGTH_HIGH = (2 << 8),
524 VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH = (3 << 8),
525 VSF_GPIO_DRIVE_STRENGTH_MASK = (3 << 8),
526 #define VSF_GPIO_DRIVE_STRENGTH_LOW VSF_GPIO_DRIVE_STRENGTH_LOW
527 #define VSF_GPIO_DRIVE_STRENGTH_MEDIUM VSF_GPIO_DRIVE_STRENGTH_MEDIUM
528 #define VSF_GPIO_DRIVE_STRENGTH_HIGH VSF_GPIO_DRIVE_STRENGTH_HIGH
529 #define VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH
530 #define VSF_GPIO_DRIVE_STRENGTH_MASK VSF_GPIO_DRIVE_STRENGTH_MASK
531
532 VSF_GPIO_SPEED_LOW = (0 << 10),
533 VSF_GPIO_SPEED_MEDIUM = (1 << 10),
534 VSF_GPIO_SPEED_HIGH = (2 << 10),
535 VSF_GPIO_SPEED_VERY_HIGH = (3 << 10),
536 VSF_GPIO_SPEED_MASK = (3 << 10),
537 #define VSF_GPIO_SPEED_LOW VSF_GPIO_SPEED_LOW
538 #define VSF_GPIO_SPEED_MEDIUM VSF_GPIO_SPEED_MEDIUM
539 #define VSF_GPIO_SPEED_HIGH VSF_GPIO_SPEED_HIGH
540 #define VSF_GPIO_SPEED_VERY_HIGH VSF_GPIO_SPEED_VERY_HIGH
541 #define VSF_GPIO_SPEED_MASK VSF_GPIO_SPEED_MASK
542*/
544#endif
545
546enum {
548
549#ifndef VSF_GPIO_MODE_MASK
556#endif
557
561
568
572#ifdef VSF_GPIO_INVERT_INPUT
573 | VSF_GPIO_INVERT_INPUT
574#endif
575#ifdef VSF_GPIO_DRIVE_STRENGTH_MASK
576 | VSF_GPIO_DRIVE_STRENGTH_MASK
577#endif
578#ifdef VSF_GPIO_SPEED_MASK
580#endif
582
583#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
585typedef struct vsf_gpio_t vsf_gpio_t;
586
588typedef void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr,
589 vsf_gpio_pin_mask_t pin_mask);
590
598
600typedef struct vsf_gpio_cfg_t {
605#endif
606
609
616
626
627#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
628typedef struct vsf_gpio_capability_t {
629#if VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY == ENABLED
631#endif
643 uint8_t is_async : 1;
644
654
664
674
686
705#endif
706
707typedef struct vsf_gpio_op_t {
709#undef __VSF_HAL_TEMPLATE_API
710#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
712
713 VSF_GPIO_APIS(vsf_gpio)
715
716#if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
727};
728#endif
729
730
731#if VSF_HW_GPIO_PORT_COUNT > 0
732typedef enum vsf_io_port_no_t {
733#if defined(VSF_GPIO_CFG_PORTA)
734 VSF_PORTA,
735#endif
736#if defined(VSF_GPIO_CFG_PORTB)
737 VSF_PORTB,
738#endif
739#if defined(VSF_GPIO_CFG_PORTC)
740 VSF_PORTC,
741#endif
742#if defined(VSF_GPIO_CFG_PORTD)
743 VSF_PORTD,
744#endif
745#if defined(VSF_GPIO_CFG_PORTE)
746 VSF_PORTE,
747#endif
748#if defined(VSF_GPIO_CFG_PORTF)
749 VSF_PORTF,
750#endif
751#if defined(VSF_GPIO_CFG_PORTG)
752 VSF_PORTG,
753#endif
754#if defined(VSF_GPIO_CFG_PORTH)
755 VSF_PORTH,
756#endif
757#if defined(VSF_GPIO_CFG_PORTI)
758 VSF_PORTI,
759#endif
760#if defined(VSF_GPIO_CFG_PORTJ)
761 VSF_PORTJ,
762#endif
763#if defined(VSF_GPIO_CFG_PORTK)
764 VSF_PORTK,
765#endif
766#if defined(VSF_GPIO_CFG_PORTL)
767 VSF_PORTL,
768#endif
769#if defined(VSF_GPIO_CFG_PORTM)
770 VSF_PORTM,
771#endif
772#if defined(VSF_GPIO_CFG_PORTN)
773 VSF_PORTN,
774#endif
775#if defined(VSF_GPIO_CFG_PORTO)
776 VSF_PORTO,
777#endif
778#if defined(VSF_GPIO_CFG_PORTP)
779 VSF_PORTP,
780#endif
782
783typedef enum vsf_io_port_pin_no_t {
784#if defined(VSF_GPIO_CFG_PORTA)
786#endif
787#if defined(VSF_GPIO_CFG_PORTB)
789#endif
790#if defined(VSF_GPIO_CFG_PORTC)
792#endif
793#if defined(VSF_GPIO_CFG_PORTD)
795#endif
796#if defined(VSF_GPIO_CFG_PORTE)
798#endif
799#if defined(VSF_GPIO_CFG_PORTF)
801#endif
802#if defined(VSF_GPIO_CFG_PORTG)
804#endif
805#if defined(VSF_GPIO_CFG_PORTH)
807#endif
808#if defined(VSF_GPIO_CFG_PORTI)
810#endif
811#if defined(VSF_GPIO_CFG_PORTJ)
813#endif
814#if defined(VSF_GPIO_CFG_PORTK)
816#endif
817#if defined(VSF_GPIO_CFG_PORTL)
819#endif
820#if defined(VSF_GPIO_CFG_PORTM)
822#endif
823#if defined(VSF_GPIO_CFG_PORTN)
825#endif
826#if defined(VSF_GPIO_CFG_PORTO)
828#endif
829#if defined(VSF_GPIO_CFG_PORTP)
831#endif
832} vsf_io_port_pin_no_t;
833#endif
834
835/*============================ GLOBAL VARIABLES ==============================*/
836/*============================ MACROFIED FUNCTIONS ===========================*/
837/*============================ PROTOTYPES ====================================*/
838
856 vsf_gpio_pin_mask_t pin_mask,
857 vsf_gpio_cfg_t *cfg_ptr);
858
860// \~english
861// @brief Configure one or more ports and pin of the gpio instance
862// @param[in] cfg: array of vsf_gpio_port_cfg_pins_t structures, refer @ref vsf_gpio_port_cfg_pins_t
863// @param[in] count: number of struct array vsf_gpio_port_cfg_pins_t
864// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
865// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
866//
867// \~chinese
868// @brief 配置 gpio 的一个或者多个端口和引脚
869// @param[in] cfg: vsf_gpio_port_cfg_pins_t 结构体数组,参考 @ref vsf_gpio_port_cfg_pins_t
870// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pins_t 的数量
871// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE,失败返回负数。
872// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
873// */
874//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
875// uint_fast8_t count);
876//
878// \~english
879// @brief Configure one pin for one or more ports of the gpio instance
880// @param[in] cfg: a pointer to structure @ref vsf_gpio_port_cfg_pin_t
881// @param[in] count: number of struct array vsf_gpio_port_cfg_pin_t
882// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
883// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
884//
885// \~chinese
886// @brief 配置 gpio 的一个或者多个端口的一个引脚
887// @param[in] cfg: 结构体 vsf_gpio_port_cfg_pin_t 的指针,参考 @ref vsf_gpio_port_cfg_pin_t
888// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pin_t 的数量
889// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE,失败返回负数。
890// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
891// */
892//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
893// uint_fast8_t count);
894
895
909extern void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr,
910 vsf_gpio_pin_mask_t pin_mask,
911 vsf_gpio_pin_mask_t direction_mask);
912
927 vsf_gpio_pin_mask_t pin_mask);
928
940extern void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
941
954extern void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
955
968extern void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
969
982
997extern void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask,
999
1012extern void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1013
1026extern void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1027
1040extern void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1041
1061extern void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1062
1082extern void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1083
1094
1109
1129
1147
1148/*============================ INLINE FUNCTIONS ==============================*/
1149
1150static inline uint8_t vsf_gpio_get_port(uint16_t port_pin_index)
1151{
1152 return port_pin_index >> 8;
1153}
1154
1155static inline uint8_t vsf_gpio_get_pin(uint16_t port_pin_index)
1156{
1157 return port_pin_index & 0xFF;
1158}
1159
1160static inline vsf_err_t vsf_gpio_port_config_pin(vsf_gpio_t *gpio_ptr,
1161 uint16_t pin_index,
1162 vsf_gpio_cfg_t *cfg_ptr)
1163{
1164 return vsf_gpio_port_config_pins(gpio_ptr, 1 << pin_index, cfg_ptr);
1165}
1166
1167/*============================ MACROS ========================================*/
1168
1170#if VSF_GPIO_CFG_FUNCTION_RENAME == ENABLED
1171# define __vsf_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_t)
1172# define vsf_gpio_capability(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_capability) ((__vsf_gpio_t *)(__GPIO))
1173# define vsf_gpio_port_config_pins(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_port_config_pins) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1174# define vsf_gpio_set_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1175# define vsf_gpio_get_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1176# define vsf_gpio_set_input(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_input) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1177# define vsf_gpio_set_output(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_output) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1178# define vsf_gpio_switch_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_switch_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1179# define vsf_gpio_read(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read) ((__vsf_gpio_t *)(__GPIO))
1180# define vsf_gpio_write(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_write) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1181# define vsf_gpio_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1182# define vsf_gpio_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1183# define vsf_gpio_output_and_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1184# define vsf_gpio_output_and_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1185# define vsf_gpio_toggle(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_toggle) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1186# define vsf_gpio_exti_irq_config(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_config) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1187# define vsf_gpio_exti_irq_enable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_enable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1188# define vsf_gpio_exti_irq_disable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_disable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1189#endif
1191
1192// too long, put it end of file
1193#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 0)
1194# define VSF_PIN0 0
1195# define VSF_PIN0_MASK (1 << VSF_PIN0)
1196#endif
1197
1198#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 1)
1199# define VSF_PIN1 1
1200# define VSF_PIN1_MASK (1 << VSF_PIN1)
1201#endif
1202
1203#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 2)
1204# define VSF_PIN2 2
1205# define VSF_PIN2_MASK (1 << VSF_PIN2)
1206#endif
1207
1208#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 3)
1209# define VSF_PIN3 3
1210# define VSF_PIN3_MASK (1 << VSF_PIN3)
1211#endif
1212
1213#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 4)
1214# define VSF_PIN4 4
1215# define VSF_PIN4_MASK (1 << VSF_PIN4)
1216#endif
1217
1218#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 5)
1219# define VSF_PIN5 5
1220# define VSF_PIN5_MASK (1 << VSF_PIN5)
1221#endif
1222
1223#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 6)
1224# define VSF_PIN6 6
1225# define VSF_PIN6_MASK (1 << VSF_PIN6)
1226#endif
1227
1228#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 7)
1229# define VSF_PIN7 7
1230# define VSF_PIN7_MASK (1 << VSF_PIN7)
1231#endif
1232
1233#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 8)
1234# define VSF_PIN8 8
1235# define VSF_PIN8_MASK (1 << VSF_PIN8)
1236#endif
1237
1238#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 9)
1239# define VSF_PIN9 9
1240# define VSF_PIN9_MASK (1 << VSF_PIN9)
1241#endif
1242
1243#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 10)
1244# define VSF_PIN10 10
1245# define VSF_PIN10_MASK (1 << VSF_PIN10)
1246#endif
1247
1248#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 11)
1249# define VSF_PIN11 11
1250# define VSF_PIN11_MASK (1 << VSF_PIN11)
1251#endif
1252
1253#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 12)
1254# define VSF_PIN12 12
1255# define VSF_PIN12_MASK (1 << VSF_PIN12)
1256#endif
1257
1258#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 13)
1259# define VSF_PIN13 13
1260# define VSF_PIN13_MASK (1 << VSF_PIN13)
1261#endif
1262
1263#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 14)
1264# define VSF_PIN14 14
1265# define VSF_PIN14_MASK (1 << VSF_PIN14)
1266#endif
1267
1268#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 15)
1269# define VSF_PIN15 15
1270# define VSF_PIN15_MASK (1 << VSF_PIN15)
1271#endif
1272
1273#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 16)
1274# define VSF_PIN16 16
1275# define VSF_PIN16_MASK (1 << VSF_PIN16)
1276#endif
1277
1278#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 17)
1279# define VSF_PIN17 17
1280# define VSF_PIN17_MASK (1 << VSF_PIN17)
1281#endif
1282
1283#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 18)
1284# define VSF_PIN18 18
1285# define VSF_PIN18_MASK (1 << VSF_PIN18)
1286#endif
1287
1288#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 19)
1289# define VSF_PIN19 19
1290# define VSF_PIN19_MASK (1 << VSF_PIN19)
1291#endif
1292
1293#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 20)
1294# define VSF_PIN20 20
1295# define VSF_PIN20_MASK (1 << VSF_PIN20)
1296#endif
1297
1298#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 21)
1299# define VSF_PIN21 21
1300# define VSF_PIN21_MASK (1 << VSF_PIN21)
1301#endif
1302
1303#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 22)
1304# define VSF_PIN22 22
1305# define VSF_PIN22_MASK (1 << VSF_PIN22)
1306#endif
1307
1308#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 23)
1309# define VSF_PIN23 23
1310# define VSF_PIN23_MASK (1 << VSF_PIN23)
1311#endif
1312
1313#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 24)
1314# define VSF_PIN24 24
1315# define VSF_PIN24_MASK (1 << VSF_PIN24)
1316#endif
1317
1318#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 25)
1319# define VSF_PIN25 25
1320# define VSF_PIN25_MASK (1 << VSF_PIN25)
1321#endif
1322
1323#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 26)
1324# define VSF_PIN26 26
1325# define VSF_PIN26_MASK (1 << VSF_PIN26)
1326#endif
1327
1328#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 27)
1329# define VSF_PIN27 27
1330# define VSF_PIN27_MASK (1 << VSF_PIN27)
1331#endif
1332
1333#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 28)
1334# define VSF_PIN28 28
1335# define VSF_PIN28_MASK (1 << VSF_PIN28)
1336#endif
1337
1338#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 29)
1339# define VSF_PIN29 29
1340# define VSF_PIN29_MASK (1 << VSF_PIN29)
1341#endif
1342
1343#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 30)
1344# define VSF_PIN30 30
1345# define VSF_PIN30_MASK (1 << VSF_PIN30)
1346#endif
1347
1348#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 31)
1349# define VSF_PIN31 31
1350# define VSF_PIN31_MASK (1 << VSF_PIN31)
1351#endif
1352
1353#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 32)
1354# define VSF_PIN32 32
1355# define VSF_PIN32_MASK (1 << VSF_PIN32)
1356#endif
1357
1358#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 33)
1359# define VSF_PIN33 33
1360# define VSF_PIN33_MASK (1 << VSF_PIN33)
1361#endif
1362
1363#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 34)
1364# define VSF_PIN34 34
1365# define VSF_PIN34_MASK (1 << VSF_PIN34)
1366#endif
1367
1368#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 35)
1369# define VSF_PIN35 35
1370# define VSF_PIN35_MASK (1 << VSF_PIN35)
1371#endif
1372
1373#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 36)
1374# define VSF_PIN36 36
1375# define VSF_PIN36_MASK (1 << VSF_PIN36)
1376#endif
1377
1378#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 37)
1379# define VSF_PIN37 37
1380# define VSF_PIN37_MASK (1 << VSF_PIN37)
1381#endif
1382
1383#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 38)
1384# define VSF_PIN38 38
1385# define VSF_PIN38_MASK (1 << VSF_PIN38)
1386#endif
1387
1388#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 39)
1389# define VSF_PIN39 39
1390# define VSF_PIN39_MASK (1 << VSF_PIN39)
1391#endif
1392
1393#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 40)
1394# define VSF_PIN40 40
1395# define VSF_PIN40_MASK (1 << VSF_PIN40)
1396#endif
1397
1398#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 41)
1399# define VSF_PIN41 41
1400# define VSF_PIN41_MASK (1 << VSF_PIN41)
1401#endif
1402
1403#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 42)
1404# define VSF_PIN42 42
1405# define VSF_PIN42_MASK (1 << VSF_PIN42)
1406#endif
1407
1408#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 43)
1409# define VSF_PIN43 43
1410# define VSF_PIN43_MASK (1 << VSF_PIN43)
1411#endif
1412
1413#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 44)
1414# define VSF_PIN44 44
1415# define VSF_PIN44_MASK (1 << VSF_PIN44)
1416#endif
1417
1418#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 45)
1419# define VSF_PIN45 45
1420# define VSF_PIN45_MASK (1 << VSF_PIN45)
1421#endif
1422
1423#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 46)
1424# define VSF_PIN46 46
1425# define VSF_PIN46_MASK (1 << VSF_PIN46)
1426#endif
1427
1428#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 47)
1429# define VSF_PIN47 47
1430# define VSF_PIN47_MASK (1 << VSF_PIN47)
1431#endif
1432
1433#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 48)
1434# define VSF_PIN48 48
1435# define VSF_PIN48_MASK (1 << VSF_PIN48)
1436#endif
1437
1438#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 49)
1439# define VSF_PIN49 49
1440# define VSF_PIN49_MASK (1 << VSF_PIN49)
1441#endif
1442
1443#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 50)
1444# define VSF_PIN50 50
1445# define VSF_PIN50_MASK (1 << VSF_PIN50)
1446#endif
1447
1448#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 51)
1449# define VSF_PIN51 51
1450# define VSF_PIN51_MASK (1 << VSF_PIN51)
1451#endif
1452
1453#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 52)
1454# define VSF_PIN52 52
1455# define VSF_PIN52_MASK (1 << VSF_PIN52)
1456#endif
1457
1458#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 53)
1459# define VSF_PIN53 53
1460# define VSF_PIN53_MASK (1 << VSF_PIN53)
1461#endif
1462
1463#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 54)
1464# define VSF_PIN54 54
1465# define VSF_PIN54_MASK (1 << VSF_PIN54)
1466#endif
1467
1468#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 55)
1469# define VSF_PIN55 55
1470# define VSF_PIN55_MASK (1 << VSF_PIN55)
1471#endif
1472
1473#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 56)
1474# define VSF_PIN56 56
1475# define VSF_PIN56_MASK (1 << VSF_PIN56)
1476#endif
1477
1478#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 57)
1479# define VSF_PIN57 57
1480# define VSF_PIN57_MASK (1 << VSF_PIN57)
1481#endif
1482
1483#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 58)
1484# define VSF_PIN58 58
1485# define VSF_PIN58_MASK (1 << VSF_PIN58)
1486#endif
1487
1488#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 59)
1489# define VSF_PIN59 59
1490# define VSF_PIN59_MASK (1 << VSF_PIN59)
1491#endif
1492
1493#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 60)
1494# define VSF_PIN60 60
1495# define VSF_PIN60_MASK (1 << VSF_PIN60)
1496#endif
1497
1498#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 61)
1499# define VSF_PIN61 61
1500# define VSF_PIN61_MASK (1 << VSF_PIN61)
1501#endif
1502
1503#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 62)
1504# define VSF_PIN62 62
1505# define VSF_PIN62_MASK (1 << VSF_PIN62)
1506#endif
1507
1508#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 63)
1509# define VSF_PIN63 63
1510# define VSF_PIN63_MASK (1 << VSF_PIN63)
1511#endif
1512
1513#ifdef __cplusplus
1514}
1515#endif
1516
1517#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 uint32_t
Definition stdint.h:9
unsigned long long uint64_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_gpio.h:628
uint8_t support_output_and_clear
Support for atomic output and clear operations. Prevents signal glitches when switching from input to...
Definition vsf_template_gpio.h:663
uint8_t pin_count
Total number of pins in hardware. Includes all pins, even those that cannot be configured as GPIO....
Definition vsf_template_gpio.h:685
uint8_t support_interrupt
Support for external interrupt functionality. When set, the GPIO pins can be configured to generate i...
Definition vsf_template_gpio.h:673
vsf_gpio_pin_mask_t pin_mask
Available pin mask indicating which pins can be used as GPIO. Common bit patterns include:
Definition vsf_template_gpio.h:703
inherit(vsf_peripheral_capability_t) uint8_t is_async uint8_t support_output_and_set
Flag indicating if GPIO operations are asynchronous. When set, operations are only guaranteed to be s...
Definition vsf_template_gpio.h:630
gpio channel configuration
Definition vsf_template_gpio.h:600
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:603
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:601
Definition vsf_template_gpio.h:593
vsf_gpio_exti_isr_handler_t * handler_fn
Definition vsf_template_gpio.h:594
vsf_arch_prio_t prio
Definition vsf_template_gpio.h:596
void * target_ptr
Definition vsf_template_gpio.h:595
Definition vsf_template_gpio.h:707
Definition vsf_template_gpio.h:607
uint16_t port_pin_index
Definition vsf_template_gpio.h:608
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:614
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:612
Definition vsf_template_gpio.h:617
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:624
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:622
uint16_t port_index
Definition vsf_template_gpio.h:618
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:619
Definition vsf_template_gpio.h:725
const vsf_gpio_op_t * op
Definition vsf_template_gpio.h:726
Definition vsf_template_hal_driver.h:203
void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Definition gpio.h:105
vsf_gpio_mode_t
Definition gpio.h:82
uint32_t vsf_gpio_pin_mask_t
Definition gpio.h:72
vk_av_control_value_t value
Definition vsf_audio.h:171
#define VSF_MREPEAT(__COUNT, __MACRO, __PARAM)
Definition vsf_repeat_macro.h:51
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:588
void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask)
‍**
Definition gpio_common.c:44
void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value)
set the value of one or more of the gpio instances
Definition gpio_common.c:98
void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Set the value of one or more pins of the gpio instance to low.
Definition gpio_common.c:116
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:562
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:550
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:558
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:569
@ VSF_GPIO_FLOATING
Definition vsf_template_gpio.h:547
void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Set the direction of one or more pins of the gpio instance to output.
Definition gpio_common.c:71
void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Set the direction of one or more pins of the gpio instance to output high.
Definition gpio_common.c:134
vsf_err_t vsf_gpio_port_config_pins(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t *cfg_ptr)
Configure one or more pins of the gpio instance.
Definition gpio_common.c:35
#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM)
Definition vsf_template_gpio.h:274
#define VSF_GPIO_CFG_PIN_COUNT
Definition vsf_template_gpio.h:192
vsf_err_t vsf_gpio_exti_irq_enable(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Enable interrupt of one or more pins.
Definition gpio_common.c:171
struct vsf_gpio_capability_t vsf_gpio_capability_t
vsf_err_t vsf_gpio_exti_irq_config(vsf_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *cfg_ptr)
Configure external interrupt of the gpio instance.
Definition gpio_common.c:161
vsf_gpio_capability_t vsf_gpio_capability(vsf_gpio_t *gpio_ptr)
Get the capability of gpio instance.
Definition gpio_common.c:152
vsf_gpio_pin_mask_t vsf_gpio_read(vsf_gpio_t *gpio_ptr)
Read the values of all pins of the gpio instance.
Definition gpio_common.c:89
struct vsf_gpio_exti_irq_cfg_t vsf_gpio_exti_irq_cfg_t
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:306
void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Toggle the value of one or more pins of the gpio instance.
Definition gpio_common.c:125
struct vsf_gpio_cfg_t vsf_gpio_cfg_t
gpio channel configuration
vsf_err_t vsf_gpio_exti_irq_disable(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Disable interrupt of one or more pins.
Definition gpio_common.c:180
#define VSF_GPIO_APIS(__prefix_name)
Definition vsf_template_gpio.h:277
void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Set the direction of one or more pins of the gpio instance to output low.
Definition gpio_common.c:143
vsf_gpio_mode_t
Predefined VSF GPIO modes that can be reimplemented in specific hal drivers.
Definition vsf_template_gpio.h:373
@ VSF_GPIO_NO_PULL_UP_DOWN
No pull-up or pull-down resistors enabled. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:444
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Detect interrupts on high signal level.
Definition vsf_template_gpio.h:488
@ VSF_GPIO_OUTPUT_PUSH_PULL
Set GPIO pin as general-purpose push-pull output. Selects GPIO for the alternative function.
Definition vsf_template_gpio.h:404
@ VSF_GPIO_EXTI
Set GPIO pin as external interrupt IO. Configures the pin to detect and generate interrupts on signal...
Definition vsf_template_gpio.h:424
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Detect interrupts on low signal level.
Definition vsf_template_gpio.h:480
@ VSF_GPIO_EXTI_MODE_NONE
No external interrupt detection enabled.
Definition vsf_template_gpio.h:472
@ VSF_GPIO_EXTI_MODE_RISING
Detect interrupts on rising edge of signal.
Definition vsf_template_gpio.h:496
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Detect interrupts on both rising and falling edges.
Definition vsf_template_gpio.h:512
@ VSF_GPIO_PULL_UP
Enable internal pull-up resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:454
@ VSF_GPIO_AF
Set GPIO pin to Alternative Function mode. Configures pin for peripheral-specific functions like UART...
Definition vsf_template_gpio.h:434
@ VSF_GPIO_INPUT
Set the GPIO pin as general-purpose input. Selects GPIO for the alternative function....
Definition vsf_template_gpio.h:384
@ VSF_GPIO_ANALOG
Set the GPIO pin as analog IO (input or output). Selects analog or GPIO as an alternative function an...
Definition vsf_template_gpio.h:394
@ VSF_GPIO_EXTI_MODE_FALLING
Detect interrupts on falling edge of signal.
Definition vsf_template_gpio.h:504
@ VSF_GPIO_OUTPUT_OPEN_DRAIN
Set GPIO pin as general-purpose open-drain output. Selects GPIO for the alternative function.
Definition vsf_template_gpio.h:414
@ VSF_GPIO_PULL_DOWN
Enable internal pull-down resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:464
void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Set the value of one or more pins of the gpio instance to high.
Definition gpio_common.c:107
vsf_gpio_pin_mask_t vsf_gpio_get_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Get GPIO port pin direction.
Definition gpio_common.c:53
uint32_t vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:304
void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
set specified pins to input mode
Definition gpio_common.c:62
void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Toggle the orientation of one or more pins of a gpio instance.
Definition gpio_common.c:80
Generated from commit: vsfteam/vsf@cfd571b