18#ifndef __VSF_TEMPLATE_PWM_H__
19#define __VSF_TEMPLATE_PWM_H__
38#ifndef VSF_PWM_CFG_MULTI_CLASS
39# define VSF_PWM_CFG_MULTI_CLASS ENABLED
48#if defined(VSF_HW_PWM_COUNT) && !defined(VSF_HW_PWM_MASK)
49# define VSF_HW_PWM_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_PWM_COUNT)
58#if defined(VSF_HW_PWM_MASK) && !defined(VSF_HW_PWM_COUNT)
59# define VSF_HW_PWM_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_PWM_MASK)
70#ifndef VSF_PWM_CFG_PREFIX
71# if VSF_PWM_CFG_MULTI_CLASS == ENABLED
72# define VSF_PWM_CFG_PREFIX vsf
73# elif defined(VSF_HW_PWM_COUNT) && (VSF_HW_PWM_COUNT != 0)
74# define VSF_PWM_CFG_PREFIX vsf_hw
76# define VSF_PWM_CFG_PREFIX vsf
80#ifndef VSF_PWM_CFG_FUNCTION_RENAME
81# define VSF_PWM_CFG_FUNCTION_RENAME ENABLED
92#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK
93# define VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
107#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG
108# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG DISABLED
118#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY
119# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
131#ifndef VSF_PWM_CFG_INHERIT_HAL_CAPABILITY
132# define VSF_PWM_CFG_INHERIT_HAL_CAPABILITY ENABLED
145#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL
146# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
160#define VSF_PWM_APIS(__prefix_name) \
161 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, init, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr) \
162 __VSF_HAL_TEMPLATE_API(__prefix_name, void, pwm, fini, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr) \
163 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, get_configuration, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr) \
164 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, pwm, enable, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr) \
165 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, pwm, disable, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr) \
166 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_pwm_capability_t, pwm, capability, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr) \
167 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, set, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)\
168 __VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, pwm, get_freq, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr) \
169 __VSF_HAL_TEMPLATE_API(__prefix_name, void, pwm, irq_enable, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_irq_mask_t irq_mask) \
170 __VSF_HAL_TEMPLATE_API(__prefix_name, void, pwm, irq_disable, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_irq_mask_t irq_mask) \
171 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_pwm_irq_mask_t, pwm, irq_clear, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_irq_mask_t irq_mask) \
172 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, ctrl, VSF_MCONNECT(__prefix_name, _t) *pwm_ptr, vsf_pwm_ctrl_t ctrl, void* param)
176#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
186#if VSF_PWM_CFG_INHERIT_HAL_CAPABILITY == ENABLED
212#if VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
223#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
245#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
280#undef __VSF_HAL_TEMPLATE_API
281#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
287#if VSF_PWM_CFG_MULTI_CLASS == ENABLED
549#if VSF_PWM_CFG_FUNCTION_RENAME == ENABLED
550# define __vsf_pwm_t VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_t)
551# define vsf_pwm_init(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_init) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
552# define vsf_pwm_fini(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_fini) ((__vsf_pwm_t *)(__PM))
553# define vsf_pwm_get_configuration(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_get_configuration) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
554# define vsf_pwm_enable(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_enable) ((__vsf_pwm_t *)(__PM))
555# define vsf_pwm_disable(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_disable) ((__vsf_pwm_t *)(__PM))
556# define vsf_pwm_capability(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_capability) ((__vsf_pwm_t *)(__PM))
557# define vsf_pwm_set(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_set) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
558# define vsf_pwm_get_freq(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_get_freq) ((__vsf_pwm_t *)(__PM))
559# define vsf_pwm_irq_enable(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_irq_enable) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
560# define vsf_pwm_irq_disable(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_irq_disable) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
561# define vsf_pwm_irq_clear(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_irq_clear) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:85
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:204
PWM capability structure. Describes the capabilities and limitations of the PWM hardware.
Definition vsf_template_pwm.h:185
inherit(vsf_peripheral_capability_t) uint32_t max_freq
Maximum supported PWM frequency in Hz. The upper limit of the PWM generator's frequency range.
uint32_t min_freq
Minimum supported PWM frequency in Hz. The lower limit of the PWM generator's frequency range.
Definition vsf_template_pwm.h:208
Definition vsf_template_pwm.h:236
vsf_pwm_isr_t isr
Definition vsf_template_pwm.h:241
uint32_t freq
Definition vsf_template_pwm.h:238
uint32_t min_freq
Definition vsf_template_pwm.h:239
Definition vsf_template_pwm.h:230
vsf_pwm_isr_handler_t * handler_fn
Definition vsf_template_pwm.h:231
vsf_arch_prio_t prio
Definition vsf_template_pwm.h:233
void * target_ptr
Definition vsf_template_pwm.h:232
Definition vsf_template_pwm.h:278
Definition vsf_template_pwm.h:288
const vsf_pwm_op_t * op
Definition vsf_template_pwm.h:289
fsm_rt_t
Definition vsf_fsm.h:315
void vsf_pwm_irq_enable(vsf_pwm_t *pwm_ptr, vsf_pwm_irq_mask_t irq_mask)
Enable PWM interrupts.
Definition pwm_common.c:120
@ VSF_PWM_IRQ_COUNT
Definition vsf_template_pwm.h:219
@ VSF_PWM_IRQ_ALL_BITS_MASK
Definition vsf_template_pwm.h:220
void vsf_pwm_isr_handler_t(void *target_ptr, vsf_pwm_t *pwm_ptr, vsf_pwm_irq_mask_t irq_mask)
Definition vsf_template_pwm.h:226
void vsf_pwm_irq_disable(vsf_pwm_t *pwm_ptr, vsf_pwm_irq_mask_t irq_mask)
Disable PWM interrupts.
Definition pwm_common.c:129
struct vsf_pwm_isr_t vsf_pwm_isr_t
vsf_err_t vsf_pwm_init(vsf_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr)
Initialize a PWM instance.
Definition pwm_common.c:38
vsf_err_t vsf_pwm_set_ns(vsf_pwm_t *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)
Set PWM period in nanoseconds.
Definition pwm_common.c:150
vsf_err_t vsf_pwm_set_us(vsf_pwm_t *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)
Set PWM period in microseconds.
Definition pwm_common.c:159
struct vsf_pwm_capability_t vsf_pwm_capability_t
PWM capability structure. Describes the capabilities and limitations of the PWM hardware.
vsf_err_t vsf_pwm_set(vsf_pwm_t *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)
PWM set the period width and pulse width for a channel.
Definition pwm_common.c:83
vsf_pwm_irq_mask_t
Definition vsf_template_pwm.h:213
@ VSF_PWM_IRQ_MASK_WRAP
Definition vsf_template_pwm.h:214
struct vsf_pwm_op_t vsf_pwm_op_t
vsf_err_t vsf_pwm_set_ms(vsf_pwm_t *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)
Set PWM period in milliseconds.
Definition pwm_common.c:168
struct vsf_pwm_cfg_t vsf_pwm_cfg_t
fsm_rt_t vsf_pwm_disable(vsf_pwm_t *pwm_ptr)
Disable a PWM instance.
Definition pwm_common.c:65
void vsf_pwm_fini(vsf_pwm_t *pwm_ptr)
Finalize a PWM instance.
Definition pwm_common.c:47
vsf_err_t vsf_pwm_ctrl(vsf_pwm_t *pwm_ptr, vsf_pwm_ctrl_t ctrl, void *param)
Calls the specified PWM command.
Definition pwm_common.c:111
uint32_t vsf_pwm_get_freq(vsf_pwm_t *pwm_ptr)
PWM get clock frequency.
Definition pwm_common.c:92
fsm_rt_t vsf_pwm_enable(vsf_pwm_t *pwm_ptr)
Enable PWM instance.
Definition pwm_common.c:56
vsf_err_t vsf_pwm_get_configuration(vsf_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr)
Get the current configuration of a PWM instance.
Definition pwm_common.c:101
vsf_pwm_irq_mask_t vsf_pwm_irq_clear(vsf_pwm_t *pwm_ptr, vsf_pwm_irq_mask_t irq_mask)
Clear PWM interrupt flags.
Definition pwm_common.c:138
#define VSF_PWM_APIS(__prefix_name)
PWM API template, used to generate PWM type, specific prefix function declarations,...
Definition vsf_template_pwm.h:160
vsf_pwm_ctrl_t
PWM control commands for hardware-specific operations.
Definition vsf_template_pwm.h:254
@ __VSF_PWM_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_pwm.h:272
vsf_pwm_capability_t vsf_pwm_capability(vsf_pwm_t *pwm_ptr)
Get the capability of PWM instance.
Definition pwm_common.c:74