VSF Documented
timer_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_TIMER == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY
24# define VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
25#endif
26
27#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION
28# define VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
29#endif
30
31#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_IRQ_CLEAR
32# define VSF_TIMER_CFG_REIMPLEMENT_API_IRQ_CLEAR DISABLED
33#endif
34
35#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CTRL
36# define VSF_TIMER_CFG_REIMPLEMENT_API_CTRL DISABLED
37#endif
38
39#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_STATUS
40# define VSF_TIMER_CFG_REIMPLEMENT_API_STATUS DISABLED
41#endif
42
43
44#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
45# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL DISABLED
46#endif
47
48#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG
49# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
50#endif
51
52#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START
53# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
54#endif
55
56#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP
57# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
58#endif
59
60#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START
61# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
62#endif
63
64#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP
65# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
66#endif
67
68#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL
69# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL
70#endif
71
72#ifdef VSF_TIMER_CFG_IMP_REMAP_PREFIX
73# undef VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY
74# undef VSF_TIMER_CFG_REIMPLEMENT_API_CTRL
75# undef VSF_TIMER_CFG_REIMPLEMENT_API_STATUS
76# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG
77# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START
78# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP
79# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START
80# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP
81# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL
82# define VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
83# undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION
84# define VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
85# define VSF_TIMER_CFG_REIMPLEMENT_API_CTRL ENABLED
86# define VSF_TIMER_CFG_REIMPLEMENT_API_STATUS ENABLED
87# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG ENABLED
88# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START ENABLED
89# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP ENABLED
90# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START ENABLED
91# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP ENABLED
92# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL ENABLED
93#endif
94
95#if VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
96# ifndef VSF_TIMER_CFG_CAPABILITY_IRQ_MASK
97# define VSF_TIMER_CFG_CAPABILITY_IRQ_MASK VSF_TIMER_IRQ_ALL_BITS_MASK
98# endif
99# ifndef VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN
100# define VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN 32
101# endif
102# ifndef VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM
103# define VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM 1
104# endif
105# ifndef VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT
106# define VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT 32
107# endif
108#endif
109
110/*============================ MACROFIED FUNCTIONS ===========================*/
111/*============================ TYPES =========================================*/
112/*============================ GLOBAL VARIABLES ==============================*/
113/*============================ LOCAL VARIABLES ===============================*/
114
115#if defined(VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
116# define vsf_real_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _t)
117# define vsf_real_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _capability)
118# define vsf_real_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _get_configuration)
119# define vsf_real_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _irq_clear)
120# define vsf_real_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _ctrl)
121# define vsf_real_timer_status VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _status)
122# define vsf_real_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_config)
123# define vsf_real_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_start)
124# define vsf_real_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_stop)
125# define vsf_real_timer_channel_request_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_request_start)
126# define vsf_real_timer_channel_request_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_request_stop)
127# define vsf_real_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_ctrl)
128#else
129# define vsf_real_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_t)
130# define vsf_real_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_capability)
131# define vsf_real_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_configuration)
132# define vsf_real_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_clear)
133# define vsf_real_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_ctrl)
134# define vsf_real_timer_status VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_status)
135# define vsf_real_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_config)
136# define vsf_real_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_start)
137# define vsf_real_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_stop)
138# define vsf_real_timer_channel_request_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_request_start)
139# define vsf_real_timer_channel_request_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_request_stop)
140# define vsf_real_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_ctrl)
141#endif
142
143/*============================ PROTOTYPES ====================================*/
144/*============================ IMPLEMENTATION ================================*/
145
146#if VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
147vsf_timer_capability_t vsf_real_timer_capability(vsf_real_timer_t *timer_ptr)
148{
149 vsf_timer_capability_t timer_capability = {
153 .channel_cnt = VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT,
154 };
155
156 return timer_capability;
157}
158#endif
159
160#if VSF_TIMER_CFG_REIMPLEMENT_API_CTRL == DISABLED
161vsf_err_t vsf_real_timer_ctrl(vsf_real_timer_t *timer_ptr, vsf_timer_ctrl_t ctrl, void *param)
162{
163 VSF_HAL_ASSERT(NULL != timer_ptr);
164
165 return VSF_ERR_NOT_SUPPORT;
166}
167#endif
168
169#if VSF_TIMER_CFG_REIMPLEMENT_API_STATUS == DISABLED
170vsf_timer_status_t vsf_real_timer_status(vsf_real_timer_t *timer_ptr)
171{
172 VSF_HAL_ASSERT(NULL != timer_ptr);
174
175 return (vsf_timer_status_t){
176 .value = 0,
177 };
178}
179#endif
180
181#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG == DISABLED
182vsf_err_t vsf_real_timer_channel_config(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_cfg_t *cfg_ptr)
183{
184 VSF_HAL_ASSERT(NULL != timer_ptr);
185 VSF_HAL_ASSERT(NULL != cfg_ptr);
186
187 return VSF_ERR_NOT_SUPPORT;
188}
189#endif
190
191#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START == DISABLED
192vsf_err_t vsf_real_timer_channel_start(vsf_real_timer_t *timer_ptr, uint8_t channel)
193{
194 VSF_HAL_ASSERT(NULL != timer_ptr);
195
196 return VSF_ERR_NOT_SUPPORT;
197}
198#endif
199
200#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP == DISABLED
201vsf_err_t vsf_real_timer_channel_stop(vsf_real_timer_t *timer_ptr, uint8_t channel)
202{
203 VSF_HAL_ASSERT(NULL != timer_ptr);
204
205 return VSF_ERR_NOT_SUPPORT;
206}
207#endif
208
209#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START == DISABLED
210vsf_err_t vsf_real_timer_channel_request_start(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_request_t *request_ptr)
211{
212 VSF_HAL_ASSERT((NULL != timer_ptr) && (NULL != request_ptr));
213
214 return VSF_ERR_NOT_SUPPORT;
215}
216#endif
217
218#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP == DISABLED
219vsf_err_t vsf_real_timer_channel_request_stop(vsf_real_timer_t *timer_ptr, uint8_t channel)
220{
221 VSF_HAL_ASSERT(NULL != timer_ptr);
222
223 return VSF_ERR_NOT_SUPPORT;
224}
225#endif
226
227#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL == DISABLED
228vsf_err_t vsf_real_timer_channel_ctrl(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_ctrl_t ctrl, void *param)
229{
230 VSF_HAL_ASSERT(NULL != timer_ptr);
231
232 return VSF_ERR_NOT_SUPPORT;
233}
234#endif
235
236#if VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
237vsf_err_t vsf_real_timer_get_configuration(vsf_real_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr)
238{
239 VSF_HAL_ASSERT(NULL != timer_ptr);
240 VSF_HAL_ASSERT(NULL != cfg_ptr);
241
242 // Default implementation: not supported, trigger assertion
244
245 return VSF_ERR_NOT_SUPPORT;
246}
247#endif
248
249#if VSF_TIMER_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
250vsf_timer_irq_mask_t vsf_real_timer_irq_clear(vsf_real_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask)
251{
252 VSF_HAL_ASSERT(NULL != timer_ptr);
253
254 // Default implementation: not supported, trigger assertion
256
257 return 0;
258}
259#endif
260
261/*============================ MACROS ========================================*/
262
263#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CAPABILITY
264#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CFG
265#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
266#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_CTRL
267#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
268#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_REQUEST
269#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CTRL
270#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_IRQ_MASK
271#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_STATUS
272#undef VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY
273#undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION
274#undef VSF_TIMER_CFG_CAPABILITY_IRQ_MASK
275#undef VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN
276#undef VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM
277#undef VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT
278#undef vsf_real_timer_t
279#undef vsf_real_timer_capability
280#undef vsf_real_timer_get_configuration
281#undef vsf_real_timer_irq_clear
282#undef vsf_real_timer_ctrl
283#undef vsf_real_timer_status
284#undef vsf_real_timer_channel_config
285#undef vsf_real_timer_channel_start
286#undef vsf_real_timer_channel_stop
287#undef vsf_real_timer_channel_request_start
288#undef vsf_real_timer_channel_request_stop
289#undef vsf_real_timer_channel_ctrl
290
291/*============================ MACROS ========================================*/
292
293#ifdef VSF_TIMER_CFG_IMP_REMAP_PREFIX
294
295# define vsf_imp_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_t)
296# define vsf_imp_timer_init VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_init)
297# define vsf_imp_timer_fini VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_fini)
298# define vsf_imp_timer_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_enable)
299# define vsf_imp_timer_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_disable)
300# define vsf_imp_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_capability)
301# define vsf_imp_timer_irq_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_enable)
302# define vsf_imp_timer_irq_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_disable)
303# define vsf_imp_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_clear)
304# define vsf_imp_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_config)
305# define vsf_imp_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_start)
306# define vsf_imp_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_stop)
307# define vsf_imp_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_ctrl)
308# define vsf_imp_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_ctrl)
309# define vsf_imp_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_configuration)
310
311# define vsf_remap_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_t)
312# define vsf_remap_timer_init VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_init)
313# define vsf_remap_timer_fini VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_fini)
314# define vsf_remap_timer_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_enable)
315# define vsf_remap_timer_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_disable)
316# define vsf_remap_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_capability)
317# define vsf_remap_timer_irq_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_enable)
318# define vsf_remap_timer_irq_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_disable)
319# define vsf_remap_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_clear)
320# define vsf_remap_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_config)
321# define vsf_remap_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_start)
322# define vsf_remap_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_stop)
323# define vsf_remap_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_ctrl)
324# define vsf_remap_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_ctrl)
325# define vsf_remap_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_get_configuration)
326
327# define VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS \
328 vsf_err_t vsf_imp_timer_init(vsf_imp_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr) \
329 { \
330 VSF_HAL_ASSERT(timer_ptr != NULL); \
331 return vsf_remap_timer_init(timer_ptr, cfg_ptr); \
332 } \
333 void vsf_imp_timer_fini(vsf_imp_timer_t *timer_ptr) \
334 { \
335 VSF_HAL_ASSERT(timer_ptr != NULL); \
336 vsf_remap_timer_fini(timer_ptr); \
337 } \
338 fsm_rt_t vsf_imp_timer_enable(vsf_imp_timer_t *timer_ptr) \
339 { \
340 VSF_HAL_ASSERT(timer_ptr != NULL); \
341 return vsf_remap_timer_enable(timer_ptr); \
342 } \
343 fsm_rt_t vsf_imp_timer_disable(vsf_imp_timer_t *timer_ptr) \
344 { \
345 VSF_HAL_ASSERT(timer_ptr != NULL); \
346 return vsf_remap_timer_disable(timer_ptr); \
347 } \
348 void vsf_imp_timer_irq_enable(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
349 { \
350 VSF_HAL_ASSERT(timer_ptr != NULL); \
351 vsf_remap_timer_irq_enable(timer_ptr, irq_mask); \
352 } \
353 void vsf_imp_timer_irq_disable(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
354 { \
355 VSF_HAL_ASSERT(timer_ptr != NULL); \
356 vsf_remap_timer_irq_disable(timer_ptr, irq_mask); \
357 } \
358 vsf_timer_irq_mask_t vsf_imp_timer_irq_clear(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
359 { \
360 VSF_HAL_ASSERT(timer_ptr != NULL); \
361 return vsf_remap_timer_irq_clear(timer_ptr, irq_mask); \
362 } \
363 vsf_timer_capability_t vsf_imp_timer_capability(vsf_imp_timer_t *timer_ptr) \
364 { \
365 VSF_HAL_ASSERT(timer_ptr != NULL); \
366 return vsf_remap_timer_capability(timer_ptr); \
367 } \
368 vsf_err_t vsf_imp_timer_pwm_set(vsf_imp_timer_t *timer_ptr, uint8_t channel, uint32_t period, uint32_t pulse) \
369 { \
370 VSF_HAL_ASSERT(NULL != timer_ptr); \
371 return vsf_remap_timer_pwm_set(timer_ptr, channel, period, pulse); \
372 } \
373 vsf_err_t vsf_imp_timer_channel_config(vsf_imp_timer_t *timer_ptr, uint8_t channel, \
374 vsf_timer_channel_cfg_t *cfg_ptr) \
375 { \
376 VSF_HAL_ASSERT(NULL != timer_ptr); \
377 return vsf_remap_timer_channel_config(timer_ptr, channel, cfg_ptr); \
378 } \
379 fsm_rt_t vsf_imp_timer_channel_start(vsf_imp_timer_t *timer_ptr, uint8_t channel) \
380 { \
381 VSF_HAL_ASSERT(NULL != timer_ptr); \
382 return vsf_remap_timer_channel_start(timer_ptr, channel); \
383 } \
384 fsm_rt_t vsf_imp_timer_channel_stop(vsf_imp_timer_t *timer_ptr, uint8_t channel) \
385 { \
386 VSF_HAL_ASSERT(NULL != timer_ptr); \
387 return vsf_remap_timer_channel_stop(timer_ptr, channel); \
388 } \
389 vsf_err_t vsf_imp_timer_channel_ctrl(vsf_imp_timer_t *timer_ptr, uint8_t channel, \
390 vsf_timer_channel_ctrl_t ctrl, void *param) \
391 { \
392 VSF_HAL_ASSERT(NULL != timer_ptr); \
393 return vsf_remap_timer_channel_ctrl(timer_ptr, channel, ctrl, param); \
394 } \
395 void vsf_imp_timer_ctrl(vsf_imp_timer_t *timer_ptr, uint_fast32_t ctrl_bit, bool level) \
396 { \
397 VSF_HAL_ASSERT(NULL != timer_ptr); \
398 vsf_remap_timer_ctrl(timer_ptr, ctrl_bit, level); \
399 } \
400 \
401 vsf_err_t vsf_imp_timer_get_configuration(vsf_imp_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr) \
402 { \
403 VSF_HAL_ASSERT(timer_ptr != NULL); \
404 return vsf_remap_timer_get_configuration(timer_ptr, cfg_ptr); \
405 }
406#endif
407
408/*============================ GLOBAL VARIABLES ==============================*/
409
410#define VSF_HAL_TEMPLATE_IMP_NAME _timer
411#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _TIMER
412
413#if !defined(VSF_TIMER_CFG_IMP_PREFIX) && !defined(VSF_TIMER_CFG_IMP_DEVICE_PREFIX)
414# error "Please define VSF_TIMER_CFG_IMP_PREFIX in timer driver"
415#endif
416
417#if !defined(VSF_TIMER_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_TIMER_CFG_IMP_DEVICE_UPCASE_PREFIX)
418# error "Please define VSF_TIMER_CFG_IMP_UPCASE_PREFIX in timer driver"
419#endif
420
421#ifndef VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX
422# define VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX VSF_TIMER_CFG_IMP_UPCASE_PREFIX
423#endif
424
425#ifdef VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
426# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
427#endif
428
430
431#undef VSF_TIMER_CFG_IMP_PREFIX
432#undef VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX
433#undef VSF_TIMER_CFG_IMP_UPCASE_PREFIX
434#undef VSF_TIMER_CFG_IMP_DEVICE_PREFIX
435#undef VSF_TIMER_CFG_IMP_DEVICE_UPCASE_PREFIX
436#undef VSF_TIMER_CFG_IMP_LV0
437#undef VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
438#undef VSF_TIMER_CFG_IMP_HAS_OP
439#undef VSF_TIMER_CFG_IMP_EXTERN_OP
440#undef VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX
441
442#undef vsf_imp_timer_t
443#undef vsf_imp_timer_init
444#undef vsf_imp_timer_fini
445#undef vsf_imp_timer_enable
446#undef vsf_imp_timer_disable
447#undef vsf_imp_timer_capability
448#undef vsf_imp_timer_irq_enable
449#undef vsf_imp_timer_irq_disable
450#undef vsf_imp_timer_channel_config
451#undef vsf_imp_timer_channel_start
452#undef vsf_imp_timer_channel_stop
453#undef vsf_imp_timer_channel_ctrl
454#undef vsf_imp_timer_ctrl
455#undef vsf_imp_timer_get_configuration
456
457#undef vsf_remap_timer_t
458#undef vsf_remap_timer_init
459#undef vsf_remap_timer_fini
460#undef vsf_remap_timer_enable
461#undef vsf_remap_timer_disable
462#undef vsf_remap_timer_capability
463#undef vsf_remap_timer_irq_enable
464#undef vsf_remap_timer_irq_disable
465#undef vsf_remap_timer_channel_config
466#undef vsf_remap_timer_channel_start
467#undef vsf_remap_timer_channel_stop
468#undef vsf_remap_timer_channel_ctrl
469#undef vsf_remap_timer_ctrl
470#undef vsf_remap_timer_get_configuration
471
472#undef VSF_HAL_TEMPLATE_IMP_NAME
473#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
474
475/*============================ STATIC ASSERTIONS ==============================*/
476
477/* User-extensible macros for custom mode and IRQ mask values
478 * Users can define these macros before including this template to append
479 * their custom enum values to the uniqueness checks.
480 *
481 * Check modes for custom values:
482 * VSF_TIMER_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
483 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
484 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
485 * VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
486 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
487 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
488 *
489 * Example usage in vendor driver:
490 * #define VSF_TIMER_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
491 * #define VSF_TIMER_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
492 * #define VSF_TIMER_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
493 * #define VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
494 * #include "hal/driver/common/timer/timer_template.inc"
495 */
496
497
498#ifdef VSF_TIMER_CFG_MODE_CHECK_UNIQUE
499/* Default mode lists - can be redefined by users before including this file */
500#ifndef VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES
501# define VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES \
502 VSF_TIMER_CHANNEL_MODE_BASE
503#endif
504
505#ifndef VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES
506# define VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES \
507 VSF_TIMER_BASE_ONESHOT, \
508 VSF_TIMER_BASE_CONTINUES
509#endif
510
511/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
512/* Check uniqueness within each functional group */
513
514/* Check channel mode uniqueness - all channel modes should have different values
515 * Mandatory: VSF_TIMER_CHANNEL_MODE_BASE
516 * Standard Optional: VSF_TIMER_CHANNEL_MODE_PWM, VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE,
517 * VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE, VSF_TIMER_CHANNEL_MODE_ENCODER,
518 * VSF_TIMER_CHANNEL_MODE_ONE_PULSE, VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
519 */
524#ifdef VSF_TIMER_CHANNEL_MODE_PWM
525 , VSF_TIMER_CHANNEL_MODE_PWM
526#endif
527#ifdef VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
528 , VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
529#endif
530#ifdef VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
531 , VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
532#endif
533#ifdef VSF_TIMER_CHANNEL_MODE_ENCODER
534 , VSF_TIMER_CHANNEL_MODE_ENCODER
535#endif
536#ifdef VSF_TIMER_CHANNEL_MODE_ONE_PULSE
537 , VSF_TIMER_CHANNEL_MODE_ONE_PULSE
538#endif
539#ifdef VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
540 , VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
541#endif
542#endif
543);
544
545/* Check base counter mode uniqueness - all base counter modes should have different values
546 * Mandatory: VSF_TIMER_BASE_ONESHOT, VSF_TIMER_BASE_CONTINUES
547 */
552);
553
554#ifdef VSF_TIMER_CUSTOM_MODE_VALUES
555/* Check uniqueness among custom mode values using user-specified check mode */
557#endif
558
561 /* Mandatory modes - always included */
564 /* Standard Optional modes - only included when __VSF_TIMER_CFG_SUPPORT_STANDARD_OPTIONAL is enabled */
566#ifdef VSF_TIMER_CHANNEL_MODE_PWM
567 , VSF_TIMER_CHANNEL_MODE_PWM
568#endif
569#ifdef VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
570 , VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
571#endif
572#ifdef VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
573 , VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
574#endif
575#ifdef VSF_TIMER_CHANNEL_MODE_ENCODER
576 , VSF_TIMER_CHANNEL_MODE_ENCODER
577#endif
578#ifdef VSF_TIMER_CHANNEL_MODE_ONE_PULSE
579 , VSF_TIMER_CHANNEL_MODE_ONE_PULSE
580#endif
581#ifdef VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
582 , VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
583#endif
584#ifdef VSF_TIMER_BASE_COUNTER_UP
585 , VSF_TIMER_BASE_COUNTER_UP
586#endif
587#ifdef VSF_TIMER_BASE_COUNTER_DOWN
588 , VSF_TIMER_BASE_COUNTER_DOWN
589#endif
590#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED1
591 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED1
592#endif
593#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED2
594 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED2
595#endif
596#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED3
597 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED3
598#endif
599#endif
600 /* User-defined modes - appended by user configuration */
601#ifdef VSF_TIMER_CUSTOM_MODE_VALUES
602 , VSF_TIMER_CUSTOM_MODE_VALUES
603#endif
604);
605
606#undef VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES
607#undef VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES
608#endif /* VSF_TIMER_CFG_MODE_CHECK_UNIQUE */
609
610/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
611
612#ifdef VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
613
614#ifdef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
615/* Check uniqueness among custom IRQ mask values using user-specified check mode */
617#endif
618
619/* Check uniqueness within vsf_timer_irq_mask_t enum */
620
621/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
622 * Mandatory: VSF_TIMER_IRQ_MASK_OVERFLOW
623 */
626 /* Mandatory IRQ masks - always included */
628 /* User-defined IRQ masks - appended by user configuration */
629#ifdef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
630 , VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
631#endif
632);
633#endif /* VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE */
634
635/* ==================== CTRL UNIQUENESS CHECKS ==================== */
636
637#ifdef VSF_TIMER_CFG_CTRL_CHECK_UNIQUE
638
639#ifdef VSF_TIMER_CUSTOM_CTRL_VALUES
640/* Check uniqueness among custom ctrl values using user-specified check mode */
641VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_TIMER_CFG_CTRL_CHECK_UNIQUE, VSF_TIMER_CUSTOM_CTRL_VALUES);
642#endif
643
644/* Check ctrl uniqueness - all ctrl values should have different values
645 * Placeholder: __VSF_TIMER_CTRL_DUMMY
646 */
648 VSF_TIMER_CFG_CTRL_CHECK_UNIQUE,
649 /* Placeholder ctrl - always included */
651 /* User-defined ctrls - appended by user configuration */
652#ifdef VSF_TIMER_CUSTOM_CTRL_VALUES
653 , VSF_TIMER_CUSTOM_CTRL_VALUES
654#endif
655);
656#endif /* VSF_TIMER_CFG_CTRL_CHECK_UNIQUE */
657
658/* ==================== CHANNEL CTRL UNIQUENESS CHECKS ==================== */
659
660#ifdef VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE
661
662#ifdef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
663/* Check uniqueness among custom channel ctrl values using user-specified check mode */
664VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE, VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES);
665#endif
666
667/* Check channel ctrl uniqueness - all channel ctrl values should have different values
668 * Placeholder: __VSF_TIMER_CHANNEL_CTRL_DUMMY
669 */
671 VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE,
672 /* Placeholder channel ctrl - always included */
674 /* User-defined channel ctrls - appended by user configuration */
675#ifdef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
676 , VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
677#endif
678);
679#endif /* VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE */
680
681#undef VSF_TIMER_CFG_MODE_CHECK_UNIQUE
682#undef VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
683#undef VSF_TIMER_CFG_CTRL_CHECK_UNIQUE
684#undef VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE
685#undef VSF_TIMER_CUSTOM_MODE_VALUES
686#undef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
687#undef VSF_TIMER_CUSTOM_CTRL_VALUES
688#undef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
689
690#endif /* VSF_HAL_USE_TIEMR */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM
Definition timer.c:203
#define VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN
Definition timer.c:202
#define VSF_TIMER_CFG_CAPABILITY_IRQ_MASK
Definition timer.c:201
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_timer.h:681
vsf_timer_irq_mask_t irq_mask
Definition timer.h:231
timer configuration
Definition vsf_template_timer.h:564
Definition vsf_template_timer.h:575
Definition vsf_template_timer.h:644
TIMER status information structure Contains the current status of TIMER operations.
Definition vsf_template_timer.h:671
#define VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
Definition timer.c:309
#define VSF_TIMER_CFG_MODE_CHECK_UNIQUE
Definition timer.c:308
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
#define __VSF_TIMER_CFG_SUPPORT_STANDARD_OPTIONAL
Enable standard optional features support.
Definition vsf_template_timer.h:242
vsf_timer_irq_mask_t
Definition vsf_template_timer.h:514
@ VSF_TIMER_IRQ_MASK_OVERFLOW
Definition vsf_template_timer.h:515
@ VSF_TIMER_CHANNEL_MODE_BASE
Definition vsf_template_timer.h:306
@ VSF_TIMER_BASE_ONESHOT
Standard optional channel modes Note: These are standard optional features. This macro should NOT be ...
Definition vsf_template_timer.h:362
@ VSF_TIMER_BASE_CONTINUES
Definition vsf_template_timer.h:364
vsf_timer_ctrl_t
Predefined VSF TIMER control command that can be reimplemented in specific hal drivers....
Definition vsf_template_timer.h:599
@ __VSF_TIMER_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_timer.h:617
vsf_timer_channel_ctrl_t
Predefined VSF TIMER control command that can be reimplemented in specific hal drivers....
Definition vsf_template_timer.h:638
@ __VSF_TIMER_CHANNEL_CTRL_DUMMY
Dummy value for compilation.
Definition vsf_template_timer.h:639
Generated from commit: vsfteam/vsf@b2e9e8a