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_PORT0) && (VSF_HW_GPIO_PORT_MASK & (1ul << 0))
118# define VSF_GPIO_CFG_PORT0 ENABLED
119#endif
120
121#if !defined(VSF_GPIO_CFG_PORT1) && (VSF_HW_GPIO_PORT_MASK & (1ul << 1))
122# define VSF_GPIO_CFG_PORT1 ENABLED
123#endif
124
125#if !defined(VSF_GPIO_CFG_PORT2) && (VSF_HW_GPIO_PORT_MASK & (1ul << 2))
126# define VSF_GPIO_CFG_PORT2 ENABLED
127#endif
128
129#if !defined(VSF_GPIO_CFG_PORT3) && (VSF_HW_GPIO_PORT_MASK & (1ul << 3))
130# define VSF_GPIO_CFG_PORT3 ENABLED
131#endif
132
133#if !defined(VSF_GPIO_CFG_PORT4) && (VSF_HW_GPIO_PORT_MASK & (1ul << 4))
134# define VSF_GPIO_CFG_PORT4 ENABLED
135#endif
136
137#if !defined(VSF_GPIO_CFG_PORT5) && (VSF_HW_GPIO_PORT_MASK & (1ul << 5))
138# define VSF_GPIO_CFG_PORT5 ENABLED
139#endif
140
141#if !defined(VSF_GPIO_CFG_PORT6) && (VSF_HW_GPIO_PORT_MASK & (1ul << 6))
142# define VSF_GPIO_CFG_PORT6 ENABLED
143#endif
144
145#if !defined(VSF_GPIO_CFG_PORT7) && (VSF_HW_GPIO_PORT_MASK & (1ul << 7))
146# define VSF_GPIO_CFG_PORT7 ENABLED
147#endif
148
149#if !defined(VSF_GPIO_CFG_PORT8) && (VSF_HW_GPIO_PORT_MASK & (1ul << 8))
150# define VSF_GPIO_CFG_PORT8 ENABLED
151#endif
152
153#if !defined(VSF_GPIO_CFG_PORT9) && (VSF_HW_GPIO_PORT_MASK & (1ul << 9))
154# define VSF_GPIO_CFG_PORT9 ENABLED
155#endif
156
157#if !defined(VSF_GPIO_CFG_PORT10) && (VSF_HW_GPIO_PORT_MASK & (1ul << 10))
158# define VSF_GPIO_CFG_PORT10 ENABLED
159#endif
160
161#if !defined(VSF_GPIO_CFG_PORT11) && (VSF_HW_GPIO_PORT_MASK & (1ul << 11))
162# define VSF_GPIO_CFG_PORT11 ENABLED
163#endif
164
165#if !defined(VSF_GPIO_CFG_PORT12) && (VSF_HW_GPIO_PORT_MASK & (1ul << 12))
166# define VSF_GPIO_CFG_PORT12 ENABLED
167#endif
168
169#if !defined(VSF_GPIO_CFG_PORT13) && (VSF_HW_GPIO_PORT_MASK & (1ul << 13))
170# define VSF_GPIO_CFG_PORT13 ENABLED
171#endif
172
173#if !defined(VSF_GPIO_CFG_PORT14) && (VSF_HW_GPIO_PORT_MASK & (1ul << 14))
174# define VSF_GPIO_CFG_PORT14 ENABLED
175#endif
176
177#if !defined(VSF_GPIO_CFG_PORT15) && (VSF_HW_GPIO_PORT_MASK & (1ul << 15))
178# define VSF_GPIO_CFG_PORT15 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, __PORT_CHAR) \
275 VSF_P ## __PORT_NUM ## _ ## __PIN_NUM = ((VSF_PORT ## __PORT_NUM) << 8) | __PIN_NUM,\
276 VSF_P ## __PORT_CHAR ## __PIN_NUM = ((VSF_PORT ## __PORT_NUM) << 8) | __PIN_NUM,
277
278#define VSF_GPIO_APIS(__prefix_name) \
279 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_capability_t, gpio, capability, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
280 __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) \
281 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, get_pin_configuration, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, uint16_t pin_index, vsf_gpio_cfg_t * cfg_ptr) \
282 __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) \
283 __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) \
284 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_input, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
285 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_output, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
286 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, switch_direction, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
287 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
288 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read_output_register, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
289 __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) \
290 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
291 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, clear, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
292 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, toggle, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
293 __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) \
294 __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) \
295 __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) \
296 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, exti_irq_get_configuration, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_exti_irq_cfg_t *irq_cfg_ptr) \
297 __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) \
298 __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)
299
300/*============================ TYPES =========================================*/
301
302#ifndef vsf_gpio_pin_mask_t
303# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
305# elif defined(VSF_HW_GPIO_PIN_AMSK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
307# else
309# endif
310# define vsf_gpio_pin_mask_t vsf_gpio_pin_mask_t
311#endif
312
313#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
377typedef enum vsf_gpio_mode_t {
388 VSF_GPIO_INPUT = (0 << 0),
389
398 VSF_GPIO_ANALOG = (1 << 0),
399
409
419
428 VSF_GPIO_EXTI = (4 << 0),
429
438 VSF_GPIO_AF = (5 << 0),
439
449
459
469
477
485
493
501
509
517
518/*
520 VSF_GPIO_AF = (5 << 0),
521
522 VSF_GPIO_INVERT_INPUT = (1 << 7),
523 #define VSF_GPIO_INVERT_INPUT VSF_GPIO_INVERT_INPUT
524
525 VSF_GPIO_DRIVE_STRENGTH_LOW = (0 << 8),
526 VSF_GPIO_DRIVE_STRENGTH_MEDIUM = (1 << 8),
527 VSF_GPIO_DRIVE_STRENGTH_HIGH = (2 << 8),
528 VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH = (3 << 8),
529 VSF_GPIO_DRIVE_STRENGTH_MASK = (3 << 8),
530 #define VSF_GPIO_DRIVE_STRENGTH_LOW VSF_GPIO_DRIVE_STRENGTH_LOW
531 #define VSF_GPIO_DRIVE_STRENGTH_MEDIUM VSF_GPIO_DRIVE_STRENGTH_MEDIUM
532 #define VSF_GPIO_DRIVE_STRENGTH_HIGH VSF_GPIO_DRIVE_STRENGTH_HIGH
533 #define VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH
534 #define VSF_GPIO_DRIVE_STRENGTH_MASK VSF_GPIO_DRIVE_STRENGTH_MASK
535
536 VSF_GPIO_SPEED_LOW = (0 << 10),
537 VSF_GPIO_SPEED_MEDIUM = (1 << 10),
538 VSF_GPIO_SPEED_HIGH = (2 << 10),
539 VSF_GPIO_SPEED_VERY_HIGH = (3 << 10),
540 VSF_GPIO_SPEED_MASK = (3 << 10),
541 #define VSF_GPIO_SPEED_LOW VSF_GPIO_SPEED_LOW
542 #define VSF_GPIO_SPEED_MEDIUM VSF_GPIO_SPEED_MEDIUM
543 #define VSF_GPIO_SPEED_HIGH VSF_GPIO_SPEED_HIGH
544 #define VSF_GPIO_SPEED_VERY_HIGH VSF_GPIO_SPEED_VERY_HIGH
545 #define VSF_GPIO_SPEED_MASK VSF_GPIO_SPEED_MASK
546*/
548#endif
549
550enum {
552
553#ifndef VSF_GPIO_MODE_MASK
560#endif
561
565
572
576#ifdef VSF_GPIO_INVERT_INPUT
577 | VSF_GPIO_INVERT_INPUT
578#endif
579#ifdef VSF_GPIO_DRIVE_STRENGTH_MASK
581#endif
582#ifdef VSF_GPIO_SPEED_MASK
584#endif
586
587#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
589typedef struct vsf_gpio_t vsf_gpio_t;
590
592typedef void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr,
593 vsf_gpio_pin_mask_t pin_mask);
594
602
604typedef struct vsf_gpio_cfg_t {
609#endif
610
613
620
633
634#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
635typedef struct vsf_gpio_capability_t {
636#if VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY == ENABLED
638#endif
650 uint8_t is_async : 1;
651
661
671
681
693
712#endif
713
714typedef struct vsf_gpio_op_t {
716#undef __VSF_HAL_TEMPLATE_API
717#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
719
720 VSF_GPIO_APIS(vsf_gpio)
722
723#if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
734};
735#endif
736
737
738#if VSF_HW_GPIO_PORT_COUNT > 0
739typedef enum vsf_io_port_no_t {
740#if defined(VSF_GPIO_CFG_PORT0)
741 VSF_PORT0,
742#endif
743#if defined(VSF_GPIO_CFG_PORT1)
744 VSF_PORT1,
745#endif
746#if defined(VSF_GPIO_CFG_PORT2)
747 VSF_PORT2,
748#endif
749#if defined(VSF_GPIO_CFG_PORT3)
750 VSF_PORT3,
751#endif
752#if defined(VSF_GPIO_CFG_PORT4)
753 VSF_PORT4,
754#endif
755#if defined(VSF_GPIO_CFG_PORT5)
756 VSF_PORT5,
757#endif
758#if defined(VSF_GPIO_CFG_PORT6)
759 VSF_PORT6,
760#endif
761#if defined(VSF_GPIO_CFG_PORT7)
762 VSF_PORT7,
763#endif
764#if defined(VSF_GPIO_CFG_PORT8)
765 VSF_PORT8,
766#endif
767#if defined(VSF_GPIO_CFG_PORT9)
768 VSF_PORT9,
769#endif
770#if defined(VSF_GPIO_CFG_PORT10)
771 VSF_PORT10,
772#endif
773#if defined(VSF_GPIO_CFG_PORT11)
774 VSF_PORT11,
775#endif
776#if defined(VSF_GPIO_CFG_PORT12)
777 VSF_PORT12,
778#endif
779#if defined(VSF_GPIO_CFG_PORT13)
780 VSF_PORT13,
781#endif
782#if defined(VSF_GPIO_CFG_PORT14)
783 VSF_PORT14,
784#endif
785#if defined(VSF_GPIO_CFG_PORT15)
786 VSF_PORT15,
787#endif
788#if defined(VSF_GPIO_CFG_PORT0)
789 VSF_PORTA = VSF_PORT0,
790#endif
791#if defined(VSF_GPIO_CFG_PORT1)
792 VSF_PORTB = VSF_PORT1,
793#endif
794#if defined(VSF_GPIO_CFG_PORT2)
795 VSF_PORTC = VSF_PORT2,
796#endif
797#if defined(VSF_GPIO_CFG_PORT3)
798 VSF_PORTD = VSF_PORT3,
799#endif
800#if defined(VSF_GPIO_CFG_PORT4)
801 VSF_PORTE = VSF_PORT4,
802#endif
803#if defined(VSF_GPIO_CFG_PORT5)
804 VSF_PORTF = VSF_PORT5,
805#endif
806#if defined(VSF_GPIO_CFG_PORT6)
807 VSF_PORTG = VSF_PORT6,
808#endif
809#if defined(VSF_GPIO_CFG_PORT7)
810 VSF_PORTH = VSF_PORT7,
811#endif
812#if defined(VSF_GPIO_CFG_PORT8)
813 VSF_PORTI = VSF_PORT8,
814#endif
815#if defined(VSF_GPIO_CFG_PORT9)
816 VSF_PORTJ = VSF_PORT9,
817#endif
818#if defined(VSF_GPIO_CFG_PORT10)
819 VSF_PORTK = VSF_PORT10,
820#endif
821#if defined(VSF_GPIO_CFG_PORT11)
822 VSF_PORTL = VSF_PORT11,
823#endif
824#if defined(VSF_GPIO_CFG_PORT12)
825 VSF_PORTM = VSF_PORT12,
826#endif
827#if defined(VSF_GPIO_CFG_PORT13)
828 VSF_PORTN = VSF_PORT13,
829#endif
830#if defined(VSF_GPIO_CFG_PORT14)
831 VSF_PORTO = VSF_PORT14,
832#endif
833#if defined(VSF_GPIO_CFG_PORT15)
834 VSF_PORTP = VSF_PORT15,
835#endif
837
838typedef enum vsf_io_port_pin_no_t {
839#if defined(VSF_GPIO_CFG_PORT0)
841#endif
842#if defined(VSF_GPIO_CFG_PORT1)
844#endif
845#if defined(VSF_GPIO_CFG_PORT2)
847#endif
848#if defined(VSF_GPIO_CFG_PORT3)
850#endif
851#if defined(VSF_GPIO_CFG_PORT4)
853#endif
854#if defined(VSF_GPIO_CFG_PORT5)
856#endif
857#if defined(VSF_GPIO_CFG_PORT6)
859#endif
860#if defined(VSF_GPIO_CFG_PORT7)
862#endif
863#if defined(VSF_GPIO_CFG_PORT8)
865#endif
866#if defined(VSF_GPIO_CFG_PORT9)
868#endif
869#if defined(VSF_GPIO_CFG_PORT10)
871#endif
872#if defined(VSF_GPIO_CFG_PORT11)
874#endif
875#if defined(VSF_GPIO_CFG_PORT12)
877#endif
878#if defined(VSF_GPIO_CFG_PORT13)
880#endif
881#if defined(VSF_GPIO_CFG_PORT14)
883#endif
884#if defined(VSF_GPIO_CFG_PORT15)
886#endif
887} vsf_io_port_pin_no_t;
888#endif
889
890/*============================ GLOBAL VARIABLES ==============================*/
891/*============================ MACROFIED FUNCTIONS ===========================*/
892/*============================ PROTOTYPES ====================================*/
893
911 vsf_gpio_pin_mask_t pin_mask,
912 vsf_gpio_cfg_t *cfg_ptr);
913
933 uint16_t pin_index,
934 vsf_gpio_cfg_t *cfg_ptr);
935
937// \~english
938// @brief Configure one or more ports and pin of the gpio instance
939// @param[in] cfg: array of vsf_gpio_port_cfg_pins_t structures, refer @ref vsf_gpio_port_cfg_pins_t
940// @param[in] count: number of struct array vsf_gpio_port_cfg_pins_t
941// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
942// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
943//
944// \~chinese
945// @brief 配置 gpio 的一个或者多个端口和引脚
946// @param[in] cfg: vsf_gpio_port_cfg_pins_t 结构体数组,参考 @ref vsf_gpio_port_cfg_pins_t
947// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pins_t 的数量
948// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE,失败返回负数。
949// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
950// */
951//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
952// uint_fast8_t count);
953//
955// \~english
956// @brief Configure one pin for one or more ports of the gpio instance
957// @param[in] cfg: a pointer to structure @ref vsf_gpio_port_cfg_pin_t
958// @param[in] count: number of struct array vsf_gpio_port_cfg_pin_t
959// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
960// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
961//
962// \~chinese
963// @brief 配置 gpio 的一个或者多个端口的一个引脚
964// @param[in] cfg: 结构体 vsf_gpio_port_cfg_pin_t 的指针,参考 @ref vsf_gpio_port_cfg_pin_t
965// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pin_t 的数量
966// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE,失败返回负数。
967// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
968// */
969//extern vsf_err_t VSF_PREFIX_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
970// uint_fast8_t count);
971
972
986extern void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr,
987 vsf_gpio_pin_mask_t pin_mask,
988 vsf_gpio_pin_mask_t direction_mask);
989
1004 vsf_gpio_pin_mask_t pin_mask);
1005
1017extern void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1018
1031extern void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1032
1045extern void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1046
1064
1084
1099extern void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask,
1101
1114extern void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1115
1128extern void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1129
1142extern void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1143
1163extern void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1164
1184extern void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1185
1196
1211
1226
1246
1264
1265/*============================ INLINE FUNCTIONS ==============================*/
1266
1267static inline uint8_t vsf_gpio_get_port(uint16_t port_pin_index)
1268{
1269 return port_pin_index >> 8;
1270}
1271
1272static inline uint8_t vsf_gpio_get_pin(uint16_t port_pin_index)
1273{
1274 return port_pin_index & 0xFF;
1275}
1276
1277static inline vsf_err_t vsf_gpio_port_config_pin(vsf_gpio_t *gpio_ptr,
1278 uint16_t pin_index,
1279 vsf_gpio_cfg_t *cfg_ptr)
1280{
1281 return vsf_gpio_port_config_pins(gpio_ptr, 1 << pin_index, cfg_ptr);
1282}
1283
1284
1285/*============================ MACROS ========================================*/
1286
1288#if VSF_GPIO_CFG_FUNCTION_RENAME == ENABLED
1289# define __vsf_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_t)
1290# define vsf_gpio_capability(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_capability) ((__vsf_gpio_t *)(__GPIO))
1291# define vsf_gpio_port_config_pins(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_port_config_pins) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1292# define vsf_gpio_get_pin_configuration(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_pin_configuration) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1293# define vsf_gpio_set_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1294# define vsf_gpio_get_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1295# define vsf_gpio_set_input(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_input) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1296# define vsf_gpio_set_output(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_output) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1297# define vsf_gpio_switch_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_switch_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1298# define vsf_gpio_read(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read) ((__vsf_gpio_t *)(__GPIO))
1299# define vsf_gpio_read_output_register(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read_output_register) ((__vsf_gpio_t *)(__GPIO))
1300# define vsf_gpio_write(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_write) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1301# define vsf_gpio_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1302# define vsf_gpio_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1303# define vsf_gpio_output_and_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1304# define vsf_gpio_output_and_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1305# define vsf_gpio_toggle(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_toggle) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1306# define vsf_gpio_exti_irq_config(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_config) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1307# define vsf_gpio_exti_irq_get_configuration(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_get_configuration) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1308# define vsf_gpio_exti_irq_enable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_enable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1309# define vsf_gpio_exti_irq_disable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_disable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1310#endif
1312
1313// too long, put it end of file
1314#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 0)
1315# define VSF_PIN0 0
1316# define VSF_PIN0_MASK (1 << VSF_PIN0)
1317#endif
1318
1319#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 1)
1320# define VSF_PIN1 1
1321# define VSF_PIN1_MASK (1 << VSF_PIN1)
1322#endif
1323
1324#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 2)
1325# define VSF_PIN2 2
1326# define VSF_PIN2_MASK (1 << VSF_PIN2)
1327#endif
1328
1329#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 3)
1330# define VSF_PIN3 3
1331# define VSF_PIN3_MASK (1 << VSF_PIN3)
1332#endif
1333
1334#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 4)
1335# define VSF_PIN4 4
1336# define VSF_PIN4_MASK (1 << VSF_PIN4)
1337#endif
1338
1339#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 5)
1340# define VSF_PIN5 5
1341# define VSF_PIN5_MASK (1 << VSF_PIN5)
1342#endif
1343
1344#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 6)
1345# define VSF_PIN6 6
1346# define VSF_PIN6_MASK (1 << VSF_PIN6)
1347#endif
1348
1349#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 7)
1350# define VSF_PIN7 7
1351# define VSF_PIN7_MASK (1 << VSF_PIN7)
1352#endif
1353
1354#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 8)
1355# define VSF_PIN8 8
1356# define VSF_PIN8_MASK (1 << VSF_PIN8)
1357#endif
1358
1359#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 9)
1360# define VSF_PIN9 9
1361# define VSF_PIN9_MASK (1 << VSF_PIN9)
1362#endif
1363
1364#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 10)
1365# define VSF_PIN10 10
1366# define VSF_PIN10_MASK (1 << VSF_PIN10)
1367#endif
1368
1369#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 11)
1370# define VSF_PIN11 11
1371# define VSF_PIN11_MASK (1 << VSF_PIN11)
1372#endif
1373
1374#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 12)
1375# define VSF_PIN12 12
1376# define VSF_PIN12_MASK (1 << VSF_PIN12)
1377#endif
1378
1379#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 13)
1380# define VSF_PIN13 13
1381# define VSF_PIN13_MASK (1 << VSF_PIN13)
1382#endif
1383
1384#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 14)
1385# define VSF_PIN14 14
1386# define VSF_PIN14_MASK (1 << VSF_PIN14)
1387#endif
1388
1389#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 15)
1390# define VSF_PIN15 15
1391# define VSF_PIN15_MASK (1 << VSF_PIN15)
1392#endif
1393
1394#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 16)
1395# define VSF_PIN16 16
1396# define VSF_PIN16_MASK (1 << VSF_PIN16)
1397#endif
1398
1399#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 17)
1400# define VSF_PIN17 17
1401# define VSF_PIN17_MASK (1 << VSF_PIN17)
1402#endif
1403
1404#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 18)
1405# define VSF_PIN18 18
1406# define VSF_PIN18_MASK (1 << VSF_PIN18)
1407#endif
1408
1409#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 19)
1410# define VSF_PIN19 19
1411# define VSF_PIN19_MASK (1 << VSF_PIN19)
1412#endif
1413
1414#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 20)
1415# define VSF_PIN20 20
1416# define VSF_PIN20_MASK (1 << VSF_PIN20)
1417#endif
1418
1419#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 21)
1420# define VSF_PIN21 21
1421# define VSF_PIN21_MASK (1 << VSF_PIN21)
1422#endif
1423
1424#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 22)
1425# define VSF_PIN22 22
1426# define VSF_PIN22_MASK (1 << VSF_PIN22)
1427#endif
1428
1429#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 23)
1430# define VSF_PIN23 23
1431# define VSF_PIN23_MASK (1 << VSF_PIN23)
1432#endif
1433
1434#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 24)
1435# define VSF_PIN24 24
1436# define VSF_PIN24_MASK (1 << VSF_PIN24)
1437#endif
1438
1439#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 25)
1440# define VSF_PIN25 25
1441# define VSF_PIN25_MASK (1 << VSF_PIN25)
1442#endif
1443
1444#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 26)
1445# define VSF_PIN26 26
1446# define VSF_PIN26_MASK (1 << VSF_PIN26)
1447#endif
1448
1449#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 27)
1450# define VSF_PIN27 27
1451# define VSF_PIN27_MASK (1 << VSF_PIN27)
1452#endif
1453
1454#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 28)
1455# define VSF_PIN28 28
1456# define VSF_PIN28_MASK (1 << VSF_PIN28)
1457#endif
1458
1459#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 29)
1460# define VSF_PIN29 29
1461# define VSF_PIN29_MASK (1 << VSF_PIN29)
1462#endif
1463
1464#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 30)
1465# define VSF_PIN30 30
1466# define VSF_PIN30_MASK (1 << VSF_PIN30)
1467#endif
1468
1469#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 31)
1470# define VSF_PIN31 31
1471# define VSF_PIN31_MASK (1 << VSF_PIN31)
1472#endif
1473
1474#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 32)
1475# define VSF_PIN32 32
1476# define VSF_PIN32_MASK (1 << VSF_PIN32)
1477#endif
1478
1479#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 33)
1480# define VSF_PIN33 33
1481# define VSF_PIN33_MASK (1 << VSF_PIN33)
1482#endif
1483
1484#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 34)
1485# define VSF_PIN34 34
1486# define VSF_PIN34_MASK (1 << VSF_PIN34)
1487#endif
1488
1489#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 35)
1490# define VSF_PIN35 35
1491# define VSF_PIN35_MASK (1 << VSF_PIN35)
1492#endif
1493
1494#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 36)
1495# define VSF_PIN36 36
1496# define VSF_PIN36_MASK (1 << VSF_PIN36)
1497#endif
1498
1499#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 37)
1500# define VSF_PIN37 37
1501# define VSF_PIN37_MASK (1 << VSF_PIN37)
1502#endif
1503
1504#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 38)
1505# define VSF_PIN38 38
1506# define VSF_PIN38_MASK (1 << VSF_PIN38)
1507#endif
1508
1509#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 39)
1510# define VSF_PIN39 39
1511# define VSF_PIN39_MASK (1 << VSF_PIN39)
1512#endif
1513
1514#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 40)
1515# define VSF_PIN40 40
1516# define VSF_PIN40_MASK (1 << VSF_PIN40)
1517#endif
1518
1519#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 41)
1520# define VSF_PIN41 41
1521# define VSF_PIN41_MASK (1 << VSF_PIN41)
1522#endif
1523
1524#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 42)
1525# define VSF_PIN42 42
1526# define VSF_PIN42_MASK (1 << VSF_PIN42)
1527#endif
1528
1529#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 43)
1530# define VSF_PIN43 43
1531# define VSF_PIN43_MASK (1 << VSF_PIN43)
1532#endif
1533
1534#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 44)
1535# define VSF_PIN44 44
1536# define VSF_PIN44_MASK (1 << VSF_PIN44)
1537#endif
1538
1539#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 45)
1540# define VSF_PIN45 45
1541# define VSF_PIN45_MASK (1 << VSF_PIN45)
1542#endif
1543
1544#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 46)
1545# define VSF_PIN46 46
1546# define VSF_PIN46_MASK (1 << VSF_PIN46)
1547#endif
1548
1549#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 47)
1550# define VSF_PIN47 47
1551# define VSF_PIN47_MASK (1 << VSF_PIN47)
1552#endif
1553
1554#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 48)
1555# define VSF_PIN48 48
1556# define VSF_PIN48_MASK (1 << VSF_PIN48)
1557#endif
1558
1559#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 49)
1560# define VSF_PIN49 49
1561# define VSF_PIN49_MASK (1 << VSF_PIN49)
1562#endif
1563
1564#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 50)
1565# define VSF_PIN50 50
1566# define VSF_PIN50_MASK (1 << VSF_PIN50)
1567#endif
1568
1569#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 51)
1570# define VSF_PIN51 51
1571# define VSF_PIN51_MASK (1 << VSF_PIN51)
1572#endif
1573
1574#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 52)
1575# define VSF_PIN52 52
1576# define VSF_PIN52_MASK (1 << VSF_PIN52)
1577#endif
1578
1579#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 53)
1580# define VSF_PIN53 53
1581# define VSF_PIN53_MASK (1 << VSF_PIN53)
1582#endif
1583
1584#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 54)
1585# define VSF_PIN54 54
1586# define VSF_PIN54_MASK (1 << VSF_PIN54)
1587#endif
1588
1589#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 55)
1590# define VSF_PIN55 55
1591# define VSF_PIN55_MASK (1 << VSF_PIN55)
1592#endif
1593
1594#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 56)
1595# define VSF_PIN56 56
1596# define VSF_PIN56_MASK (1 << VSF_PIN56)
1597#endif
1598
1599#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 57)
1600# define VSF_PIN57 57
1601# define VSF_PIN57_MASK (1 << VSF_PIN57)
1602#endif
1603
1604#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 58)
1605# define VSF_PIN58 58
1606# define VSF_PIN58_MASK (1 << VSF_PIN58)
1607#endif
1608
1609#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 59)
1610# define VSF_PIN59 59
1611# define VSF_PIN59_MASK (1 << VSF_PIN59)
1612#endif
1613
1614#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 60)
1615# define VSF_PIN60 60
1616# define VSF_PIN60_MASK (1 << VSF_PIN60)
1617#endif
1618
1619#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 61)
1620# define VSF_PIN61 61
1621# define VSF_PIN61_MASK (1 << VSF_PIN61)
1622#endif
1623
1624#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 62)
1625# define VSF_PIN62 62
1626# define VSF_PIN62_MASK (1 << VSF_PIN62)
1627#endif
1628
1629#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 63)
1630# define VSF_PIN63 63
1631# define VSF_PIN63_MASK (1 << VSF_PIN63)
1632#endif
1633
1634#ifdef __cplusplus
1635}
1636#endif
1637
1638#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_GPIO_DRIVE_STRENGTH_MASK
Definition gpio.h:111
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:635
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:670
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:692
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:680
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:710
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:637
gpio channel configuration
Definition vsf_template_gpio.h:604
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:607
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:605
Definition vsf_template_gpio.h:597
vsf_gpio_exti_isr_handler_t * handler_fn
Definition vsf_template_gpio.h:598
vsf_arch_prio_t prio
Definition vsf_template_gpio.h:600
void * target_ptr
Definition vsf_template_gpio.h:599
Definition vsf_template_gpio.h:714
Definition vsf_template_gpio.h:611
uint16_t port_pin_index
Definition vsf_template_gpio.h:612
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:618
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:616
Definition vsf_template_gpio.h:624
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:631
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:629
uint16_t port_index
Definition vsf_template_gpio.h:625
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:626
Definition vsf_template_gpio.h:732
const vsf_gpio_op_t * op
Definition vsf_template_gpio.h:733
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:103
vsf_gpio_mode_t
Definition gpio.h:80
uint32_t vsf_gpio_pin_mask_t
Definition gpio.h:70
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:592
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:566
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:554
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:562
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:573
@ VSF_GPIO_FLOATING
Definition vsf_template_gpio.h:551
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:54
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:117
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:135
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:81
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:153
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
vsf_err_t vsf_gpio_exti_irq_get_configuration(vsf_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *cfg_ptr)
Get the current external interrupt configuration of the gpio instance.
Definition gpio_common.c:190
#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:200
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:180
vsf_gpio_capability_t vsf_gpio_capability(vsf_gpio_t *gpio_ptr)
Get the capability of gpio instance.
Definition gpio_common.c:171
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:99
struct vsf_gpio_exti_irq_cfg_t vsf_gpio_exti_irq_cfg_t
#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM, __PORT_CHAR)
Definition vsf_template_gpio.h:274
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:310
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:144
struct vsf_gpio_cfg_t vsf_gpio_cfg_t
gpio channel configuration
vsf_gpio_pin_mask_t vsf_gpio_read_output_register(vsf_gpio_t *gpio_ptr)
Read the output register values of all pins of the gpio instance.
Definition gpio_common.c:108
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:209
#define VSF_GPIO_APIS(__prefix_name)
Definition vsf_template_gpio.h:278
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:162
vsf_gpio_mode_t
Predefined VSF GPIO modes that can be reimplemented in specific hal drivers.
Definition vsf_template_gpio.h:377
@ 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:448
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Detect interrupts on high signal level.
Definition vsf_template_gpio.h:492
@ 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:408
@ 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:428
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Detect interrupts on low signal level.
Definition vsf_template_gpio.h:484
@ VSF_GPIO_EXTI_MODE_NONE
No external interrupt detection enabled.
Definition vsf_template_gpio.h:476
@ VSF_GPIO_EXTI_MODE_RISING
Detect interrupts on rising edge of signal.
Definition vsf_template_gpio.h:500
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Detect interrupts on both rising and falling edges.
Definition vsf_template_gpio.h:516
@ VSF_GPIO_PULL_UP
Enable internal pull-up resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:458
@ VSF_GPIO_AF
Set GPIO pin to Alternative Function mode. Configures pin for peripheral-specific functions like UART...
Definition vsf_template_gpio.h:438
@ VSF_GPIO_INPUT
Set the GPIO pin as general-purpose input. Selects GPIO for the alternative function....
Definition vsf_template_gpio.h:388
@ 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:398
@ VSF_GPIO_EXTI_MODE_FALLING
Detect interrupts on falling edge of signal.
Definition vsf_template_gpio.h:508
@ 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:418
@ VSF_GPIO_PULL_DOWN
Enable internal pull-down resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:468
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:126
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:63
uint32_t vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:308
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:72
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:90
vsf_err_t vsf_gpio_get_pin_configuration(vsf_gpio_t *gpio_ptr, uint16_t pin_index, vsf_gpio_cfg_t *cfg_ptr)
Get configuration of a specific pin of the gpio instance.
Definition gpio_common.c:44
Generated from commit: vsfteam/vsf@74aa6ce