18#ifndef __VSF_TEMPLATE_EXTI_H__
19#define __VSF_TEMPLATE_EXTI_H__
39#ifndef VSF_EXTI_CFG_MULTI_CLASS
40# define VSF_EXTI_CFG_MULTI_CLASS ENABLED
50#if defined(VSF_HW_EXTI_COUNT) && !defined(VSF_HW_EXTI_MASK)
51# define VSF_HW_EXTI_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_EXTI_COUNT)
61#if defined(VSF_HW_EXTI_MASK) && !defined(VSF_HW_EXTI_COUNT)
62# define VSF_HW_EXTI_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_EXTI_MASK)
72#if defined(VSF_HW_EXTI_CHANNEL_COUNT) && !defined(VSF_HW_EXTI_CHANNEL_MASK)
73# define VSF_HW_EXTI_CHANNEL_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_EXTI_CHANNEL_COUNT)
83#if defined(VSF_HW_EXTI_CHANNEL_MASK) && !defined(VSF_HW_EXTI_CHANNEL_COUNT)
84# define VSF_HW_EXTI_CHANNEL_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_EXTI_CHANNEL_MASK)
110#ifndef VSF_EXTI_CFG_PREFIX
111# if VSF_EXTI_CFG_MULTI_CLASS == ENABLED
112# define VSF_EXTI_CFG_PREFIX vsf
113# elif defined(VSF_HW_EXTI_CHANNEL_MASK) && (VSF_HW_EXTI_CHANNEL_MASK != 0)
114# define VSF_EXTI_CFG_PREFIX vsf_hw
116# define VSF_EXTI_CFG_PREFIX vsf
127#ifndef VSF_EXTI_CFG_REIMPLEMENT_TYPE_MODE
128# define VSF_EXTI_CFG_REIMPLEMENT_TYPE_MODE DISABLED
138#ifndef VSF_EXTI_CFG_FUNCTION_RENAME
139# define VSF_EXTI_CFG_FUNCTION_RENAME ENABLED
146#ifndef VSF_EXTI_CFG_REIMPLEMENT_TYPE_CFG
147# define VSF_EXTI_CFG_REIMPLEMENT_TYPE_CFG DISABLED
153#ifndef VSF_EXTI_CFG_REIMPLEMENT_TYPE_CAPABILITY
154# define VSF_EXTI_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
158#ifndef VSF_EXTI_CFG_INHERIT_HAL_CAPABILITY
159# define VSF_EXTI_CFG_INHERIT_HAL_CAPABILITY ENABLED
164#define VSF_EXTI_APIS(__prefix_name) \
165 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, exti, init, VSF_MCONNECT(__prefix_name, _t) *exti_ptr) \
166 __VSF_HAL_TEMPLATE_API(__prefix_name, void, exti, fini, VSF_MCONNECT(__prefix_name, _t) *exti_ptr) \
167 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_exti_status_t, exti, status, VSF_MCONNECT(__prefix_name, _t) *exti_ptr) \
168 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_exti_capability_t, exti, capability, VSF_MCONNECT(__prefix_name, _t) *exti_ptr) \
169 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, exti, trigger, VSF_MCONNECT(__prefix_name, _t) *exti_ptr, vsf_exti_channel_mask_t channel_mask) \
170 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, exti, config_channels, VSF_MCONNECT(__prefix_name, _t) *exti_ptr, vsf_exti_channel_mask_t channel_mask, vsf_exti_channel_cfg_t * cfg_ptr)\
171 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, exti, irq_enable, VSF_MCONNECT(__prefix_name, _t) *exti_ptr, vsf_exti_channel_mask_t channel_mask) \
172 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, exti, irq_disable, VSF_MCONNECT(__prefix_name, _t) *exti_ptr, vsf_exti_channel_mask_t channel_mask)
176#ifndef vsf_exti_channel_mask_t
177# if defined(VSF_HW_EXTI_CHANNEL_COUNT) && (VSF_HW_EXTI_CHANNEL_COUNT > 32)
179# elif defined(VSF_HW_EXTI_CHANNEL_MASK) && (VSF_HW_EXTI_CHANNEL_MASK & 0xFFFFFFFF00000000)
184# define vsf_exti_channel_mask_t vsf_exti_channel_mask_t
187#if VSF_EXTI_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
268#define VSF_EXTI_MODE_LOW_LEVEL VSF_EXTI_MODE_LOW_LEVEL
283#ifdef VSF_EXTI_MODE_LOW_LEVEL
286#ifdef VSF_EXTI_MODE_HIGH_LEVEL
294#if VSF_EXTI_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
310#if VSF_EXTI_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
323#if VSF_EXTI_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
325#if VSF_EXTI_CFG_INHERIT_HAL_CAPABILITY == ENABLED
335 uint8_t support_level_trigger : 1;
385#undef __VSF_HAL_TEMPLATE_API
386#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
392#if VSF_EXTI_CFG_MULTI_CLASS == ENABLED
545#if VSF_EXTI_CFG_FUNCTION_RENAME == ENABLED
546# define __vsf_exti_t VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_t)
547# define vsf_exti_init(__EXTI) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_init) ((__vsf_exti_t *)(__EXTI))
548# define vsf_exti_fini(__EXTI) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_fini) ((__vsf_exti_t *)(__EXTI))
549# define vsf_exti_status(__EXTI) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_status) ((__vsf_exti_t *)(__EXTI))
550# define vsf_exti_capability(__EXTI) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_capability) ((__vsf_exti_t *)(__EXTI))
551# define vsf_exti_trigger(__EXTI, ...) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_trigger) ((__vsf_exti_t *)(__EXTI), ##__VA_ARGS__)
552# define vsf_exti_config_channels(__EXTI, ...) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_config_channels) ((__vsf_exti_t *)(__EXTI), ##__VA_ARGS__)
553# define vsf_exti_irq_enable(__EXTI, ...) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_irq_enable) ((__vsf_exti_t *)(__EXTI), ##__VA_ARGS__)
554# define vsf_exti_irq_disable(__EXTI, ...) VSF_MCONNECT(VSF_EXTI_CFG_PREFIX, _exti_irq_disable) ((__vsf_exti_t *)(__EXTI), ##__VA_ARGS__)
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:88
vsf_exti_mode_t
Definition exti.h:67
@ VSF_EXTI_MODE_RISING_FALLING
Definition exti.h:71
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_exti.h:324
uint8_t irq_num
interrupt number for exti. Some EXTI supports multiple interrupt, and the actual length of irq_channe...
Definition vsf_template_exti.h:361
vsf_exti_channel_mask_t channel_mask
channel number for exti.
Definition vsf_template_exti.h:369
vsf_exti_channel_mask_t irq_channel_mask[0]
interrupt channel mask for corresponding irq. Some EXTI supports multiple interrupt,...
Definition vsf_template_exti.h:379
uint8_t support_sw_trigger
Support for software trigger provided by vsf_exti_trigger.
Definition vsf_template_exti.h:351
inherit(vsf_peripheral_capability_t) uint8_t support_level_trigger uint8_t support_edge_trigger
Support for level trigger.
Definition vsf_template_exti.h:326
Definition vsf_template_exti.h:302
void * target_ptr
Definition vsf_template_exti.h:305
vsf_exti_isr_handler_t * handler_fn
Definition vsf_template_exti.h:304
vsf_arch_prio_t prio
Definition vsf_template_exti.h:306
vsf_exti_mode_t mode
Definition vsf_template_exti.h:303
Definition vsf_template_exti.h:383
Predefined VSF EXTI status that can be reimplemented in specific hal drivers.
Definition vsf_template_exti.h:317
vsf_exti_channel_mask_t status_mask
Definition vsf_template_exti.h:319
vsf_exti_channel_mask_t enable_mask
Definition vsf_template_exti.h:318
Definition vsf_template_exti.h:401
const vsf_exti_op_t * op
Definition vsf_template_exti.h:402
Definition vsf_template_hal_driver.h:203
vsf_err_t vsf_exti_init(vsf_exti_t *exti_ptr)
Initialize a EXTI instance.
Definition exti_common.c:44
#define vsf_exti_channel_mask_t
Definition vsf_template_exti.h:184
vsf_err_t vsf_exti_irq_enable(vsf_exti_t *exti_ptr, vsf_exti_channel_mask_t channel_mask)
Enable interrupt of one or more channels.
Definition exti_common.c:89
vsf_err_t vsf_exti_irq_disable(vsf_exti_t *exti_ptr, vsf_exti_channel_mask_t channel_mask)
Disable interrupt of one or more channels.
Definition exti_common.c:98
vsf_exti_status_t vsf_exti_status(vsf_exti_t *exti_ptr)
Get the status of EXTI instance.
Definition exti_common.c:62
#define VSF_EXTI_APIS(__prefix_name)
Definition vsf_template_exti.h:164
vsf_err_t vsf_exti_trigger(vsf_exti_t *exti_ptr, vsf_exti_channel_mask_t channel_mask)
Trigger EXTI channels.
Definition exti_common.c:80
void vsf_exti_isr_handler_t(void *target_ptr, vsf_exti_t *exti_ptr, vsf_exti_channel_mask_t channel_mask)
External interrupt callback function for exti.
Definition vsf_template_exti.h:299
void vsf_exti_fini(vsf_exti_t *exti_ptr)
Finalize a EXTI instance.
Definition exti_common.c:53
vsf_err_t vsf_exti_config_channels(vsf_exti_t *exti_ptr, vsf_exti_channel_mask_t channel_mask, vsf_exti_channel_cfg_t *cfg_ptr)
Configure one or more channels of the exti instance.
Definition exti_common.c:35
#define VSF_EXTI_MODE_LOW_LEVEL
Definition vsf_template_exti.h:268
#define VSF_EXTI_MODE_HIGH_LEVEL
Definition vsf_template_exti.h:277
uint32_t vsf_exti_channel_mask_t
Definition vsf_template_exti.h:182
@ VSF_EXTI_MODE_MASK
Definition vsf_template_exti.h:282
vsf_exti_mode_t
Predefined VSF EXTI modes that can be reimplemented in specific hal drivers.
Definition vsf_template_exti.h:228
@ VSF_EXTI_MODE_RISING
Detect interrupts on rising edge of signal.
Definition vsf_template_exti.h:243
@ VSF_EXTI_MODE_FALLING
Detect interrupts on falling edge of signal.
Definition vsf_template_exti.h:251
@ VSF_EXTI_MODE_EDGE_RISING_FALLING
Detect interrupts on both rising and falling edges.
Definition vsf_template_exti.h:259
@ VSF_EXTI_MODE_NONE
No external interrupt detection enabled.
Definition vsf_template_exti.h:235
vsf_exti_capability_t vsf_exti_capability(vsf_exti_t *exti_ptr)
Get the capability of exti instance.
Definition exti_common.c:71