VSF Documented
pwm_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#if VSF_HAL_USE_PWM == ENABLED
19
20/*============================ INCLUDES ======================================*/
21
22/*============================ MACROS ========================================*/
23
24#ifndef VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION
25# define VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
26#endif
27
28#ifndef VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY
29# define VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
30#endif
31
32#ifdef VSF_PWM_CFG_IMP_REMAP_PREFIX
33# undef VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY
34# define VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
35# undef VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION
36# define VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
37#endif
38
39#if VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
40# ifndef VSF_PWM_CFG_CAPABILITY_MIN_FREQ
41# define VSF_PWM_CFG_CAPABILITY_MIN_FREQ (1ul * 1000)
42# endif
43# ifndef VSF_PWM_CFG_CAPABILITY_MAX_FREQ
44# define VSF_PWM_CFG_CAPABILITY_MAX_FREQ (10ul * 1000 * 1000)
45# endif
46#endif
47
48#define vsf_real_pwm_t VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_t)
49#define vsf_real_pwm_set VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_set)
50#define vsf_real_pwm_get_freq VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_get_freq)
51#define vsf_real_pwm_capability VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_capability)
52#define vsf_real_pwm_get_configuration VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_get_configuration)
53
54/*============================ MACROFIED FUNCTIONS ===========================*/
55/*============================ TYPES =========================================*/
56/*============================ GLOBAL VARIABLES ==============================*/
57/*============================ LOCAL VARIABLES ===============================*/
58/*============================ PROTOTYPES ====================================*/
59/*============================ IMPLEMENTATION ================================*/
60
61#if VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
62vsf_pwm_capability_t vsf_real_pwm_capability(vsf_real_pwm_t *pwm_ptr)
63{
64 vsf_pwm_capability_t pwm_capability = {
67 };
68
69 return pwm_capability;
70}
71#endif
72
73#if VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
74vsf_err_t vsf_real_pwm_get_configuration(vsf_real_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr)
75{
76 VSF_HAL_ASSERT(NULL != pwm_ptr);
77 VSF_HAL_ASSERT(NULL != cfg_ptr);
78 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
80}
81#endif
82
83/*============================ MACROS ========================================*/
84
85#undef VSF_PWM_CFG_REIMPLEMENT_API_CAPABILITY
86#undef VSF_PWM_CFG_REIMPLEMENT_API_GET_CONFIGURATION
87#undef VSF_PWM_CFG_CAPABILITY_MAX_FREQ
88#undef VSF_PWM_CFG_CAPABILITY_MIN_FREQ
89#undef vsf_real_pwm_t
90#undef vsf_real_pwm_capability
91#undef vsf_real_pwm_get_configuration
92
93/*============================ MACROS ========================================*/
94
95#ifdef VSF_PWM_CFG_IMP_REMAP_PREFIX
96
97# define vsf_imp_pwm_t VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_t)
98# define vsf_imp_pwm_init VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_init)
99# define vsf_imp_pwm_fini VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_fini)
100# define vsf_imp_pwm_enable VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_enable)
101# define vsf_imp_pwm_disable VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_disable)
102# define vsf_imp_pwm_capability VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_capability)
103# define vsf_imp_pwm_set VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_set)
104# define vsf_imp_pwm_get_freq VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_get_freq)
105# define vsf_imp_pwm_get_configuration VSF_MCONNECT(VSF_PWM_CFG_IMP_PREFIX, _pwm_get_configuration)
106
107# define vsf_remap_pwm_t VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_t)
108# define vsf_remap_pwm_init VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_init)
109# define vsf_remap_pwm_fini VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_fini)
110# define vsf_remap_pwm_enable VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_enable)
111# define vsf_remap_pwm_disable VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_disable)
112# define vsf_remap_pwm_capability VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_capability)
113# define vsf_remap_pwm_set VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_set)
114# define vsf_remap_pwm_get_freq VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_get_freq)
115# define vsf_remap_pwm_get_configuration VSF_MCONNECT(VSF_PWM_CFG_IMP_REMAP_PREFIX, _pwm_get_configuration)
116
117# define VSF_PWM_CFG_IMP_REMAP_FUNCTIONS \
118 vsf_err_t vsf_imp_pwm_init(vsf_imp_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr) \
119 { \
120 VSF_HAL_ASSERT(pwm_ptr != NULL); \
121 return vsf_remap_pwm_init(pwm_ptr, cfg_ptr); \
122 } \
123 void vsf_imp_pwm_fini(vsf_imp_pwm_t *pwm_ptr) \
124 { \
125 VSF_HAL_ASSERT(pwm_ptr != NULL); \
126 vsf_remap_pwm_fini(pwm_ptr); \
127 } \
128 fsm_rt_t vsf_imp_pwm_enable(vsf_imp_pwm_t *pwm_ptr) \
129 { \
130 VSF_HAL_ASSERT(pwm_ptr != NULL); \
131 return vsf_remap_pwm_enable(pwm_ptr); \
132 } \
133 fsm_rt_t vsf_imp_pwm_disable(vsf_imp_pwm_t *pwm_ptr) \
134 { \
135 VSF_HAL_ASSERT(pwm_ptr != NULL); \
136 return vsf_remap_pwm_disable(pwm_ptr); \
137 } \
138 vsf_pwm_capability_t vsf_imp_pwm_capability(vsf_imp_pwm_t *pwm_ptr) \
139 { \
140 VSF_HAL_ASSERT(pwm_ptr != NULL); \
141 return vsf_remap_pwm_capability(pwm_ptr); \
142 } \
143 vsf_err_t vsf_imp_pwm_set(vsf_imp_pwm_t *pwm_ptr, uint8_t channel, \
144 uint32_t period, uint32_t pulse) \
145 { \
146 VSF_HAL_ASSERT(pwm_ptr != NULL); \
147 return vsf_remap_pwm_set(pwm_ptr, channel, period, pulse); \
148 } \
149 uint32_t vsf_imp_pwm_get_freq(vsf_imp_pwm_t *pwm_ptr) \
150 { \
151 VSF_HAL_ASSERT(pwm_ptr != NULL); \
152 return vsf_remap_pwm_get_freq(pwm_ptr); \
153 } \
154 \
155 vsf_err_t vsf_imp_pwm_get_configuration(vsf_imp_pwm_t *pwm_ptr, vsf_pwm_cfg_t *cfg_ptr) \
156 { \
157 VSF_HAL_ASSERT(pwm_ptr != NULL); \
158 return vsf_remap_pwm_get_configuration(pwm_ptr, cfg_ptr); \
159 }
160#endif
161
162
163/*============================ GLOBAL VARIABLES ==============================*/
164
165#define VSF_HAL_TEMPLATE_IMP_NAME _pwm
166#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _PWM
167
168#if !defined(VSF_PWM_CFG_IMP_PREFIX) && !defined(VSF_PWM_CFG_IMP_DEVICE_PREFIX)
169# error "Please define VSF_PWM_CFG_IMP_PREFIX in pwm driver"
170#endif
171
172#if !defined(VSF_PWM_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_PWM_CFG_IMP_DEVICE_UPCASE_PREFIX)
173# error "Please define VSF_PWM_CFG_IMP_UPCASE_PREFIX in pwm driver"
174#endif
175
176#ifndef VSF_PWM_CFG_IMP_COUNT_MASK_PREFIX
177# define VSF_PWM_CFG_IMP_COUNT_MASK_PREFIX VSF_PWM_CFG_IMP_UPCASE_PREFIX
178#endif
179
180#ifdef VSF_PWM_CFG_IMP_REMAP_FUNCTIONS
181# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_PWM_CFG_IMP_REMAP_FUNCTIONS
182#endif
183
185
186#undef VSF_PWM_CFG_IMP_PREFIX
187#undef VSF_PWM_CFG_IMP_COUNT_MASK_PREFIX
188#undef VSF_PWM_CFG_IMP_UPCASE_PREFIX
189#undef VSF_PWM_CFG_IMP_DEVICE_PREFIX
190#undef VSF_PWM_CFG_IMP_DEVICE_UPCASE_PREFIX
191#undef VSF_PWM_CFG_IMP_LV0
192#undef VSF_PWM_CFG_IMP_REMAP_FUNCTIONS
193#undef VSF_PWM_CFG_IMP_HAS_OP
194#undef VSF_PWM_CFG_IMP_EXTERN_OP
195
196#undef vsf_imp_pwm_t
197#undef vsf_imp_pwm_init
198#undef vsf_imp_pwm_fini
199#undef vsf_imp_pwm_enable
200#undef vsf_imp_pwm_disable
201#undef vsf_imp_pwm_capability
202#undef vsf_imp_pwm_set
203#undef vsf_imp_pwm_get_freq
204#undef vsf_imp_pwm_get_configuration
205
206#undef vsf_remap_pwm_t
207#undef vsf_remap_pwm_init
208#undef vsf_remap_pwm_fini
209#undef vsf_remap_pwm_enable
210#undef vsf_remap_pwm_disable
211#undef vsf_remap_pwm_capability
212#undef vsf_remap_pwm_set
213#undef vsf_remap_pwm_get_freq
214#undef vsf_remap_pwm_get_configuration
215
216#endif /* VSF_HAL_USE_PWM */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define VSF_PWM_CFG_CAPABILITY_MIN_FREQ
Definition aic_pwm.c:139
#define VSF_PWM_CFG_CAPABILITY_MAX_FREQ
Definition aic_pwm.c:138
#define NULL
Definition lvgl.h:26
PWM capability structure. Describes the capabilities and limitations of the PWM hardware.
Definition vsf_template_pwm.h:189
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:212
PWM configuration structure. Used to configure the PWM generator's frequency settings.
Definition vsf_template_pwm.h:155
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
Generated from commit: vsfteam/vsf@74aa6ce