VSF Documented
vsf_template_pwm.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_PWM_H__
19#define __VSF_TEMPLATE_PWM_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
38#ifndef VSF_PWM_CFG_MULTI_CLASS
39# define VSF_PWM_CFG_MULTI_CLASS ENABLED
40#endif
41
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)
50#endif
51
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)
60#endif
61
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
75# else
76# define VSF_PWM_CFG_PREFIX vsf
77# endif
78#endif
79
80#ifndef VSF_PWM_CFG_FUNCTION_RENAME
81# define VSF_PWM_CFG_FUNCTION_RENAME ENABLED
82#endif
83
92#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK
93# define VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
94#endif
95
107#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG
108# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG DISABLED
109#endif
110
118#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY
119# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
120#endif
121
131#ifndef VSF_PWM_CFG_INHERIT_HAL_CAPABILITY
132# define VSF_PWM_CFG_INHERIT_HAL_CAPABILITY ENABLED
133#endif
134
145#ifndef VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL
146# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
147#endif
148
149/*============================ MACROFIED FUNCTIONS ===========================*/
150
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)
173
174/*============================ TYPES =========================================*/
175
176#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
185typedef struct vsf_pwm_capability_t {
186#if VSF_PWM_CFG_INHERIT_HAL_CAPABILITY == ENABLED
188#endif
189
198 uint32_t max_freq;
199
210#endif
211
212#if VSF_PWM_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
216#endif
217
218enum {
221};
222
223#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
224typedef struct vsf_pwm_t vsf_pwm_t;
225
226typedef void vsf_pwm_isr_handler_t(void *target_ptr,
227 vsf_pwm_t *pwm_ptr,
229
235
243#endif
244
245#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
274#endif
275
276typedef struct vsf_pwm_t vsf_pwm_t;
277
278typedef struct vsf_pwm_op_t {
280#undef __VSF_HAL_TEMPLATE_API
281#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
283
284 VSF_PWM_APIS(vsf_pwm)
286
287#if VSF_PWM_CFG_MULTI_CLASS == ENABLED
288struct vsf_pwm_t {
290};
291#endif
292
293/*============================ PROTOTYPES ====================================*/
294
314extern vsf_err_t vsf_pwm_init(vsf_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr);
315
327extern void vsf_pwm_fini(vsf_pwm_t *pwm_ptr);
328
349
361extern fsm_rt_t vsf_pwm_enable(vsf_pwm_t *pwm_ptr);
362
374extern fsm_rt_t vsf_pwm_disable(vsf_pwm_t *pwm_ptr);
375
388
406extern vsf_err_t vsf_pwm_set(vsf_pwm_t *pwm_ptr, uint8_t channel,
407 uint32_t period, uint32_t pulse);
408
420extern uint32_t vsf_pwm_get_freq(vsf_pwm_t *pwm_ptr);
421
434
447
462
478extern vsf_err_t vsf_pwm_ctrl(vsf_pwm_t *pwm_ptr, vsf_pwm_ctrl_t ctrl, void * param);
479
497extern vsf_err_t vsf_pwm_set_ms(vsf_pwm_t *pwm_ptr,
498 uint8_t channel,
499 uint32_t period,
500 uint32_t pulse);
501
519extern vsf_err_t vsf_pwm_set_us(vsf_pwm_t *pwm_ptr,
520 uint8_t channel,
521 uint32_t period,
522 uint32_t pulse);
523
541extern vsf_err_t vsf_pwm_set_ns(vsf_pwm_t *pwm_ptr,
542 uint8_t channel,
543 uint32_t period,
544 uint32_t pulse);
545
546/*============================ MACROFIED FUNCTIONS ===========================*/
547
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__)
562#endif
564
565#ifdef __cplusplus
566}
567#endif
568
569#endif /*__VSF_TEMPLATE_PWM_H__ */
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
Generated from commit: vsfteam/vsf@d3b40b2