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
32// multi-class support enabled by default for maximum availability.
33#ifndef VSF_PWM_CFG_MULTI_CLASS
34# define VSF_PWM_CFG_MULTI_CLASS ENABLED
35#endif
36
37#if defined(VSF_HW_PWM_COUNT) && !defined(VSF_HW_PWM_MASK)
38# define VSF_HW_PWM_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_PWM_COUNT)
39#endif
40
41#if defined(VSF_HW_PWM_MASK) && !defined(VSF_HW_PWM_COUNT)
42# define VSF_HW_PWM_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_PWM_MASK)
43#endif
44
45// application code can redefine it
46#ifndef VSF_PWM_CFG_PREFIX
47# if VSF_PWM_CFG_MULTI_CLASS == ENABLED
48# define VSF_PWM_CFG_PREFIX vsf
49# elif defined(VSF_HW_PWM_COUNT) && (VSF_HW_PWM_COUNT != 0)
50# define VSF_PWM_CFG_PREFIX vsf_hw
51# else
52# define VSF_PWM_CFG_PREFIX vsf
53# endif
54#endif
55
56#ifndef VSF_PWM_CFG_FUNCTION_RENAME
57# define VSF_PWM_CFG_FUNCTION_RENAME ENABLED
58#endif
59
63#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
64# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG DISABLED
65#endif
66
70#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
71# define VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
72#endif
73
74#ifndef VSF_PWM_CFG_INHERT_HAL_CAPABILITY
75# define VSF_PWM_CFG_INHERT_HAL_CAPABILITY ENABLED
76#endif
77
78/*============================ MACROFIED FUNCTIONS ===========================*/
79
80#define VSF_PWM_APIS(__prefix_name) \
81 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, init, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr) \
82 __VSF_HAL_TEMPLATE_API(__prefix_name, void, pwm, fini, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr) \
83 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, pwm, enable, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr) \
84 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, pwm, disable, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr) \
85 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_pwm_capability_t, pwm, capability, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr) \
86 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, pwm, set, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr, uint8_t channel, uint32_t period, uint32_t pulse)\
87 __VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, pwm, get_freq, VSF_MCONNECT(__prefix_name, _pwm_t) *pwm_ptr)
88
89/*============================ TYPES =========================================*/
90
91#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
92typedef struct vsf_pwm_cfg_t {
93 union {
96 };
98#endif
99
100#if VSF_PWM_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
101typedef struct vsf_pwm_capability_t {
102#if VSF_PWM_CFG_INHERT_HAL_CAPABILITY == ENABLED
104#endif
105
106 uint32_t max_freq;
109#endif
110
111typedef struct vsf_pwm_t vsf_pwm_t;
112
113typedef struct vsf_pwm_op_t {
114#undef __VSF_HAL_TEMPLATE_API
115#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
116
117 VSF_PWM_APIS(vsf)
119
120#if VSF_PWM_CFG_MULTI_CLASS == ENABLED
121struct vsf_pwm_t {
123};
124#endif
125
126/*============================ PROTOTYPES ====================================*/
127
147extern vsf_err_t vsf_pwm_init(vsf_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr);
148
161extern void vsf_pwm_fini(vsf_pwm_t *pwm_ptr);
162
176extern fsm_rt_t vsf_pwm_enable(vsf_pwm_t *pwm_ptr);
177
191extern fsm_rt_t vsf_pwm_disable(vsf_pwm_t *pwm_ptr);
192
205
223extern vsf_err_t vsf_pwm_set(vsf_pwm_t *pwm_ptr, uint8_t channel,
224 uint32_t period, uint32_t pulse);
225
243extern uint32_t vsf_pwm_get_freq(vsf_pwm_t *pwm_ptr);
244
245
246// TODO: move to pwm_commom.h
264extern vsf_err_t vsf_pwm_set_ms(vsf_pwm_t *pwm_ptr,
265 uint8_t channel,
266 uint32_t period,
267 uint32_t pulse);
268
286extern vsf_err_t vsf_pwm_set_us(vsf_pwm_t *pwm_ptr,
287 uint8_t channel,
288 uint32_t period,
289 uint32_t pulse);
290
308extern vsf_err_t vsf_pwm_set_ns(vsf_pwm_t *pwm_ptr,
309 uint8_t channel,
310 uint32_t period,
311 uint32_t pulse);
312
313
314/*============================ MACROFIED FUNCTIONS ===========================*/
315
316#if VSF_PWM_CFG_FUNCTION_RENAME == ENABLED
317# define __vsf_pwm_t VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_t)
318# define vsf_pwm_init(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_init) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
319# define vsf_pwm_fini(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_fini) ((__vsf_pwm_t *)(__PM))
320# define vsf_pwm_enable(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_enable) ((__vsf_pwm_t *)(__PM))
321# define vsf_pwm_disable(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_disable) ((__vsf_pwm_t *)(__PM))
322# define vsf_pwm_capability(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_capability) ((__vsf_pwm_t *)(__PM))
323# define vsf_pwm_set(__PM, ...) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_set) ((__vsf_pwm_t *)(__PM), ##__VA_ARGS__)
324# define vsf_pwm_get_freq(__PM) VSF_MCONNECT(VSF_PWM_CFG_PREFIX, _pwm_get_freq) ((__vsf_pwm_t *)(__PM))
325#endif
326
327#ifdef __cplusplus
328}
329#endif
330
331#endif /*__VSF_TEMPLATE_PWM_H__ */
vsf_err_t
Definition __type.h:42
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:203
Definition vsf_template_pwm.h:101
inherit(vsf_peripheral_capability_t) uint32_t max_freq
uint32_t min_freq
Definition vsf_template_pwm.h:107
Definition vsf_template_pwm.h:92
uint32_t freq
The clock frequency, in Hz.
Definition vsf_template_pwm.h:94
uint32_t min_freq
The minimum clock frequency, in Hz.
Definition vsf_template_pwm.h:95
Definition vsf_template_pwm.h:113
Definition vsf_template_pwm.h:121
const vsf_pwm_op_t * op
Definition vsf_template_pwm.h:122
fsm_rt_t
Definition vsf_fsm.h:315
vsf_err_t vsf_pwm_set_ns(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:104
#define vsf_pwm_init(__PM,...)
Definition vsf_template_pwm.h:318
#define vsf_pwm_enable(__PM)
Definition vsf_template_pwm.h:320
vsf_err_t vsf_pwm_set_us(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:113
#define vsf_pwm_get_freq(__PM)
Definition vsf_template_pwm.h:324
vsf_err_t vsf_pwm_set_ms(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:122
#define vsf_pwm_capability(__PM)
Definition vsf_template_pwm.h:322
#define vsf_pwm_set(__PM,...)
Definition vsf_template_pwm.h:323
#define vsf_pwm_fini(__PM)
Definition vsf_template_pwm.h:319
#define VSF_PWM_APIS(__prefix_name)
Definition vsf_template_pwm.h:80
#define vsf_pwm_disable(__PM)
Definition vsf_template_pwm.h:321