22#if VSF_HAL_USE_GPIO == ENABLED
26#ifndef VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX
27# define VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX DISABLED
30#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
31# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
34#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
35# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
38#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
39# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT DISABLED
42#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
43# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION DISABLED
46#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET
47# define VSF_GPIO_CFG_REIMPLEMENT_API_SET DISABLED
50#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
51# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR DISABLED
54#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
55# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET DISABLED
58#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
59# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR DISABLED
62#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
63# define VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION DISABLED
66#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
67# define VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER DISABLED
70#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
71# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN DISABLED
74#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
75# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS DISABLED
78#ifndef VSF_GPIO_CFG_CHANGE_DIR_FIRST
79# define VSF_GPIO_CFG_CHANGE_DIR_FIRST ENABLED
82#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
83# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN 1
86#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
87# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET 0
90#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
91# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR 0
94#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
95# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT 1
98#ifndef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE
99# define VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE 0
102#ifndef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE
103# define VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE 0
106#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
107# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
110#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
111# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION DISABLED
114#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR
115# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR DISABLED
118#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CTRL
119# define VSF_GPIO_CFG_REIMPLEMENT_API_CTRL DISABLED
122#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
123# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
124# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
125# undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
126# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
127# undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
128# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
129# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
130# undef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
131# undef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
132# undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
133# undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
134# undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR
135# undef VSF_GPIO_CFG_REIMPLEMENT_API_CTRL
136# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT ENABLED
137# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT ENABLED
138# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION ENABLED
139# define VSF_GPIO_CFG_REIMPLEMENT_API_SET ENABLED
140# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR ENABLED
141# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET ENABLED
142# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR ENABLED
143# define VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION ENABLED
144# define VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER ENABLED
145# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
146# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION ENABLED
147# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR ENABLED
148# define VSF_GPIO_CFG_REIMPLEMENT_API_CTRL ENABLED
151#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
152# ifndef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
153# define VSF_GPIO_CFG_CAPABILITY_IS_ASYNC 0
156# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
157# define VSF_GPIO_CFG_CAPABILITY_PIN_COUNT 32
159# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
160# define VSF_GPIO_CFG_CAPABILITY_PIN_MASK 0xFFFFFFFF
164#ifndef VSF_GPIO_CFG_REAL_PREFIX
165# if defined(VSF_GPIO_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_GPIO_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
166# define VSF_GPIO_CFG_REAL_PREFIX VSF_GPIO_CFG_IMP_DEVICE_PREFIX
168# define VSF_GPIO_CFG_REAL_PREFIX VSF_GPIO_CFG_IMP_PREFIX
172#if defined(VSF_GPIO_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_GPIO_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
173# define vsf_real_gpios VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, s)
174# define vsf_real_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _t)
175# define vsf_real_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _port_config_pins)
176# define vsf_real_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _get_pin_configuration)
177# define vsf_real_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _read)
178# define vsf_real_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _read_output_register)
179# define vsf_real_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _set_input)
180# define vsf_real_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _set_output)
181# define vsf_real_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _get_direction)
182# define vsf_real_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _set_direction)
183# define vsf_real_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _switch_direction)
184# define vsf_real_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _write)
185# define vsf_real_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _set)
186# define vsf_real_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _clear)
187# define vsf_real_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _output_and_set)
188# define vsf_real_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _output_and_clear)
189# define vsf_real_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _capability)
190# define vsf_real_gpio_exti_irq_get_configuration VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _exti_irq_get_configuration)
191# define vsf_real_gpio_exti_irq_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _exti_irq_clear)
192# define vsf_real_gpio_ctrl VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _ctrl)
193# define vsf_real_gpio_port_config_pin VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _port_config_pin)
194# define vsf_real_gpio_ports_config_pin VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _ports_config_pin)
195# define vsf_real_gpio_ports_config_pins VSF_MCONNECT(VSF_GPIO_CFG_IMP_DEVICE_PREFIX, _ports_config_pins)
197# define vsf_real_gpios VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpios)
198# define vsf_real_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_t)
199# define vsf_real_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pins)
200# define vsf_real_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_get_pin_configuration)
201# define vsf_real_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_read)
202# define vsf_real_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_read_output_register)
203# define vsf_real_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_input)
204# define vsf_real_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_output)
205# define vsf_real_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_get_direction)
206# define vsf_real_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_direction)
207# define vsf_real_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_switch_direction)
208# define vsf_real_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_write)
209# define vsf_real_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set)
210# define vsf_real_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_clear)
211# define vsf_real_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_set)
212# define vsf_real_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_clear)
213# define vsf_real_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_capability)
214# define vsf_real_gpio_exti_irq_get_configuration VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_exti_irq_get_configuration)
215# define vsf_real_gpio_exti_irq_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_exti_irq_clear)
216# define vsf_real_gpio_ctrl VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ctrl)
217# define vsf_real_gpio_port_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pin)
218# define vsf_real_gpio_ports_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pin)
219# define vsf_real_gpio_ports_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pins)
228#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT == DISABLED
234 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, 0);
238#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT == DISABLED
244 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, pin_mask);
248#if VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION == DISABLED
249void vsf_real_gpio_switch_direction(vsf_real_gpio_t *gpio_ptr,
vsf_gpio_pin_mask_t pin_mask)
254 uint32_t ret = ~vsf_real_gpio_get_direction(gpio_ptr, pin_mask);
255 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, ret);
259#if VSF_GPIO_CFG_REIMPLEMENT_API_SET == DISABLED
265 vsf_real_gpio_write(gpio_ptr, pin_mask, pin_mask);
269#if VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR == DISABLED
275 vsf_real_gpio_write(gpio_ptr, pin_mask, 0);
279#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET == DISABLED
285#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET == 0
288#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
289 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
290 vsf_real_gpio_set(gpio_ptr, pin_mask);
292 vsf_real_gpio_set(gpio_ptr, pin_mask);
293 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
299#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR == DISABLED
300void vsf_real_gpio_output_and_clear(vsf_real_gpio_t *gpio_ptr,
vsf_gpio_pin_mask_t pin_mask)
305#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR == 0
308#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
309 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
310 vsf_real_gpio_clear(gpio_ptr, pin_mask);
312 vsf_real_gpio_clear(gpio_ptr, pin_mask);
313 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
319#if VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION == DISABLED
332#if VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER == DISABLED
344#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
348 .is_async = VSF_GPIO_CFG_CAPABILITY_IS_ASYNC,
351 .support_interrupt = VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT,
352 .can_read_in_gpio_output_mode = VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE,
353 .can_read_in_alternate_mode = VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE,
354 .pin_count = VSF_GPIO_CFG_CAPABILITY_PIN_COUNT,
355 .pin_mask = VSF_GPIO_CFG_CAPABILITY_PIN_MASK,
358 return gpio_capability;
362#if VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION == DISABLED
375#if VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR == DISABLED
387#if VSF_GPIO_CFG_REIMPLEMENT_API_CTRL == DISABLED
399#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN == DISABLED
406 for (
int i = 0; i < count; i++) {
409 .mode = cfg_ptr[i].mode,
411 uint16_t port_index = vsf_gpio_get_port(cfg_ptr[i].port_pin_index);
412 uint16_t pin_index = vsf_gpio_get_pin(cfg_ptr[i].port_pin_index);
413 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
415 vsf_real_gpio_port_config_pins(gpio_ptr, 1 << pin_index, &cfg);
425#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS == DISABLED
432 for (
int i = 0; i < count; i++) {
433 uint16_t port_index = cfg_ptr[i].port_index;
434 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
437 .mode = cfg_ptr[i].mode,
440 vsf_real_gpio_port_config_pins(gpio_ptr, cfg_ptr[i].pin_mask, &cfg);
452#undef VSF_GPIO_CFG_REIMPLEMENT_TYPE_CAPABILITY
453#undef VSF_GPIO_CFG_REIMPLEMENT_TYPE_CFG
454#undef VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE
455#undef VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX
456#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
457#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
458#undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
459#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
460#undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
461#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
462#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
463#undef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
464#undef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
465#undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
466#undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
467#undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_CLEAR
468#undef VSF_GPIO_CFG_REIMPLEMENT_API_CTRL
469#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
470#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
471#undef VSF_GPIO_CFG_CHANGE_DIR_FIRST
472#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
473#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
474#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
475#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
476#undef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE
477#undef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE
478#undef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
479#undef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
480#undef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
482#undef vsf_real_gpio_t
483#undef vsf_real_gpio_port_config_pins
484#undef vsf_real_gpio_get_pin_configuration
485#undef vsf_real_gpio_read
486#undef vsf_real_gpio_read_output_register
487#undef vsf_real_gpio_set_input
488#undef vsf_real_gpio_set_output
489#undef vsf_real_gpio_get_direction
490#undef vsf_real_gpio_set_direction
491#undef vsf_real_gpio_switch_direction
492#undef vsf_real_gpio_write
493#undef vsf_real_gpio_set
494#undef vsf_real_gpio_clear
495#undef vsf_real_gpio_output_and_set
496#undef vsf_real_gpio_output_and_clear
497#undef vsf_real_gpio_capability
498#undef vsf_real_gpio_exti_irq_get_configuration
499#undef vsf_real_gpio_exti_irq_clear
500#undef vsf_real_gpio_ctrl
501#undef vsf_real_gpio_port_config_pin
502#undef vsf_real_gpio_ports_config_pin
503#undef vsf_real_gpio_ports_config_pins
507#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
508# ifndef VSF_GPIO_CFG_ORIGIN_PREFIX
509# define VSF_GPIO_CFG_ORIGIN_PREFIX VSF_GPIO_CFG_IMP_PREFIX
512# define vsf_origin_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_t)
513# define vsf_origin_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_capability)
514# define vsf_origin_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_port_config_pins)
515# define vsf_origin_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_get_pin_configuration)
516# define vsf_origin_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_direction)
517# define vsf_origin_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_get_direction)
518# define vsf_origin_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_input)
519# define vsf_origin_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_output)
520# define vsf_origin_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_switch_direction)
521# define vsf_origin_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_read)
522# define vsf_origin_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_read_output_register)
523# define vsf_origin_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_write)
524# define vsf_origin_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set)
525# define vsf_origin_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_clear)
526# define vsf_origin_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_set)
527# define vsf_origin_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_clear)
528# define vsf_origin_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_toggle)
529# define vsf_origin_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_enable)
530# define vsf_origin_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_disable)
531# define vsf_origin_gpio_exti_irq_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_clear)
532# define vsf_origin_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_config)
533# define vsf_origin_gpio_ctrl VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_ctrl)
535# define vsf_remap_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_t)
536# define vsf_remap_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_capability)
537# define vsf_remap_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_port_config_pins)
538# define vsf_remap_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_get_pin_configuration)
539# define vsf_remap_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_direction)
540# define vsf_remap_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_get_direction)
541# define vsf_remap_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_input)
542# define vsf_remap_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_output)
543# define vsf_remap_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_switch_direction)
544# define vsf_remap_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_read)
545# define vsf_remap_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_read_output_register)
546# define vsf_remap_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_write)
547# define vsf_remap_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set)
548# define vsf_remap_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_clear)
549# define vsf_remap_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_set)
550# define vsf_remap_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_clear)
551# define vsf_remap_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_toggle)
552# define vsf_remap_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_enable)
553# define vsf_remap_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_disable)
554# define vsf_remap_gpio_exti_irq_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_clear)
555# define vsf_remap_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_config)
556# define vsf_remap_gpio_ctrl VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_ctrl)
558# define VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS \
559 vsf_err_t vsf_origin_gpio_port_config_pins(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t *cfg) \
561 VSF_HAL_ASSERT(gpio_ptr != NULL); \
562 VSF_HAL_ASSERT(pin_mask != 0); \
563 VSF_HAL_ASSERT(cfg != NULL); \
564 return vsf_remap_gpio_port_config_pins(gpio_ptr, pin_mask, cfg); \
566 vsf_err_t vsf_origin_gpio_get_pin_configuration(vsf_origin_gpio_t *gpio_ptr, uint16_t pin_index, vsf_gpio_cfg_t *cfg) \
568 VSF_HAL_ASSERT(gpio_ptr != NULL); \
569 VSF_HAL_ASSERT(cfg != NULL); \
570 return vsf_remap_gpio_get_pin_configuration(gpio_ptr, pin_index, cfg); \
572 void vsf_origin_gpio_set_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask) \
574 VSF_HAL_ASSERT(gpio_ptr != NULL); \
575 vsf_remap_gpio_set_direction(gpio_ptr, pin_mask, direction_mask); \
577 vsf_gpio_pin_mask_t vsf_origin_gpio_get_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
579 VSF_HAL_ASSERT(gpio_ptr != NULL); \
580 return vsf_remap_gpio_get_direction(gpio_ptr, pin_mask); \
582 void vsf_origin_gpio_set_input(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
584 VSF_HAL_ASSERT(gpio_ptr != NULL); \
585 vsf_remap_gpio_set_input(gpio_ptr, pin_mask); \
587 void vsf_origin_gpio_set_output(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
589 VSF_HAL_ASSERT(gpio_ptr != NULL); \
590 vsf_remap_gpio_set_output(gpio_ptr, pin_mask); \
592 void vsf_origin_gpio_switch_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
594 VSF_HAL_ASSERT(gpio_ptr != NULL); \
595 vsf_remap_gpio_switch_direction(gpio_ptr, pin_mask); \
597 vsf_gpio_pin_mask_t vsf_origin_gpio_read(vsf_origin_gpio_t *gpio_ptr) \
599 VSF_HAL_ASSERT(gpio_ptr != NULL); \
600 return vsf_remap_gpio_read(gpio_ptr); \
602 vsf_gpio_pin_mask_t vsf_origin_gpio_read_output_register(vsf_origin_gpio_t *gpio_ptr) \
604 VSF_HAL_ASSERT(gpio_ptr != NULL); \
605 return vsf_remap_gpio_read_output_register(gpio_ptr); \
607 void vsf_origin_gpio_write(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value) \
609 VSF_HAL_ASSERT(gpio_ptr != NULL); \
610 vsf_remap_gpio_write(gpio_ptr, pin_mask, value); \
612 void vsf_origin_gpio_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
614 VSF_HAL_ASSERT(gpio_ptr != NULL); \
615 vsf_remap_gpio_set(gpio_ptr, pin_mask); \
617 void vsf_origin_gpio_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
619 VSF_HAL_ASSERT(gpio_ptr != NULL); \
620 vsf_remap_gpio_clear(gpio_ptr, pin_mask); \
622 void vsf_origin_gpio_toggle(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
624 VSF_HAL_ASSERT(gpio_ptr != NULL); \
625 vsf_remap_gpio_toggle(gpio_ptr, pin_mask); \
627 void vsf_origin_gpio_output_and_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
629 VSF_HAL_ASSERT(gpio_ptr != NULL); \
630 vsf_remap_gpio_output_and_set(gpio_ptr, pin_mask); \
632 void vsf_origin_gpio_output_and_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
634 VSF_HAL_ASSERT(gpio_ptr != NULL); \
635 vsf_remap_gpio_output_and_clear(gpio_ptr, pin_mask); \
637 vsf_gpio_capability_t vsf_origin_gpio_capability(vsf_origin_gpio_t *gpio_ptr) \
639 VSF_HAL_ASSERT(gpio_ptr != NULL); \
640 return vsf_remap_gpio_capability(gpio_ptr); \
642 vsf_err_t vsf_origin_gpio_exti_irq_enable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
644 VSF_HAL_ASSERT(gpio_ptr != NULL); \
645 return vsf_remap_gpio_exti_irq_enable(gpio_ptr, pin_mask); \
647 vsf_err_t vsf_origin_gpio_exti_irq_disable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
649 VSF_HAL_ASSERT(gpio_ptr != NULL); \
650 return vsf_remap_gpio_exti_irq_disable(gpio_ptr, pin_mask); \
652 vsf_gpio_pin_mask_t vsf_origin_gpio_exti_irq_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
654 VSF_HAL_ASSERT(gpio_ptr != NULL); \
655 return vsf_remap_gpio_exti_irq_clear(gpio_ptr, pin_mask); \
657 vsf_err_t vsf_origin_gpio_exti_irq_config(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *cfg) \
659 VSF_HAL_ASSERT(gpio_ptr != NULL); \
660 return vsf_remap_gpio_exti_irq_config(gpio_ptr, cfg); \
662 vsf_err_t vsf_origin_gpio_ctrl(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_ctrl_t ctrl, void *param) \
664 VSF_HAL_ASSERT(gpio_ptr != NULL); \
665 return vsf_remap_gpio_ctrl(gpio_ptr, ctrl, param); \
671#ifndef VSF_HAL_TEMPLATE_IMP_NAME
672# define VSF_HAL_TEMPLATE_IMP_NAME _gpio
675#ifndef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
676# define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _GPIO
679#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
680# define VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX _PORT_COUNT
683#ifndef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
684# define VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX _PORT_MASK
687#if !defined(VSF_GPIO_CFG_IMP_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_PREFIX)
688# error "Please define VSF_GPIO_CFG_IMP_PREFIX in gpio driver"
691#if !defined(VSF_GPIO_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX)
692# error "Please define VSF_GPIO_CFG_IMP_UPCASE_PREFIX in gpio driver"
695#ifndef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
696# define VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX VSF_GPIO_CFG_IMP_UPCASE_PREFIX
699#ifdef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
700# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
705#if VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX == DISABLED
706# undef VSF_GPIO_CFG_IMP_PREFIX
707# undef VSF_GPIO_CFG_IMP_UPCASE_PREFIX
708# undef VSF_GPIO_CFG_IMP_DEVICE_PREFIX
709# undef VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX
712#undef VSF_GPIO_CFG_REAL_PREFIX
713#undef VSF_GPIO_CFG_ORIGIN_PREFIX
715#undef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
716#undef VSF_GPIO_CFG_IMP_LV0
717#undef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
718#undef VSF_GPIO_CFG_IMP_HAS_OP
719#undef VSF_GPIO_CFG_IMP_EXTERN_OP
720#undef VSF_GPIO_CFG_IMP_REMAP_PREFIX
721#undef VSF_GPIO_CFG_IMP_RENAME_DEVICE_PREFIX
723#undef vsf_origin_gpio_t
724#undef vsf_origin_gpio_capability
725#undef vsf_origin_gpio_port_config_pins
726#undef vsf_origin_gpio_get_pin_configuration
727#undef vsf_origin_gpio_set_direction
728#undef vsf_origin_gpio_get_direction
729#undef vsf_origin_gpio_set_input
730#undef vsf_origin_gpio_set_output
731#undef vsf_origin_gpio_switch_direction
732#undef vsf_origin_gpio_read
733#undef vsf_origin_gpio_read_output_register
734#undef vsf_origin_gpio_write
735#undef vsf_origin_gpio_set
736#undef vsf_origin_gpio_clear
737#undef vsf_origin_gpio_output_and_set
738#undef vsf_origin_gpio_output_and_clear
739#undef vsf_origin_gpio_toggle
740#undef vsf_origin_gpio_exti_irq_config
741#undef vsf_origin_gpio_exti_irq_enable
742#undef vsf_origin_gpio_exti_irq_disable
743#undef vsf_origin_gpio_exti_irq_clear
744#undef vsf_origin_gpio_ctrl
746#undef vsf_remap_gpio_t
747#undef vsf_remap_gpio_capability
748#undef vsf_remap_gpio_port_config_pins
749#undef vsf_remap_gpio_get_pin_configuration
750#undef vsf_remap_gpio_set_direction
751#undef vsf_remap_gpio_get_direction
752#undef vsf_remap_gpio_set_input
753#undef vsf_remap_gpio_set_output
754#undef vsf_remap_gpio_switch_direction
755#undef vsf_remap_gpio_read
756#undef vsf_remap_gpio_read_output_register
757#undef vsf_remap_gpio_write
758#undef vsf_remap_gpio_set
759#undef vsf_remap_gpio_clear
760#undef vsf_remap_gpio_output_and_set
761#undef vsf_remap_gpio_output_and_clear
762#undef vsf_remap_gpio_toggle
763#undef vsf_remap_gpio_exti_irq_config
764#undef vsf_remap_gpio_exti_irq_enable
765#undef vsf_remap_gpio_exti_irq_disable
766#undef vsf_remap_gpio_exti_irq_clear
767#undef vsf_remap_gpio_ctrl
769#undef VSF_HAL_TEMPLATE_IMP_NAME
770#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
795#ifdef VSF_GPIO_CFG_MODE_CHECK_UNIQUE
797#ifndef VSF_GPIO_CHECK_UNIQUE_DIRECTION_MODES
798# define VSF_GPIO_CHECK_UNIQUE_DIRECTION_MODES \
801 VSF_GPIO_OUTPUT_PUSH_PULL, \
802 VSF_GPIO_OUTPUT_OPEN_DRAIN, \
806#ifndef VSF_GPIO_CHECK_UNIQUE_PULL_MODES
807# define VSF_GPIO_CHECK_UNIQUE_PULL_MODES \
808 VSF_GPIO_NO_PULL_UP_DOWN, \
839#ifdef VSF_GPIO_CUSTOM_MODE_VALUES
851#ifdef VSF_GPIO_CUSTOM_MODE_VALUES
852 , VSF_GPIO_CUSTOM_MODE_VALUES
856#undef VSF_GPIO_CHECK_UNIQUE_DIRECTION_MODES
857#undef VSF_GPIO_CHECK_UNIQUE_PULL_MODES
862#ifdef VSF_GPIO_CFG_IRQ_MASK_CHECK_UNIQUE
864#ifdef VSF_GPIO_CUSTOM_IRQ_MASK_VALUES
872#undef VSF_GPIO_CFG_MODE_CHECK_UNIQUE
873#undef VSF_GPIO_CFG_IRQ_MASK_CHECK_UNIQUE
874#undef VSF_GPIO_CUSTOM_MODE_VALUES
875#undef VSF_GPIO_CUSTOM_IRQ_MASK_VALUES
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_NONE
none error
Definition __type.h:44
#define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
Definition gpio.c:33
#define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
Definition gpio.c:32
@ VSF_GPIO_NO_PULL_UP_DOWN
Definition gpio.h:39
@ VSF_GPIO_OUTPUT_PUSH_PULL
Definition gpio.h:43
@ VSF_GPIO_EXTI
Definition gpio.h:45
@ VSF_GPIO_PULL_UP
Definition gpio.h:37
@ VSF_GPIO_INPUT
Definition gpio.h:41
@ VSF_GPIO_ANALOG
Definition gpio.h:44
@ VSF_GPIO_OUTPUT_OPEN_DRAIN
Definition gpio.h:42
@ VSF_GPIO_PULL_DOWN
Definition gpio.h:38
#define NULL
Definition lvgl.h:26
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
Definition vsf_template_gpio.h:696
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
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
Definition vsf_template_gpio.h:658
Definition vsf_template_gpio.h:672
Definition vsf_template_gpio.h:685
#define VSF_GPIO_CFG_IRQ_MASK_CHECK_UNIQUE
Definition gpio.c:281
#define VSF_GPIO_CFG_MODE_CHECK_UNIQUE
Definition gpio.c:280
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_gpio_ctrl_t
GPIO control commands for hardware-specific operations.
Definition vsf_template_gpio.h:804
uint32_t vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:350
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426