VSF Documented
gpio_template.inc
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/*============================ INCLUDES ======================================*/
19
21
22#if VSF_HAL_USE_GPIO == ENABLED
23
24/*============================ MACROS ========================================*/
25
26#ifndef VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX
27# define VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX DISABLED
28#endif
29
30#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
31# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
32#endif
33
34#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
35# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
36#endif
37
38#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
39# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT DISABLED
40#endif
41
42#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
43# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION DISABLED
44#endif
45
46#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET
47# define VSF_GPIO_CFG_REIMPLEMENT_API_SET DISABLED
48#endif
49
50#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
51# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR DISABLED
52#endif
53
54#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
55# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET DISABLED
56#endif
57
58#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
59# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR DISABLED
60#endif
61
62#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
63# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN DISABLED
64#endif
65
66#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
67# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS DISABLED
68#endif
69
70#ifndef VSF_GPIO_CFG_CHANGE_DIR_FIRST
71# define VSF_GPIO_CFG_CHANGE_DIR_FIRST ENABLED
72#endif
73
74#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
75# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN 1
76#endif
77
78#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
79# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET 0
80#endif
81
82#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
83# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR 0
84#endif
85
86#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
87# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT 1
88#endif
89
90#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
91# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
92#endif
93
94#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
95# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
96# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
97# undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
98# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
99# undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
100# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
101# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
102# undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
103# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT ENABLED
104# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT ENABLED
105# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION ENABLED
106# define VSF_GPIO_CFG_REIMPLEMENT_API_SET ENABLED
107# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR ENABLED
108# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET ENABLED
109# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR ENABLED
110# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
111#endif
112
113#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
114# ifndef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
115# define VSF_GPIO_CFG_CAPABILITY_IS_ASYNC 0
116# endif
117
118# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
119# define VSF_GPIO_CFG_CAPABILITY_PIN_COUNT 32
120# endif
121# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
122# define VSF_GPIO_CFG_CAPABILITY_PIN_MASK 0xFFFFFFFF
123# endif
124#endif
125
126#ifndef VSF_GPIO_CFG_REAL_PREFIX
127# define VSF_GPIO_CFG_REAL_PREFIX VSF_GPIO_CFG_IMP_PREFIX
128#endif
129
130#define vsf_real_gpios VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpios)
131#define vsf_real_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_t)
132#define vsf_real_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pins)
133#define vsf_real_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_input)
134#define vsf_real_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_output)
135#define vsf_real_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_get_direction)
136#define vsf_real_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_direction)
137#define vsf_real_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_switch_direction)
138#define vsf_real_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_write)
139#define vsf_real_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set)
140#define vsf_real_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_clear)
141#define vsf_real_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_set)
142#define vsf_real_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_clear)
143#define vsf_real_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_capability)
144#define vsf_real_gpio_port_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pin)
145#define vsf_real_gpio_ports_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pin)
146#define vsf_real_gpio_ports_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pins)
147
148/*============================ MACROFIED FUNCTIONS ===========================*/
149/*============================ PROTOTYPES ====================================*/
150/*============================ LOCAL VARIABLES ===============================*/
151/*============================ MACROFIED FUNCTIONS ===========================*/
152/*============================ IMPLEMENTATION ================================*/
153
154#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT == DISABLED
155void vsf_real_gpio_set_input(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
156{
157 VSF_HAL_ASSERT(NULL != gpio_ptr);
158 VSF_HAL_ASSERT(0 != pin_mask);
159
160 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, 0);
161}
162#endif
163
164#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT == DISABLED
165void vsf_real_gpio_set_output(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
166{
167 VSF_HAL_ASSERT(NULL != gpio_ptr);
168 VSF_HAL_ASSERT(0 != pin_mask);
169
170 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, pin_mask);
171}
172#endif
173
174#if VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION == DISABLED
175void vsf_real_gpio_switch_direction(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
176{
177 VSF_HAL_ASSERT(NULL != gpio_ptr);
178 VSF_HAL_ASSERT(0 != pin_mask);
179
180 uint32_t ret = ~vsf_real_gpio_get_direction(gpio_ptr, pin_mask);
181 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, ret);
182}
183#endif
184
185#if VSF_GPIO_CFG_REIMPLEMENT_API_SET == DISABLED
186void vsf_real_gpio_set(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
187{
188 VSF_HAL_ASSERT(NULL != gpio_ptr);
189 VSF_HAL_ASSERT(0 != pin_mask);
190
191 vsf_real_gpio_write(gpio_ptr, pin_mask, pin_mask);
192}
193#endif
194
195#if VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR == DISABLED
196void vsf_real_gpio_clear(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
197{
198 VSF_HAL_ASSERT(NULL != gpio_ptr);
199 VSF_HAL_ASSERT(0 != pin_mask);
200
201 vsf_real_gpio_write(gpio_ptr, pin_mask, 0);
202}
203#endif
204
205#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET == DISABLED
206void vsf_real_gpio_output_and_set(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
207{
208 VSF_HAL_ASSERT(NULL != gpio_ptr);
209 VSF_HAL_ASSERT(0 != pin_mask);
210
211#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET == 0
213#else
214#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
215 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
216 vsf_real_gpio_set(gpio_ptr, pin_mask);
217#else
218 vsf_real_gpio_set(gpio_ptr, pin_mask);
219 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
220#endif
221#endif
222}
223#endif
224
225#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR == DISABLED
226void vsf_real_gpio_output_and_clear(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
227{
228 VSF_HAL_ASSERT(NULL != gpio_ptr);
229 VSF_HAL_ASSERT(0 != pin_mask);
230
231#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR == 0
233#else
234#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
235 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
236 vsf_real_gpio_clear(gpio_ptr, pin_mask);
237#else
238 vsf_real_gpio_clear(gpio_ptr, pin_mask);
239 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
240#endif
241#endif
242}
243#endif
244
245#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
246vsf_gpio_capability_t vsf_real_gpio_capability(vsf_real_gpio_t *gpio_ptr)
247{
248 vsf_gpio_capability_t gpio_capability = {
249 .is_async = VSF_GPIO_CFG_CAPABILITY_IS_ASYNC,
251 .support_output_and_clear = VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR,
252 .support_interrupt = VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT,
253 .pin_count = VSF_GPIO_CFG_CAPABILITY_PIN_COUNT,
254 .pin_mask = VSF_GPIO_CFG_CAPABILITY_PIN_MASK,
255 };
256
257 return gpio_capability;
258}
259#endif
260
261#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN == DISABLED
262vsf_err_t vsf_real_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
263 uint_fast8_t count)
264{
265 VSF_HAL_ASSERT(cfg_ptr != NULL);
266 VSF_HAL_ASSERT(count != 0);
267
268 for (int i = 0; i < count; i++) {
269 vsf_gpio_cfg_t cfg = {
270 .alternate_function = cfg_ptr[i].alternate_function,
271 .mode = cfg_ptr[i].mode,
272 };
273 uint16_t port_index = vsf_gpio_get_port(cfg_ptr[i].port_pin_index);
274 uint16_t pin_index = vsf_gpio_get_pin(cfg_ptr[i].port_pin_index);
275 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
276 vsf_err_t result =
277 vsf_real_gpio_port_config_pins(gpio_ptr, 1 << pin_index, &cfg);
278 if (result != VSF_ERR_NONE) {
279 return result;
280 }
281 }
282
283 return VSF_ERR_NONE;
284}
285#endif
286
287#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS == DISABLED
288vsf_err_t vsf_real_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
289 uint_fast8_t count)
290{
291 VSF_HAL_ASSERT(cfg_ptr != NULL);
292 VSF_HAL_ASSERT(count != 0);
293
294 for (int i = 0; i < count; i++) {
295 uint16_t port_index = cfg_ptr[i].port_index;
296 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
297 vsf_gpio_cfg_t cfg = {
298 .alternate_function = cfg_ptr[i].alternate_function,
299 .mode = cfg_ptr[i].mode,
300 };
301 vsf_err_t result =
302 vsf_real_gpio_port_config_pins(gpio_ptr, cfg_ptr[i].pin_mask, &cfg);
303 if (result != VSF_ERR_NONE) {
304 return result;
305 }
306 }
307
308 return VSF_ERR_NONE;
309}
310#endif
311
312/*============================ MACROS ========================================*/
313
314#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
315#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
316#undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
317#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
318#undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
319#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
320#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
321#undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
322#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
323#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
324#undef VSF_GPIO_CFG_CHANGE_DIR_FIRST
325#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
326#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
327#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
328#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
329#undef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
330#undef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
331#undef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
332#undef vsf_real_gpio_t
333#undef vsf_real_gpio_set_input
334#undef vsf_real_gpio_set_output
335#undef vsf_real_gpio_get_direction
336#undef vsf_real_gpio_set_direction
337#undef vsf_real_gpio_switch_direction
338#undef vsf_real_gpio_write
339#undef vsf_real_gpio_set
340#undef vsf_real_gpio_clear
341#undef vsf_real_gpio_output_and_set
342#undef vsf_real_gpio_output_and_clear
343#undef vsf_real_gpio_capability
344
345/*============================ MACROS ========================================*/
346
347#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
348# ifndef VSF_GPIO_CFG_ORIGIN_PREFIX
349# define VSF_GPIO_CFG_ORIGIN_PREFIX VSF_GPIO_CFG_IMP_PREFIX
350# endif
351
352# define vsf_origin_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_t)
353# define vsf_origin_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_capability)
354# define vsf_origin_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_port_config_pins)
355# define vsf_origin_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_direction)
356# define vsf_origin_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_get_direction)
357# define vsf_origin_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_input)
358# define vsf_origin_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_output)
359# define vsf_origin_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_switch_direction)
360# define vsf_origin_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_read)
361# define vsf_origin_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_write)
362# define vsf_origin_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set)
363# define vsf_origin_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_clear)
364# define vsf_origin_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_set)
365# define vsf_origin_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_clear)
366# define vsf_origin_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_toggle)
367# define vsf_origin_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_enable)
368# define vsf_origin_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_disable)
369# define vsf_origin_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_config)
370
371# define vsf_remap_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_t)
372# define vsf_remap_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_capability)
373# define vsf_remap_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_port_config_pins)
374# define vsf_remap_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_direction)
375# define vsf_remap_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_get_direction)
376# define vsf_remap_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_input)
377# define vsf_remap_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_output)
378# define vsf_remap_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_switch_direction)
379# define vsf_remap_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_read)
380# define vsf_remap_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_write)
381# define vsf_remap_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set)
382# define vsf_remap_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_clear)
383# define vsf_remap_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_set)
384# define vsf_remap_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_clear)
385# define vsf_remap_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_toggle)
386# define vsf_remap_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_enable)
387# define vsf_remap_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_disable)
388# define vsf_remap_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_config)
389
390# define VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS \
391 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) \
392 { \
393 VSF_HAL_ASSERT(gpio_ptr != NULL); \
394 VSF_HAL_ASSERT(pin_mask != 0); \
395 VSF_HAL_ASSERT(cfg != NULL); \
396 return vsf_remap_gpio_port_config_pins(gpio_ptr, pin_mask, cfg); \
397 } \
398 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) \
399 { \
400 VSF_HAL_ASSERT(gpio_ptr != NULL); \
401 vsf_remap_gpio_set_direction(gpio_ptr, pin_mask, direction_mask); \
402 } \
403 vsf_gpio_pin_mask_t vsf_origin_gpio_get_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
404 { \
405 VSF_HAL_ASSERT(gpio_ptr != NULL); \
406 return vsf_remap_gpio_get_direction(gpio_ptr, pin_mask); \
407 } \
408 void vsf_origin_gpio_set_input(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
409 { \
410 VSF_HAL_ASSERT(gpio_ptr != NULL); \
411 vsf_remap_gpio_set_input(gpio_ptr, pin_mask); \
412 } \
413 void vsf_origin_gpio_set_output(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
414 { \
415 VSF_HAL_ASSERT(gpio_ptr != NULL); \
416 vsf_remap_gpio_set_output(gpio_ptr, pin_mask); \
417 } \
418 void vsf_origin_gpio_switch_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
419 { \
420 VSF_HAL_ASSERT(gpio_ptr != NULL); \
421 vsf_remap_gpio_switch_direction(gpio_ptr, pin_mask); \
422 } \
423 vsf_gpio_pin_mask_t vsf_origin_gpio_read(vsf_origin_gpio_t *gpio_ptr) \
424 { \
425 VSF_HAL_ASSERT(gpio_ptr != NULL); \
426 return vsf_remap_gpio_read(gpio_ptr); \
427 } \
428 void vsf_origin_gpio_write(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value) \
429 { \
430 VSF_HAL_ASSERT(gpio_ptr != NULL); \
431 vsf_remap_gpio_write(gpio_ptr, pin_mask, value); \
432 } \
433 void vsf_origin_gpio_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
434 { \
435 VSF_HAL_ASSERT(gpio_ptr != NULL); \
436 vsf_remap_gpio_set(gpio_ptr, pin_mask); \
437 } \
438 void vsf_origin_gpio_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
439 { \
440 VSF_HAL_ASSERT(gpio_ptr != NULL); \
441 vsf_remap_gpio_clear(gpio_ptr, pin_mask); \
442 } \
443 void vsf_origin_gpio_toggle(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
444 { \
445 VSF_HAL_ASSERT(gpio_ptr != NULL); \
446 vsf_remap_gpio_toggle(gpio_ptr, pin_mask); \
447 } \
448 void vsf_origin_gpio_output_and_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
449 { \
450 VSF_HAL_ASSERT(gpio_ptr != NULL); \
451 vsf_remap_gpio_output_and_set(gpio_ptr, pin_mask); \
452 } \
453 void vsf_origin_gpio_output_and_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
454 { \
455 VSF_HAL_ASSERT(gpio_ptr != NULL); \
456 vsf_remap_gpio_output_and_clear(gpio_ptr, pin_mask); \
457 } \
458 vsf_gpio_capability_t vsf_origin_gpio_capability(vsf_origin_gpio_t *gpio_ptr) \
459 { \
460 VSF_HAL_ASSERT(gpio_ptr != NULL); \
461 return vsf_remap_gpio_capability(gpio_ptr); \
462 } \
463 vsf_err_t vsf_origin_gpio_exti_irq_enable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
464 { \
465 VSF_HAL_ASSERT(gpio_ptr != NULL); \
466 return vsf_remap_gpio_exti_irq_enable(gpio_ptr, pin_mask); \
467 } \
468 vsf_err_t vsf_origin_gpio_exti_irq_disable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
469 { \
470 VSF_HAL_ASSERT(gpio_ptr != NULL); \
471 return vsf_remap_gpio_exti_irq_disable(gpio_ptr, pin_mask); \
472 } \
473 vsf_err_t vsf_origin_gpio_exti_irq_config(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *cfg) \
474 { \
475 VSF_HAL_ASSERT(gpio_ptr != NULL); \
476 return vsf_remap_gpio_exti_irq_config(gpio_ptr, cfg); \
477 }
478#endif
479
480/*============================ GLOBAL VARIABLES ==============================*/
481
482#ifndef VSF_HAL_TEMPLATE_IMP_NAME
483# define VSF_HAL_TEMPLATE_IMP_NAME _gpio
484#endif
485
486#ifndef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
487# define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _GPIO
488#endif
489
490#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
491# define VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX _PORT_COUNT
492#endif
493
494#ifndef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
495# define VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX _PORT_MASK
496#endif
497
498#if !defined(VSF_GPIO_CFG_IMP_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_PREFIX)
499# error "Please define VSF_GPIO_CFG_IMP_PREFIX in gpio driver"
500#endif
501
502#if !defined(VSF_GPIO_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX)
503# error "Please define VSF_GPIO_CFG_IMP_UPCASE_PREFIX in gpio driver"
504#endif
505
506#ifndef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
507# define VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX VSF_GPIO_CFG_IMP_UPCASE_PREFIX
508#endif
509
510#ifdef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
511# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
512#endif
513
515
516#if VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX == DISABLED
517# undef VSF_GPIO_CFG_IMP_PREFIX
518# undef VSF_GPIO_CFG_IMP_UPCASE_PREFIX
519# undef VSF_GPIO_CFG_IMP_DEVICE_PREFIX
520# undef VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX
521#endif
522
523#undef VSF_GPIO_CFG_REAL_PREFIX
524#undef VSF_GPIO_CFG_ORIGIN_PREFIX
525
526#undef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
527#undef VSF_GPIO_CFG_IMP_LV0
528#undef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
529#undef VSF_GPIO_CFG_IMP_HAS_OP
530#undef VSF_GPIO_CFG_IMP_EXTERN_OP
531#undef VSF_GPIO_CFG_IMP_REMAP_PREFIX
532
533#undef vsf_origin_gpio_t
534#undef vsf_origin_gpio_capability
535#undef vsf_origin_gpio_port_config_pins
536#undef vsf_origin_gpio_set_direction
537#undef vsf_origin_gpio_get_direction
538#undef vsf_origin_gpio_set_input
539#undef vsf_origin_gpio_set_output
540#undef vsf_origin_gpio_switch_direction
541#undef vsf_origin_gpio_read
542#undef vsf_origin_gpio_write
543#undef vsf_origin_gpio_set
544#undef vsf_origin_gpio_clear
545#undef vsf_origin_gpio_output_and_set
546#undef vsf_origin_gpio_output_and_clear
547#undef vsf_origin_gpio_toggle
548#undef vsf_origin_gpio_exti_irq_config
549#undef vsf_origin_gpio_exti_irq_enable
550#undef vsf_origin_gpio_exti_irq_disable
551
552#undef vsf_remap_gpio_t
553#undef vsf_remap_gpio_capability
554#undef vsf_remap_gpio_port_config_pins
555#undef vsf_remap_gpio_set_direction
556#undef vsf_remap_gpio_get_direction
557#undef vsf_remap_gpio_set_input
558#undef vsf_remap_gpio_set_output
559#undef vsf_remap_gpio_switch_direction
560#undef vsf_remap_gpio_read
561#undef vsf_remap_gpio_write
562#undef vsf_remap_gpio_set
563#undef vsf_remap_gpio_clear
564#undef vsf_remap_gpio_output_and_set
565#undef vsf_remap_gpio_output_and_clear
566#undef vsf_remap_gpio_toggle
567#undef vsf_remap_gpio_exti_irq_config
568#undef vsf_remap_gpio_exti_irq_enable
569#undef vsf_remap_gpio_exti_irq_disable
570
571#endif /* VSF_HAL_USE_GPIO */
vsf_err_t
Definition __type.h:42
@ 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
#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:623
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:625
gpio channel configuration
Definition vsf_template_gpio.h:595
uint16_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:598
Definition vsf_template_gpio.h:602
Definition vsf_template_gpio.h:612
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:279
Generated from commit: vsfteam/vsf@0c4049f