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
290#ifndef __VSF_GPIO_CFG_SUPPORT_STANDARD_OPTIONAL
291# define __VSF_GPIO_CFG_SUPPORT_STANDARD_OPTIONAL DISABLED
292#endif
293
294#ifndef VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY
295# define VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY ENABLED
296#endif
297
308#ifndef VSF_GPIO_CFG_REIMPLEMENT_TYPE_CTRL
309# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
310#endif
311
312/*============================ MACROFIED FUNCTIONS ===========================*/
313
314#define __VSF_GPIO_PORT_PIN_NUM(__PIN_NUM, __PORT_NUM, __PORT_CHAR) \
315 VSF_P ## __PORT_NUM ## _ ## __PIN_NUM = ((VSF_PORT ## __PORT_NUM) << 8) | __PIN_NUM,\
316 VSF_P ## __PORT_CHAR ## __PIN_NUM = ((VSF_PORT ## __PORT_NUM) << 8) | __PIN_NUM,
317
318#define VSF_GPIO_APIS(__prefix_name) \
319 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_capability_t, gpio, capability, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
320 __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) \
321 __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) \
322 __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) \
323 __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) \
324 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_input, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
325 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set_output, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
326 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, switch_direction, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
327 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
328 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, read_output_register, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr) \
329 __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) \
330 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, set, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
331 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, clear, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
332 __VSF_HAL_TEMPLATE_API(__prefix_name, void, gpio, toggle, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
333 __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) \
334 __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) \
335 __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) \
336 __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) \
337 __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) \
338 __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) \
339 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_gpio_pin_mask_t, gpio, exti_irq_clear, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
340 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, gpio, ctrl, VSF_MCONNECT(__prefix_name, _t) *gpio_ptr, vsf_gpio_ctrl_t ctrl, void* param)
341
342/*============================ TYPES =========================================*/
343
344#ifndef vsf_gpio_pin_mask_t
345# if defined(VSF_HW_GPIO_PIN_COUNT) && (VSF_HW_GPIO_PIN_COUNT > 32)
347# elif defined(VSF_HW_GPIO_PIN_MASK) && (VSF_HW_GPIO_PIN_MASK & 0xFFFFFFFF00000000)
349# else
351# endif
352# define vsf_gpio_pin_mask_t vsf_gpio_pin_mask_t
353#endif
354
355#ifndef vsf_gpio_alternate_function_t
357# define vsf_gpio_alternate_function_t vsf_gpio_alternate_function_t
358#endif
359
360#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
407typedef enum vsf_gpio_mode_t {
418 VSF_GPIO_INPUT = (0 << 0),
419
428 VSF_GPIO_ANALOG = (1 << 0),
429
439
449
458 VSF_GPIO_EXTI = (4 << 0),
459
476 /*
477 VSF_GPIO_AF = (5 << 0),
478 #define VSF_GPIO_AF VSF_GPIO_AF
479 VSF_GPIO_AF_OUTPUT_PUSH_PULL = (5 << 0),
480 #define VSF_GPIO_AF_OUTPUT_PUSH_PULL VSF_GPIO_AF_OUTPUT_PUSH_PULL
481 VSF_GPIO_AF_OUTPUT_OPEN_DRAIN = (6 << 0),
482 #define VSF_GPIO_AF_OUTPUT_OPEN_DRAIN VSF_GPIO_AF_OUTPUT_OPEN_DRAIN
483 VSF_GPIO_AF_INPUT = (7 << 0),
484 #define VSF_GPIO_AF_INPUT VSF_GPIO_AF_INPUT
485 */
486
496
506
516
524
532
540
548
556
564
565/*
566 VSF_GPIO_INVERT_INPUT = (1 << 7),
567 #define VSF_GPIO_INVERT_INPUT VSF_GPIO_INVERT_INPUT
568
569 VSF_GPIO_DRIVE_STRENGTH_LOW = (0 << 8),
570 VSF_GPIO_DRIVE_STRENGTH_MEDIUM = (1 << 8),
571 VSF_GPIO_DRIVE_STRENGTH_HIGH = (2 << 8),
572 VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH = (3 << 8),
573 VSF_GPIO_DRIVE_STRENGTH_MASK = (3 << 8),
574 #define VSF_GPIO_DRIVE_STRENGTH_LOW VSF_GPIO_DRIVE_STRENGTH_LOW
575 #define VSF_GPIO_DRIVE_STRENGTH_MEDIUM VSF_GPIO_DRIVE_STRENGTH_MEDIUM
576 #define VSF_GPIO_DRIVE_STRENGTH_HIGH VSF_GPIO_DRIVE_STRENGTH_HIGH
577 #define VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH
578 #define VSF_GPIO_DRIVE_STRENGTH_MASK VSF_GPIO_DRIVE_STRENGTH_MASK
579
580 VSF_GPIO_SPEED_LOW = (0 << 10),
581 VSF_GPIO_SPEED_MEDIUM = (1 << 10),
582 VSF_GPIO_SPEED_HIGH = (2 << 10),
583 VSF_GPIO_SPEED_VERY_HIGH = (3 << 10),
584 VSF_GPIO_SPEED_MASK = (3 << 10),
585 #define VSF_GPIO_SPEED_LOW VSF_GPIO_SPEED_LOW
586 #define VSF_GPIO_SPEED_MEDIUM VSF_GPIO_SPEED_MEDIUM
587 #define VSF_GPIO_SPEED_HIGH VSF_GPIO_SPEED_HIGH
588 #define VSF_GPIO_SPEED_VERY_HIGH VSF_GPIO_SPEED_VERY_HIGH
589 #define VSF_GPIO_SPEED_MASK VSF_GPIO_SPEED_MASK
590*/
592#endif
593
594enum {
596
597#ifndef VSF_GPIO_MODE_AF_MASK
599#ifdef VSF_GPIO_AF
601#endif
602#ifdef VSF_GPIO_AF_OUTPUT_PUSH_PULL
604#endif
605#ifdef VSF_GPIO_AF_OUTPUT_OPEN_DRAIN
607#endif
608#ifdef VSF_GPIO_AF_INPUT
610#endif
612#endif
613
614#ifndef VSF_GPIO_MODE_MASK
621#endif
622
626
633
637#ifdef VSF_GPIO_INVERT_INPUT
638 | VSF_GPIO_INVERT_INPUT
639#endif
640#ifdef VSF_GPIO_DRIVE_STRENGTH_MASK
642#endif
643#ifdef VSF_GPIO_SPEED_MASK
645#endif
647
648#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
650typedef struct vsf_gpio_t vsf_gpio_t;
651
653typedef void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr,
654 vsf_gpio_pin_mask_t pin_mask);
655
663
665typedef struct vsf_gpio_cfg_t {
670#endif
671
674
681
694
695#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
696typedef struct vsf_gpio_capability_t {
697#if VSF_GPIO_CFG_INHERIT_HAL_CAPABILITY == ENABLED
699#endif
711 uint8_t is_async : 1;
712
722
732
742
752
762
774
793#endif
794
795#if VSF_GPIO_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
804typedef enum vsf_gpio_ctrl_t {
823
824 // ------------------------------------------------------------------------
825 // Optional members (documented only, not defined here).
826 // Concrete hardware drivers may add the following commands by enabling
827 // VSF_GPIO_CFG_REIMPLEMENT_TYPE_CTRL and redefining vsf_gpio_ctrl_t,
828 // together with a same-name macro so callers can probe support via #ifdef.
829 // They are optional because each command is only meaningful when the
830 // underlying hardware exhibits a specific constraint; drivers without
831 // that constraint should simply omit the command.
832 //
833 // VSF_GPIO_CTRL_EXTI_GET_STATUS
834 // Purpose : read which pins on this GPIO port currently have a
835 // pending EXTI (external interrupt) latch, so that
836 // glue layers such as gpio_to_exti can implement
837 // vsf_exti_status without adding a dedicated public
838 // GPIO API.
839 // Param : vsf_gpio_pin_mask_t * (out) - receives the pending
840 // pin mask.
841 // Returns : VSF_ERR_NONE on success;
842 // VSF_ERR_NOT_SUPPORT when the driver does not
843 // implement the command.
844 // Applicability : GPIO controllers whose EXTI pending status is
845 // aggregated per port and exposed through the same
846 // register block as GPIO; platforms with a dedicated
847 // EXTI IP block that already carries its own status
848 // API do not need this command.
849 //
850 // VSF_GPIO_CTRL_EXTI_TRIGGER
851 // Purpose : software-trigger EXTI on the given pins, i.e. force
852 // the EXTI pending latch to assert as if the pin had
853 // seen an external edge/level. Consumed by the
854 // gpio_to_exti glue layer to back vsf_exti_trigger
855 // and report cap.support_sw_trigger=1; the glue uses
856 // #ifdef on this macro to compile-time gate the
857 // feature.
858 // Param : vsf_gpio_pin_mask_t * (in) - mask of pins to trigger.
859 // Returns : VSF_ERR_NONE on success;
860 // VSF_ERR_NOT_SUPPORT when the driver does not
861 // implement the command.
862 // Applicability : GPIO/EXTI controllers that provide a software-
863 // trigger register (e.g. an SWIER-style latch set
864 // bit) reachable from the GPIO register block;
865 // platforms without such a register cannot honour
866 // the request and MUST omit both the enum member
867 // and the same-name macro so that the #ifdef guard
868 // disables the capability.
869 //
870 // 可选成员(仅文档化,这里不定义)。
871 // 具体硬件驱动可通过启用 VSF_GPIO_CFG_REIMPLEMENT_TYPE_CTRL 并重新
872 // 定义 vsf_gpio_ctrl_t 来增加以下命令,并提供同名宏以便调用方通过
873 // #ifdef 在编译期探测是否支持。之所以为可选,是因为每条命令仅在
874 // 底层硬件存在特定约束时才有意义;不具备该约束的驱动直接省略即可。
875 //
876 // VSF_GPIO_CTRL_EXTI_GET_STATUS
877 // 用途 : 读取当前 GPIO 口上哪些引脚存在未处理的 EXTI
878 // (外部中断)挂起标志,供 gpio_to_exti 等胶水层
879 // 在不引入专用公开 GPIO API 的前提下实现
880 // vsf_exti_status。
881 // 参数 : vsf_gpio_pin_mask_t *(输出) - 接收挂起的
882 // 引脚掩码。
883 // 返回值 : 成功返回 VSF_ERR_NONE;
884 // 驱动未实现此命令时返回 VSF_ERR_NOT_SUPPORT。
885 // 适用场景 : EXTI 挂起状态按 port 聚合、且寄存器块与 GPIO
886 // 共用的控制器;若平台有独立的 EXTI IP 且自带
887 // status API,则不必实现此命令。
888 //
889 // VSF_GPIO_CTRL_EXTI_TRIGGER
890 // 用途 : 对指定引脚软件触发 EXTI,使对应 pending latch
891 // 如同外部边沿/电平到来一样置位。由 gpio_to_exti
892 // 胶水层用于实现 vsf_exti_trigger、并据此把
893 // capability.support_sw_trigger 置为 1;胶水层
894 // 通过 #ifdef 此宏在编译期判断是否启用该能力。
895 // 参数 : vsf_gpio_pin_mask_t *(输入) - 要触发的引脚掩码。
896 // 返回值 : 成功返回 VSF_ERR_NONE;
897 // 驱动未实现此命令时返回 VSF_ERR_NOT_SUPPORT。
898 // 适用场景 : GPIO/EXTI 控制器提供软件触发寄存器(如 SWIER
899 // 那样的挂起置位位),且该寄存器可从 GPIO 寄存器
900 // 块访问;若平台没有这种寄存器,则不能实现该命令,
901 // 必须同时省略枚举成员与同名宏,使 #ifdef 保护
902 // 自动关闭该能力。
903 // ------------------------------------------------------------------------
905#endif
906
907typedef struct vsf_gpio_op_t {
909#undef __VSF_HAL_TEMPLATE_API
910#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
912
913 VSF_GPIO_APIS(vsf_gpio)
915
916#if VSF_GPIO_CFG_MULTI_CLASS == ENABLED
927};
928#endif
929
930
931#if VSF_HW_GPIO_PORT_COUNT > 0
932typedef enum vsf_gpio_port_no_t {
933#if defined(VSF_GPIO_CFG_PORT0)
934 VSF_PORT0,
935#endif
936#if defined(VSF_GPIO_CFG_PORT1)
937 VSF_PORT1,
938#endif
939#if defined(VSF_GPIO_CFG_PORT2)
940 VSF_PORT2,
941#endif
942#if defined(VSF_GPIO_CFG_PORT3)
943 VSF_PORT3,
944#endif
945#if defined(VSF_GPIO_CFG_PORT4)
946 VSF_PORT4,
947#endif
948#if defined(VSF_GPIO_CFG_PORT5)
949 VSF_PORT5,
950#endif
951#if defined(VSF_GPIO_CFG_PORT6)
952 VSF_PORT6,
953#endif
954#if defined(VSF_GPIO_CFG_PORT7)
955 VSF_PORT7,
956#endif
957#if defined(VSF_GPIO_CFG_PORT8)
958 VSF_PORT8,
959#endif
960#if defined(VSF_GPIO_CFG_PORT9)
961 VSF_PORT9,
962#endif
963#if defined(VSF_GPIO_CFG_PORT10)
964 VSF_PORT10,
965#endif
966#if defined(VSF_GPIO_CFG_PORT11)
967 VSF_PORT11,
968#endif
969#if defined(VSF_GPIO_CFG_PORT12)
970 VSF_PORT12,
971#endif
972#if defined(VSF_GPIO_CFG_PORT13)
973 VSF_PORT13,
974#endif
975#if defined(VSF_GPIO_CFG_PORT14)
976 VSF_PORT14,
977#endif
978#if defined(VSF_GPIO_CFG_PORT15)
979 VSF_PORT15,
980#endif
981#if defined(VSF_GPIO_CFG_PORT0)
982 VSF_PORTA = VSF_PORT0,
983#endif
984#if defined(VSF_GPIO_CFG_PORT1)
985 VSF_PORTB = VSF_PORT1,
986#endif
987#if defined(VSF_GPIO_CFG_PORT2)
988 VSF_PORTC = VSF_PORT2,
989#endif
990#if defined(VSF_GPIO_CFG_PORT3)
991 VSF_PORTD = VSF_PORT3,
992#endif
993#if defined(VSF_GPIO_CFG_PORT4)
994 VSF_PORTE = VSF_PORT4,
995#endif
996#if defined(VSF_GPIO_CFG_PORT5)
997 VSF_PORTF = VSF_PORT5,
998#endif
999#if defined(VSF_GPIO_CFG_PORT6)
1000 VSF_PORTG = VSF_PORT6,
1001#endif
1002#if defined(VSF_GPIO_CFG_PORT7)
1003 VSF_PORTH = VSF_PORT7,
1004#endif
1005#if defined(VSF_GPIO_CFG_PORT8)
1006 VSF_PORTI = VSF_PORT8,
1007#endif
1008#if defined(VSF_GPIO_CFG_PORT9)
1009 VSF_PORTJ = VSF_PORT9,
1010#endif
1011#if defined(VSF_GPIO_CFG_PORT10)
1012 VSF_PORTK = VSF_PORT10,
1013#endif
1014#if defined(VSF_GPIO_CFG_PORT11)
1015 VSF_PORTL = VSF_PORT11,
1016#endif
1017#if defined(VSF_GPIO_CFG_PORT12)
1018 VSF_PORTM = VSF_PORT12,
1019#endif
1020#if defined(VSF_GPIO_CFG_PORT13)
1021 VSF_PORTN = VSF_PORT13,
1022#endif
1023#if defined(VSF_GPIO_CFG_PORT14)
1024 VSF_PORTO = VSF_PORT14,
1025#endif
1026#if defined(VSF_GPIO_CFG_PORT15)
1027 VSF_PORTP = VSF_PORT15,
1028#endif
1029} vsf_gpio_port_no_t;
1030
1031typedef enum vsf_gpio_port_pin_no_t {
1032#if defined(VSF_GPIO_CFG_PORT0)
1034#endif
1035#if defined(VSF_GPIO_CFG_PORT1)
1037#endif
1038#if defined(VSF_GPIO_CFG_PORT2)
1040#endif
1041#if defined(VSF_GPIO_CFG_PORT3)
1043#endif
1044#if defined(VSF_GPIO_CFG_PORT4)
1046#endif
1047#if defined(VSF_GPIO_CFG_PORT5)
1049#endif
1050#if defined(VSF_GPIO_CFG_PORT6)
1052#endif
1053#if defined(VSF_GPIO_CFG_PORT7)
1055#endif
1056#if defined(VSF_GPIO_CFG_PORT8)
1058#endif
1059#if defined(VSF_GPIO_CFG_PORT9)
1061#endif
1062#if defined(VSF_GPIO_CFG_PORT10)
1064#endif
1065#if defined(VSF_GPIO_CFG_PORT11)
1067#endif
1068#if defined(VSF_GPIO_CFG_PORT12)
1070#endif
1071#if defined(VSF_GPIO_CFG_PORT13)
1073#endif
1074#if defined(VSF_GPIO_CFG_PORT14)
1076#endif
1077#if defined(VSF_GPIO_CFG_PORT15)
1079#endif
1080} vsf_gpio_port_pin_no_t;
1081#endif
1082
1083/*============================ GLOBAL VARIABLES ==============================*/
1084/*============================ MACROFIED FUNCTIONS ===========================*/
1085/*============================ PROTOTYPES ====================================*/
1086
1104 vsf_gpio_pin_mask_t pin_mask,
1105 vsf_gpio_cfg_t *cfg_ptr);
1106
1126 uint16_t pin_index,
1127 vsf_gpio_cfg_t *cfg_ptr);
1128
1130// \~english
1131// @brief Configure one or more ports and pin of the gpio instance
1132// @param[in] cfg: array of vsf_gpio_port_cfg_pins_t structures, refer @ref vsf_gpio_port_cfg_pins_t
1133// @param[in] count: number of struct array vsf_gpio_port_cfg_pins_t
1134// @return vsf_err_t: VSF_ERR_NONE if GPIO Configuration Successful, or a negative error code
1135// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
1136//
1137// \~chinese
1138// @brief 配置 gpio 的一个或者多个端口和引脚
1139// @param[in] cfg: vsf_gpio_port_cfg_pins_t 结构体数组,参考 @ref vsf_gpio_port_cfg_pins_t
1140// @param[in] count: 结构体数组 vsf_gpio_port_cfg_pins_t 的数量
1141// @return vsf_err_t: 如果 GPIO 配置成功返回 VSF_ERR_NONE,失败返回负值错误码。
1142// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
1143// */
1144#if __VSF_GPIO_CFG_SUPPORT_STANDARD_OPTIONAL
1162extern vsf_err_t vsf_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
1163 uint_fast8_t count);
1164
1182extern vsf_err_t vsf_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
1183 uint_fast8_t count);
1184#endif
1185
1186
1200extern void vsf_gpio_set_direction(vsf_gpio_t *gpio_ptr,
1201 vsf_gpio_pin_mask_t pin_mask,
1202 vsf_gpio_pin_mask_t direction_mask);
1203
1218 vsf_gpio_pin_mask_t pin_mask);
1219
1231extern void vsf_gpio_set_input(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1232
1245extern void vsf_gpio_set_output(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1246
1259extern void vsf_gpio_switch_direction(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1260
1278
1298
1313extern void vsf_gpio_write(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask,
1315
1328extern void vsf_gpio_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1329
1342extern void vsf_gpio_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1343
1356extern void vsf_gpio_toggle(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1357
1377extern void vsf_gpio_output_and_set(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1378
1398extern void vsf_gpio_output_and_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
1399
1410
1425
1440
1460
1478
1505
1521extern vsf_err_t vsf_gpio_ctrl(vsf_gpio_t *gpio_ptr, vsf_gpio_ctrl_t ctrl, void * param);
1522
1523/*============================ INLINE FUNCTIONS ==============================*/
1524
1525static inline uint8_t vsf_gpio_get_port(uint16_t port_pin_index)
1526{
1527 return port_pin_index >> 8;
1528}
1529
1530static inline uint8_t vsf_gpio_get_pin(uint16_t port_pin_index)
1531{
1532 return port_pin_index & 0xFF;
1533}
1534
1535static inline vsf_err_t vsf_gpio_port_config_pin(vsf_gpio_t *gpio_ptr,
1536 uint16_t pin_index,
1537 vsf_gpio_cfg_t *cfg_ptr)
1538{
1539 return vsf_gpio_port_config_pins(gpio_ptr, (vsf_gpio_pin_mask_t)1 << pin_index, cfg_ptr);
1540}
1541
1542
1543/*============================ MACROS ========================================*/
1544
1546#if VSF_GPIO_CFG_FUNCTION_RENAME == ENABLED
1547# define __vsf_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_t)
1548# define vsf_gpio_capability(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_capability) ((__vsf_gpio_t *)(__GPIO))
1549# define vsf_gpio_port_config_pins(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_port_config_pins) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1550# define vsf_gpio_get_pin_configuration(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_pin_configuration) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1551# define vsf_gpio_set_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1552# define vsf_gpio_get_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_get_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1553# define vsf_gpio_set_input(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_input) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1554# define vsf_gpio_set_output(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set_output) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1555# define vsf_gpio_switch_direction(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_switch_direction) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1556# define vsf_gpio_read(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read) ((__vsf_gpio_t *)(__GPIO))
1557# define vsf_gpio_read_output_register(__GPIO) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_read_output_register) ((__vsf_gpio_t *)(__GPIO))
1558# define vsf_gpio_write(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_write) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1559# define vsf_gpio_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1560# define vsf_gpio_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1561# define vsf_gpio_output_and_set(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_set) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1562# define vsf_gpio_output_and_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_output_and_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1563# define vsf_gpio_toggle(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_toggle) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1564# define vsf_gpio_exti_irq_config(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_config) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1565# 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__)
1566# define vsf_gpio_exti_irq_enable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_enable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1567# define vsf_gpio_exti_irq_disable(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_disable) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1568# define vsf_gpio_exti_irq_clear(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_exti_irq_clear) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1569# define vsf_gpio_ctrl(__GPIO, ...) VSF_MCONNECT(VSF_GPIO_CFG_PREFIX, _gpio_ctrl) ((__vsf_gpio_t *)(__GPIO), ##__VA_ARGS__)
1570#endif
1572
1573// too long, put it end of file
1574#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 0)
1575# define VSF_PIN0 0
1576# define VSF_PIN0_MASK (1 << VSF_PIN0)
1577#endif
1578
1579#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 1)
1580# define VSF_PIN1 1
1581# define VSF_PIN1_MASK (1 << VSF_PIN1)
1582#endif
1583
1584#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 2)
1585# define VSF_PIN2 2
1586# define VSF_PIN2_MASK (1 << VSF_PIN2)
1587#endif
1588
1589#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 3)
1590# define VSF_PIN3 3
1591# define VSF_PIN3_MASK (1 << VSF_PIN3)
1592#endif
1593
1594#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 4)
1595# define VSF_PIN4 4
1596# define VSF_PIN4_MASK (1 << VSF_PIN4)
1597#endif
1598
1599#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 5)
1600# define VSF_PIN5 5
1601# define VSF_PIN5_MASK (1 << VSF_PIN5)
1602#endif
1603
1604#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 6)
1605# define VSF_PIN6 6
1606# define VSF_PIN6_MASK (1 << VSF_PIN6)
1607#endif
1608
1609#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 7)
1610# define VSF_PIN7 7
1611# define VSF_PIN7_MASK (1 << VSF_PIN7)
1612#endif
1613
1614#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 8)
1615# define VSF_PIN8 8
1616# define VSF_PIN8_MASK (1 << VSF_PIN8)
1617#endif
1618
1619#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 9)
1620# define VSF_PIN9 9
1621# define VSF_PIN9_MASK (1 << VSF_PIN9)
1622#endif
1623
1624#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 10)
1625# define VSF_PIN10 10
1626# define VSF_PIN10_MASK (1 << VSF_PIN10)
1627#endif
1628
1629#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 11)
1630# define VSF_PIN11 11
1631# define VSF_PIN11_MASK (1 << VSF_PIN11)
1632#endif
1633
1634#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 12)
1635# define VSF_PIN12 12
1636# define VSF_PIN12_MASK (1 << VSF_PIN12)
1637#endif
1638
1639#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 13)
1640# define VSF_PIN13 13
1641# define VSF_PIN13_MASK (1 << VSF_PIN13)
1642#endif
1643
1644#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 14)
1645# define VSF_PIN14 14
1646# define VSF_PIN14_MASK (1 << VSF_PIN14)
1647#endif
1648
1649#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 15)
1650# define VSF_PIN15 15
1651# define VSF_PIN15_MASK (1 << VSF_PIN15)
1652#endif
1653
1654#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 16)
1655# define VSF_PIN16 16
1656# define VSF_PIN16_MASK (1 << VSF_PIN16)
1657#endif
1658
1659#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 17)
1660# define VSF_PIN17 17
1661# define VSF_PIN17_MASK (1 << VSF_PIN17)
1662#endif
1663
1664#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 18)
1665# define VSF_PIN18 18
1666# define VSF_PIN18_MASK (1 << VSF_PIN18)
1667#endif
1668
1669#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 19)
1670# define VSF_PIN19 19
1671# define VSF_PIN19_MASK (1 << VSF_PIN19)
1672#endif
1673
1674#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 20)
1675# define VSF_PIN20 20
1676# define VSF_PIN20_MASK (1 << VSF_PIN20)
1677#endif
1678
1679#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 21)
1680# define VSF_PIN21 21
1681# define VSF_PIN21_MASK (1 << VSF_PIN21)
1682#endif
1683
1684#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 22)
1685# define VSF_PIN22 22
1686# define VSF_PIN22_MASK (1 << VSF_PIN22)
1687#endif
1688
1689#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 23)
1690# define VSF_PIN23 23
1691# define VSF_PIN23_MASK (1 << VSF_PIN23)
1692#endif
1693
1694#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 24)
1695# define VSF_PIN24 24
1696# define VSF_PIN24_MASK (1 << VSF_PIN24)
1697#endif
1698
1699#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 25)
1700# define VSF_PIN25 25
1701# define VSF_PIN25_MASK (1 << VSF_PIN25)
1702#endif
1703
1704#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 26)
1705# define VSF_PIN26 26
1706# define VSF_PIN26_MASK (1 << VSF_PIN26)
1707#endif
1708
1709#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 27)
1710# define VSF_PIN27 27
1711# define VSF_PIN27_MASK (1 << VSF_PIN27)
1712#endif
1713
1714#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 28)
1715# define VSF_PIN28 28
1716# define VSF_PIN28_MASK (1 << VSF_PIN28)
1717#endif
1718
1719#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 29)
1720# define VSF_PIN29 29
1721# define VSF_PIN29_MASK (1 << VSF_PIN29)
1722#endif
1723
1724#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 30)
1725# define VSF_PIN30 30
1726# define VSF_PIN30_MASK (1 << VSF_PIN30)
1727#endif
1728
1729#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 31)
1730# define VSF_PIN31 31
1731# define VSF_PIN31_MASK (1 << VSF_PIN31)
1732#endif
1733
1734#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 32)
1735# define VSF_PIN32 32
1736# define VSF_PIN32_MASK (1 << VSF_PIN32)
1737#endif
1738
1739#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 33)
1740# define VSF_PIN33 33
1741# define VSF_PIN33_MASK (1 << VSF_PIN33)
1742#endif
1743
1744#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 34)
1745# define VSF_PIN34 34
1746# define VSF_PIN34_MASK (1 << VSF_PIN34)
1747#endif
1748
1749#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 35)
1750# define VSF_PIN35 35
1751# define VSF_PIN35_MASK (1 << VSF_PIN35)
1752#endif
1753
1754#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 36)
1755# define VSF_PIN36 36
1756# define VSF_PIN36_MASK (1 << VSF_PIN36)
1757#endif
1758
1759#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 37)
1760# define VSF_PIN37 37
1761# define VSF_PIN37_MASK (1 << VSF_PIN37)
1762#endif
1763
1764#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 38)
1765# define VSF_PIN38 38
1766# define VSF_PIN38_MASK (1 << VSF_PIN38)
1767#endif
1768
1769#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 39)
1770# define VSF_PIN39 39
1771# define VSF_PIN39_MASK (1 << VSF_PIN39)
1772#endif
1773
1774#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 40)
1775# define VSF_PIN40 40
1776# define VSF_PIN40_MASK (1 << VSF_PIN40)
1777#endif
1778
1779#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 41)
1780# define VSF_PIN41 41
1781# define VSF_PIN41_MASK (1 << VSF_PIN41)
1782#endif
1783
1784#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 42)
1785# define VSF_PIN42 42
1786# define VSF_PIN42_MASK (1 << VSF_PIN42)
1787#endif
1788
1789#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 43)
1790# define VSF_PIN43 43
1791# define VSF_PIN43_MASK (1 << VSF_PIN43)
1792#endif
1793
1794#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 44)
1795# define VSF_PIN44 44
1796# define VSF_PIN44_MASK (1 << VSF_PIN44)
1797#endif
1798
1799#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 45)
1800# define VSF_PIN45 45
1801# define VSF_PIN45_MASK (1 << VSF_PIN45)
1802#endif
1803
1804#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 46)
1805# define VSF_PIN46 46
1806# define VSF_PIN46_MASK (1 << VSF_PIN46)
1807#endif
1808
1809#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 47)
1810# define VSF_PIN47 47
1811# define VSF_PIN47_MASK (1 << VSF_PIN47)
1812#endif
1813
1814#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 48)
1815# define VSF_PIN48 48
1816# define VSF_PIN48_MASK (1 << VSF_PIN48)
1817#endif
1818
1819#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 49)
1820# define VSF_PIN49 49
1821# define VSF_PIN49_MASK (1 << VSF_PIN49)
1822#endif
1823
1824#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 50)
1825# define VSF_PIN50 50
1826# define VSF_PIN50_MASK (1 << VSF_PIN50)
1827#endif
1828
1829#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 51)
1830# define VSF_PIN51 51
1831# define VSF_PIN51_MASK (1 << VSF_PIN51)
1832#endif
1833
1834#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 52)
1835# define VSF_PIN52 52
1836# define VSF_PIN52_MASK (1 << VSF_PIN52)
1837#endif
1838
1839#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 53)
1840# define VSF_PIN53 53
1841# define VSF_PIN53_MASK (1 << VSF_PIN53)
1842#endif
1843
1844#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 54)
1845# define VSF_PIN54 54
1846# define VSF_PIN54_MASK (1 << VSF_PIN54)
1847#endif
1848
1849#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 55)
1850# define VSF_PIN55 55
1851# define VSF_PIN55_MASK (1 << VSF_PIN55)
1852#endif
1853
1854#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 56)
1855# define VSF_PIN56 56
1856# define VSF_PIN56_MASK (1 << VSF_PIN56)
1857#endif
1858
1859#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 57)
1860# define VSF_PIN57 57
1861# define VSF_PIN57_MASK (1 << VSF_PIN57)
1862#endif
1863
1864#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 58)
1865# define VSF_PIN58 58
1866# define VSF_PIN58_MASK (1 << VSF_PIN58)
1867#endif
1868
1869#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 59)
1870# define VSF_PIN59 59
1871# define VSF_PIN59_MASK (1 << VSF_PIN59)
1872#endif
1873
1874#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 60)
1875# define VSF_PIN60 60
1876# define VSF_PIN60_MASK (1 << VSF_PIN60)
1877#endif
1878
1879#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 61)
1880# define VSF_PIN61 61
1881# define VSF_PIN61_MASK (1 << VSF_PIN61)
1882#endif
1883
1884#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 62)
1885# define VSF_PIN62 62
1886# define VSF_PIN62_MASK (1 << VSF_PIN62)
1887#endif
1888
1889#if VSF_GPIO_CFG_PIN_MASK & (0x01ul << 63)
1890# define VSF_PIN63 63
1891# define VSF_PIN63_MASK (1 << VSF_PIN63)
1892#endif
1893
1894#ifdef __cplusplus
1895}
1896#endif
1897
1898#endif /* __VSF_TEMPLATE_GPIO_H__ */
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:85
vsf_gpio_mode_t
Definition gpio.h:31
@ VSF_GPIO_AF
Definition gpio.h:46
#define VSF_GPIO_AF_INPUT
Definition gpio.h:96
#define VSF_GPIO_DRIVE_STRENGTH_MASK
Definition gpio.h:112
#define VSF_GPIO_AF_OUTPUT_PUSH_PULL
Definition gpio.h:94
#define VSF_GPIO_AF_OUTPUT_OPEN_DRAIN
Definition gpio.h:95
#define VSF_GPIO_SPEED_MASK
Definition gpio.h:86
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:113
vsf_gpio_mode_t
Definition gpio.h:90
uint32_t vsf_gpio_pin_mask_t
Definition gpio.h:75
#define K(t, v)
Definition keyboard.h:40
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
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:696
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:731
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:773
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:761
uint8_t can_read_in_alternate_mode
Indicates whether vsf_gpio_read is valid in alternate function mode. When set, reading pin state is s...
Definition vsf_template_gpio.h:751
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:791
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:698
uint8_t can_read_in_gpio_output_mode
Indicates whether vsf_gpio_read is valid when configured as GPIO output mode. When set,...
Definition vsf_template_gpio.h:741
gpio configuration
Definition vsf_template_gpio.h:665
vsf_gpio_alternate_function_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:668
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:666
Definition vsf_template_gpio.h:658
vsf_gpio_exti_isr_handler_t * handler_fn
Definition vsf_template_gpio.h:659
vsf_arch_prio_t prio
Definition vsf_template_gpio.h:661
void * target_ptr
Definition vsf_template_gpio.h:660
Definition vsf_template_gpio.h:907
Definition vsf_template_gpio.h:672
vsf_gpio_alternate_function_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:679
uint16_t port_pin_index
Definition vsf_template_gpio.h:673
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:677
Definition vsf_template_gpio.h:685
vsf_gpio_mode_t mode
Definition vsf_template_gpio.h:690
uint16_t port_index
Definition vsf_template_gpio.h:686
vsf_gpio_pin_mask_t pin_mask
Definition vsf_template_gpio.h:687
vsf_gpio_alternate_function_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:692
Definition vsf_template_gpio.h:925
const vsf_gpio_op_t * op
Definition vsf_template_gpio.h:926
Definition vsf_template_hal_driver.h:204
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:653
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
#define vsf_gpio_alternate_function_t
Definition vsf_template_gpio.h:357
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_ctrl(vsf_gpio_t *gpio_ptr, vsf_gpio_ctrl_t ctrl, void *param)
Calls the specified GPIO command.
Definition gpio_common.c:227
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
uint16_t vsf_gpio_alternate_function_t
Definition vsf_template_gpio.h:356
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:627
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:615
@ VSF_GPIO_MODE_AF_MASK
Definition vsf_template_gpio.h:598
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:623
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:634
@ VSF_GPIO_FLOATING
Definition vsf_template_gpio.h:595
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:314
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:352
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 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:318
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:407
@ VSF_GPIO_NO_PULL_UP_DOWN
Set GPIO pin to Alternative Function mode. Configures pin for peripheral-specific functions like UART...
Definition vsf_template_gpio.h:495
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Detect interrupts on high signal level.
Definition vsf_template_gpio.h:539
@ 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:438
@ 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:458
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Detect interrupts on low signal level.
Definition vsf_template_gpio.h:531
@ VSF_GPIO_EXTI_MODE_NONE
No external interrupt detection enabled.
Definition vsf_template_gpio.h:523
@ VSF_GPIO_EXTI_MODE_RISING
Detect interrupts on rising edge of signal.
Definition vsf_template_gpio.h:547
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Detect interrupts on both rising and falling edges.
Definition vsf_template_gpio.h:563
@ VSF_GPIO_PULL_UP
Enable internal pull-up resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:505
@ VSF_GPIO_INPUT
Set the GPIO pin as general-purpose input. Selects GPIO for the alternative function....
Definition vsf_template_gpio.h:418
@ 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:428
@ VSF_GPIO_EXTI_MODE_FALLING
Detect interrupts on falling edge of signal.
Definition vsf_template_gpio.h:555
@ 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:448
@ VSF_GPIO_PULL_DOWN
Enable internal pull-down resistor. Independent of IO direction and alternative function.
Definition vsf_template_gpio.h:515
vsf_gpio_ctrl_t
GPIO control commands for hardware-specific operations.
Definition vsf_template_gpio.h:804
@ __VSF_GPIO_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_gpio.h:822
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:350
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
vsf_gpio_pin_mask_t vsf_gpio_exti_irq_clear(vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Clear interrupt flags of GPIO EXTI instance and return previous state.
Definition gpio_common.c:218
Generated from commit: vsfteam/vsf@c3767bf