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#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER
73# define VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER DISABLED
74#endif
75
76#ifndef VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER
77# define VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER DISABLED
78#endif
79
80#ifdef VSF_TIMER_CFG_IMP_REMAP_PREFIX
81# undef VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY
82# undef VSF_TIMER_CFG_REIMPLEMENT_API_CTRL
83# undef VSF_TIMER_CFG_REIMPLEMENT_API_STATUS
84# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG
85# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START
86# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP
87# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START
88# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP
89# undef VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL
90# undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER
91# undef VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER
92# define VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
93# undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION
94# define VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
95# define VSF_TIMER_CFG_REIMPLEMENT_API_CTRL ENABLED
96# define VSF_TIMER_CFG_REIMPLEMENT_API_STATUS ENABLED
97# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG ENABLED
98# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START ENABLED
99# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP ENABLED
100# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START ENABLED
101# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP ENABLED
102# define VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL ENABLED
103# define VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER ENABLED
104# define VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER ENABLED
105#endif
106
107#if VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
108# ifndef VSF_TIMER_CFG_CAPABILITY_IRQ_MASK
109# define VSF_TIMER_CFG_CAPABILITY_IRQ_MASK VSF_TIMER_IRQ_ALL_BITS_MASK
110# endif
111# ifndef VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN
112# define VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN 32
113# endif
114# ifndef VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM
115# define VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM 1
116# endif
117# ifndef VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT
118# define VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT 32
119# endif
120#endif
121
122/*============================ MACROFIED FUNCTIONS ===========================*/
123/*============================ TYPES =========================================*/
124/*============================ GLOBAL VARIABLES ==============================*/
125/*============================ LOCAL VARIABLES ===============================*/
126
127#if defined(VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
128# define vsf_real_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _t)
129# define vsf_real_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _capability)
130# define vsf_real_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _get_configuration)
131# define vsf_real_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _irq_clear)
132# define vsf_real_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _ctrl)
133# define vsf_real_timer_status VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _status)
134# define vsf_real_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_config)
135# define vsf_real_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_start)
136# define vsf_real_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_stop)
137# define vsf_real_timer_channel_request_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_request_start)
138# define vsf_real_timer_channel_request_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_request_stop)
139# define vsf_real_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _channel_ctrl)
140# define vsf_real_timer_get_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _get_counter)
141# define vsf_real_timer_set_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_DEVICE_PREFIX, _set_counter)
142#else
143# define vsf_real_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_t)
144# define vsf_real_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_capability)
145# define vsf_real_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_configuration)
146# define vsf_real_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_clear)
147# define vsf_real_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_ctrl)
148# define vsf_real_timer_status VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_status)
149# define vsf_real_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_config)
150# define vsf_real_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_start)
151# define vsf_real_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_stop)
152# define vsf_real_timer_channel_request_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_request_start)
153# define vsf_real_timer_channel_request_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_request_stop)
154# define vsf_real_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_ctrl)
155# define vsf_real_timer_get_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_counter)
156# define vsf_real_timer_set_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_set_counter)
157#endif
158
159/*============================ PROTOTYPES ====================================*/
160/*============================ IMPLEMENTATION ================================*/
161
162#if VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
163vsf_timer_capability_t vsf_real_timer_capability(vsf_real_timer_t *timer_ptr)
164{
165 vsf_timer_capability_t timer_capability = {
169 .channel_cnt = VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT,
170 };
171
172 return timer_capability;
173}
174#endif
175
176#if VSF_TIMER_CFG_REIMPLEMENT_API_CTRL == DISABLED
177vsf_err_t vsf_real_timer_ctrl(vsf_real_timer_t *timer_ptr, vsf_timer_ctrl_t ctrl, void *param)
178{
179 VSF_HAL_ASSERT(NULL != timer_ptr);
180
181 return VSF_ERR_NOT_SUPPORT;
182}
183#endif
184
185#if VSF_TIMER_CFG_REIMPLEMENT_API_STATUS == DISABLED
186vsf_timer_status_t vsf_real_timer_status(vsf_real_timer_t *timer_ptr)
187{
188 VSF_HAL_ASSERT(NULL != timer_ptr);
190
191 return (vsf_timer_status_t){
192 .value = 0,
193 };
194}
195#endif
196
197#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CONFIG == DISABLED
198vsf_err_t vsf_real_timer_channel_config(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_cfg_t *cfg_ptr)
199{
200 VSF_HAL_ASSERT(NULL != timer_ptr);
201 VSF_HAL_ASSERT(NULL != cfg_ptr);
202
203 return VSF_ERR_NOT_SUPPORT;
204}
205#endif
206
207#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_START == DISABLED
208vsf_err_t vsf_real_timer_channel_start(vsf_real_timer_t *timer_ptr, uint8_t channel)
209{
210 VSF_HAL_ASSERT(NULL != timer_ptr);
211
212 return VSF_ERR_NOT_SUPPORT;
213}
214#endif
215
216#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_STOP == DISABLED
217vsf_err_t vsf_real_timer_channel_stop(vsf_real_timer_t *timer_ptr, uint8_t channel)
218{
219 VSF_HAL_ASSERT(NULL != timer_ptr);
220
221 return VSF_ERR_NOT_SUPPORT;
222}
223#endif
224
225#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_START == DISABLED
226vsf_err_t vsf_real_timer_channel_request_start(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_request_t *request_ptr)
227{
228 VSF_HAL_ASSERT((NULL != timer_ptr) && (NULL != request_ptr));
229
230 return VSF_ERR_NOT_SUPPORT;
231}
232#endif
233
234#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_REQUEST_STOP == DISABLED
235vsf_err_t vsf_real_timer_channel_request_stop(vsf_real_timer_t *timer_ptr, uint8_t channel)
236{
237 VSF_HAL_ASSERT(NULL != timer_ptr);
238
239 return VSF_ERR_NOT_SUPPORT;
240}
241#endif
242
243#if VSF_TIMER_CFG_REIMPLEMENT_API_CHANNEL_CTRL == DISABLED
244vsf_err_t vsf_real_timer_channel_ctrl(vsf_real_timer_t *timer_ptr, uint8_t channel, vsf_timer_channel_ctrl_t ctrl, void *param)
245{
246 VSF_HAL_ASSERT(NULL != timer_ptr);
247
248 return VSF_ERR_NOT_SUPPORT;
249}
250#endif
251
252#if VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
253vsf_err_t vsf_real_timer_get_configuration(vsf_real_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr)
254{
255 VSF_HAL_ASSERT(NULL != timer_ptr);
256 VSF_HAL_ASSERT(NULL != cfg_ptr);
257
258 // Default implementation: not supported, trigger assertion
260
261 return VSF_ERR_NOT_SUPPORT;
262}
263#endif
264
265#if VSF_TIMER_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
266vsf_timer_irq_mask_t vsf_real_timer_irq_clear(vsf_real_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask)
267{
268 VSF_HAL_ASSERT(NULL != timer_ptr);
269
270 // Default implementation: not supported, trigger assertion
272
273 return 0;
274}
275#endif
276
277#if VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER == DISABLED
278uint32_t vsf_real_timer_get_counter(vsf_real_timer_t *timer_ptr)
279{
280 VSF_HAL_ASSERT(NULL != timer_ptr);
281
282 // Default implementation: not supported, trigger assertion
284
285 return 0;
286}
287#endif
288
289#if VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER == DISABLED
290vsf_err_t vsf_real_timer_set_counter(vsf_real_timer_t *timer_ptr, uint32_t value,
292{
293 VSF_HAL_ASSERT(NULL != timer_ptr);
294 (void)value;
295 (void)mode;
296
297 return VSF_ERR_NOT_SUPPORT;
298}
299#endif
300
301/*============================ MACROS ========================================*/
302
303#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CAPABILITY
304#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CFG
305#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
306#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_CTRL
307#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
308#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CHANNEL_REQUEST
309#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_CTRL
310#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_IRQ_MASK
311#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_STATUS
312#undef VSF_TIMER_CFG_REIMPLEMENT_TYPE_SET_COUNTER_MODE
313#undef VSF_TIMER_CFG_REIMPLEMENT_API_CAPABILITY
314#undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_CONFIGURATION
315#undef VSF_TIMER_CFG_REIMPLEMENT_API_GET_COUNTER
316#undef VSF_TIMER_CFG_REIMPLEMENT_API_SET_COUNTER
317#undef VSF_TIMER_CFG_CAPABILITY_IRQ_MASK
318#undef VSF_TIMER_CFG_CAPABILITY_TIMER_BITLEN
319#undef VSF_TIMER_CFG_CAPABILITY_SUPPORT_PWM
320#undef VSF_TIMER_CFG_CAPABILITY_PWM_CHANNEL_CNT
321#undef vsf_real_timer_t
322#undef vsf_real_timer_capability
323#undef vsf_real_timer_get_configuration
324#undef vsf_real_timer_irq_clear
325#undef vsf_real_timer_ctrl
326#undef vsf_real_timer_status
327#undef vsf_real_timer_channel_config
328#undef vsf_real_timer_channel_start
329#undef vsf_real_timer_channel_stop
330#undef vsf_real_timer_channel_request_start
331#undef vsf_real_timer_channel_request_stop
332#undef vsf_real_timer_channel_ctrl
333#undef vsf_real_timer_get_counter
334#undef vsf_real_timer_set_counter
335
336/*============================ MACROS ========================================*/
337
338#ifdef VSF_TIMER_CFG_IMP_REMAP_PREFIX
339
340# define vsf_imp_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_t)
341# define vsf_imp_timer_init VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_init)
342# define vsf_imp_timer_fini VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_fini)
343# define vsf_imp_timer_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_enable)
344# define vsf_imp_timer_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_disable)
345# define vsf_imp_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_capability)
346# define vsf_imp_timer_irq_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_enable)
347# define vsf_imp_timer_irq_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_disable)
348# define vsf_imp_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_irq_clear)
349# define vsf_imp_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_config)
350# define vsf_imp_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_start)
351# define vsf_imp_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_stop)
352# define vsf_imp_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_channel_ctrl)
353# define vsf_imp_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_ctrl)
354# define vsf_imp_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_configuration)
355# define vsf_imp_timer_get_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_get_counter)
356# define vsf_imp_timer_set_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_PREFIX, _timer_set_counter)
357
358# define vsf_remap_timer_t VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_t)
359# define vsf_remap_timer_init VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_init)
360# define vsf_remap_timer_fini VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_fini)
361# define vsf_remap_timer_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_enable)
362# define vsf_remap_timer_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_disable)
363# define vsf_remap_timer_capability VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_capability)
364# define vsf_remap_timer_irq_enable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_enable)
365# define vsf_remap_timer_irq_disable VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_disable)
366# define vsf_remap_timer_irq_clear VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_irq_clear)
367# define vsf_remap_timer_channel_config VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_config)
368# define vsf_remap_timer_channel_start VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_start)
369# define vsf_remap_timer_channel_stop VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_stop)
370# define vsf_remap_timer_channel_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_channel_ctrl)
371# define vsf_remap_timer_ctrl VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_ctrl)
372# define vsf_remap_timer_get_configuration VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_get_configuration)
373# define vsf_remap_timer_get_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_get_counter)
374# define vsf_remap_timer_set_counter VSF_MCONNECT(VSF_TIMER_CFG_IMP_REMAP_PREFIX, _timer_set_counter)
375
376# define VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS \
377 vsf_err_t vsf_imp_timer_init(vsf_imp_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr) \
378 { \
379 VSF_HAL_ASSERT(timer_ptr != NULL); \
380 return vsf_remap_timer_init(timer_ptr, cfg_ptr); \
381 } \
382 void vsf_imp_timer_fini(vsf_imp_timer_t *timer_ptr) \
383 { \
384 VSF_HAL_ASSERT(timer_ptr != NULL); \
385 vsf_remap_timer_fini(timer_ptr); \
386 } \
387 fsm_rt_t vsf_imp_timer_enable(vsf_imp_timer_t *timer_ptr) \
388 { \
389 VSF_HAL_ASSERT(timer_ptr != NULL); \
390 return vsf_remap_timer_enable(timer_ptr); \
391 } \
392 fsm_rt_t vsf_imp_timer_disable(vsf_imp_timer_t *timer_ptr) \
393 { \
394 VSF_HAL_ASSERT(timer_ptr != NULL); \
395 return vsf_remap_timer_disable(timer_ptr); \
396 } \
397 void vsf_imp_timer_irq_enable(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
398 { \
399 VSF_HAL_ASSERT(timer_ptr != NULL); \
400 vsf_remap_timer_irq_enable(timer_ptr, irq_mask); \
401 } \
402 void vsf_imp_timer_irq_disable(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
403 { \
404 VSF_HAL_ASSERT(timer_ptr != NULL); \
405 vsf_remap_timer_irq_disable(timer_ptr, irq_mask); \
406 } \
407 vsf_timer_irq_mask_t vsf_imp_timer_irq_clear(vsf_imp_timer_t *timer_ptr, vsf_timer_irq_mask_t irq_mask) \
408 { \
409 VSF_HAL_ASSERT(timer_ptr != NULL); \
410 return vsf_remap_timer_irq_clear(timer_ptr, irq_mask); \
411 } \
412 vsf_timer_capability_t vsf_imp_timer_capability(vsf_imp_timer_t *timer_ptr) \
413 { \
414 VSF_HAL_ASSERT(timer_ptr != NULL); \
415 return vsf_remap_timer_capability(timer_ptr); \
416 } \
417 vsf_err_t vsf_imp_timer_pwm_set(vsf_imp_timer_t *timer_ptr, uint8_t channel, uint32_t period, uint32_t pulse) \
418 { \
419 VSF_HAL_ASSERT(NULL != timer_ptr); \
420 return vsf_remap_timer_pwm_set(timer_ptr, channel, period, pulse); \
421 } \
422 vsf_err_t vsf_imp_timer_channel_config(vsf_imp_timer_t *timer_ptr, uint8_t channel, \
423 vsf_timer_channel_cfg_t *cfg_ptr) \
424 { \
425 VSF_HAL_ASSERT(NULL != timer_ptr); \
426 return vsf_remap_timer_channel_config(timer_ptr, channel, cfg_ptr); \
427 } \
428 fsm_rt_t vsf_imp_timer_channel_start(vsf_imp_timer_t *timer_ptr, uint8_t channel) \
429 { \
430 VSF_HAL_ASSERT(NULL != timer_ptr); \
431 return vsf_remap_timer_channel_start(timer_ptr, channel); \
432 } \
433 fsm_rt_t vsf_imp_timer_channel_stop(vsf_imp_timer_t *timer_ptr, uint8_t channel) \
434 { \
435 VSF_HAL_ASSERT(NULL != timer_ptr); \
436 return vsf_remap_timer_channel_stop(timer_ptr, channel); \
437 } \
438 vsf_err_t vsf_imp_timer_channel_ctrl(vsf_imp_timer_t *timer_ptr, uint8_t channel, \
439 vsf_timer_channel_ctrl_t ctrl, void *param) \
440 { \
441 VSF_HAL_ASSERT(NULL != timer_ptr); \
442 return vsf_remap_timer_channel_ctrl(timer_ptr, channel, ctrl, param); \
443 } \
444 void vsf_imp_timer_ctrl(vsf_imp_timer_t *timer_ptr, uint_fast32_t ctrl_bit, bool level) \
445 { \
446 VSF_HAL_ASSERT(NULL != timer_ptr); \
447 vsf_remap_timer_ctrl(timer_ptr, ctrl_bit, level); \
448 } \
449 \
450 vsf_err_t vsf_imp_timer_get_configuration(vsf_imp_timer_t *timer_ptr, vsf_timer_cfg_t *cfg_ptr) \
451 { \
452 VSF_HAL_ASSERT(timer_ptr != NULL); \
453 return vsf_remap_timer_get_configuration(timer_ptr, cfg_ptr); \
454 } \
455 uint32_t vsf_imp_timer_get_counter(vsf_imp_timer_t *timer_ptr) \
456 { \
457 VSF_HAL_ASSERT(timer_ptr != NULL); \
458 return vsf_remap_timer_get_counter(timer_ptr); \
459 } \
460 vsf_err_t vsf_imp_timer_set_counter(vsf_imp_timer_t *timer_ptr, uint32_t value, \
461 vsf_timer_set_counter_mode_t mode) \
462 { \
463 VSF_HAL_ASSERT(timer_ptr != NULL); \
464 return vsf_remap_timer_set_counter(timer_ptr, value, mode); \
465 }
466#endif
467
468/*============================ GLOBAL VARIABLES ==============================*/
469
470#define VSF_HAL_TEMPLATE_IMP_NAME _timer
471#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _TIMER
472
473#if !defined(VSF_TIMER_CFG_IMP_PREFIX) && !defined(VSF_TIMER_CFG_IMP_DEVICE_PREFIX)
474# error "Please define VSF_TIMER_CFG_IMP_PREFIX in timer driver"
475#endif
476
477#if !defined(VSF_TIMER_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_TIMER_CFG_IMP_DEVICE_UPCASE_PREFIX)
478# error "Please define VSF_TIMER_CFG_IMP_UPCASE_PREFIX in timer driver"
479#endif
480
481#ifndef VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX
482# define VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX VSF_TIMER_CFG_IMP_UPCASE_PREFIX
483#endif
484
485#ifdef VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
486# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
487#endif
488
490
491#undef VSF_TIMER_CFG_IMP_PREFIX
492#undef VSF_TIMER_CFG_IMP_COUNT_MASK_PREFIX
493#undef VSF_TIMER_CFG_IMP_UPCASE_PREFIX
494#undef VSF_TIMER_CFG_IMP_DEVICE_PREFIX
495#undef VSF_TIMER_CFG_IMP_DEVICE_UPCASE_PREFIX
496#undef VSF_TIMER_CFG_IMP_LV0
497#undef VSF_TIMER_CFG_IMP_REMAP_FUNCTIONS
498#undef VSF_TIMER_CFG_IMP_HAS_OP
499#undef VSF_TIMER_CFG_IMP_EXTERN_OP
500#undef VSF_TIMER_CFG_IMP_RENAME_DEVICE_PREFIX
501
502#undef vsf_imp_timer_t
503#undef vsf_imp_timer_init
504#undef vsf_imp_timer_fini
505#undef vsf_imp_timer_enable
506#undef vsf_imp_timer_disable
507#undef vsf_imp_timer_capability
508#undef vsf_imp_timer_irq_enable
509#undef vsf_imp_timer_irq_disable
510#undef vsf_imp_timer_channel_config
511#undef vsf_imp_timer_channel_start
512#undef vsf_imp_timer_channel_stop
513#undef vsf_imp_timer_channel_ctrl
514#undef vsf_imp_timer_ctrl
515#undef vsf_imp_timer_get_configuration
516#undef vsf_imp_timer_get_counter
517#undef vsf_imp_timer_set_counter
518
519#undef vsf_remap_timer_t
520#undef vsf_remap_timer_init
521#undef vsf_remap_timer_fini
522#undef vsf_remap_timer_enable
523#undef vsf_remap_timer_disable
524#undef vsf_remap_timer_capability
525#undef vsf_remap_timer_irq_enable
526#undef vsf_remap_timer_irq_disable
527#undef vsf_remap_timer_channel_config
528#undef vsf_remap_timer_channel_start
529#undef vsf_remap_timer_channel_stop
530#undef vsf_remap_timer_channel_ctrl
531#undef vsf_remap_timer_ctrl
532#undef vsf_remap_timer_get_configuration
533#undef vsf_remap_timer_get_counter
534#undef vsf_remap_timer_set_counter
535
536#undef VSF_HAL_TEMPLATE_IMP_NAME
537#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
538
539/*============================ STATIC ASSERTIONS ==============================*/
540
541/* User-extensible macros for custom mode and IRQ mask values
542 * Users can define these macros before including this template to append
543 * their custom enum values to the uniqueness checks.
544 *
545 * Check modes for custom values:
546 * VSF_TIMER_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
547 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
548 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
549 * VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
550 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
551 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
552 *
553 * Example usage in vendor driver:
554 * #define VSF_TIMER_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
555 * #define VSF_TIMER_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
556 * #define VSF_TIMER_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
557 * #define VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
558 * #include "hal/driver/common/timer/timer_template.inc"
559 */
560
561
562#ifdef VSF_TIMER_CFG_MODE_CHECK_UNIQUE
563/* Default mode lists - can be redefined by users before including this file */
564#ifndef VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES
565# define VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES \
566 VSF_TIMER_CHANNEL_MODE_BASE
567#endif
568
569#ifndef VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES
570# define VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES \
571 VSF_TIMER_BASE_ONESHOT, \
572 VSF_TIMER_BASE_CONTINUES
573#endif
574
575/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
576/* Check uniqueness within each functional group */
577
578/* Check channel mode uniqueness - all channel modes should have different values
579 * Mandatory: VSF_TIMER_CHANNEL_MODE_BASE
580 * Standard Optional: VSF_TIMER_CHANNEL_MODE_PWM, VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE,
581 * VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE, VSF_TIMER_CHANNEL_MODE_ENCODER,
582 * VSF_TIMER_CHANNEL_MODE_ONE_PULSE, VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
583 */
588#ifdef VSF_TIMER_CHANNEL_MODE_PWM
589 , VSF_TIMER_CHANNEL_MODE_PWM
590#endif
591#ifdef VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
592 , VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
593#endif
594#ifdef VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
595 , VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
596#endif
597#ifdef VSF_TIMER_CHANNEL_MODE_ENCODER
598 , VSF_TIMER_CHANNEL_MODE_ENCODER
599#endif
600#ifdef VSF_TIMER_CHANNEL_MODE_ONE_PULSE
601 , VSF_TIMER_CHANNEL_MODE_ONE_PULSE
602#endif
603#ifdef VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
604 , VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
605#endif
606#endif
607);
608
609/* Check base counter mode uniqueness - all base counter modes should have different values
610 * Mandatory: VSF_TIMER_BASE_ONESHOT, VSF_TIMER_BASE_CONTINUES
611 */
616);
617
618#ifdef VSF_TIMER_CUSTOM_MODE_VALUES
619/* Check uniqueness among custom mode values using user-specified check mode */
621#endif
622
625 /* Mandatory modes - always included */
628 /* Standard Optional modes - only included when __VSF_TIMER_CFG_SUPPORT_STANDARD_OPTIONAL is enabled */
630#ifdef VSF_TIMER_CHANNEL_MODE_PWM
631 , VSF_TIMER_CHANNEL_MODE_PWM
632#endif
633#ifdef VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
634 , VSF_TIMER_CHANNEL_MODE_OUTPUT_COMPARE
635#endif
636#ifdef VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
637 , VSF_TIMER_CHANNEL_MODE_INPUT_CAPTURE
638#endif
639#ifdef VSF_TIMER_CHANNEL_MODE_ENCODER
640 , VSF_TIMER_CHANNEL_MODE_ENCODER
641#endif
642#ifdef VSF_TIMER_CHANNEL_MODE_ONE_PULSE
643 , VSF_TIMER_CHANNEL_MODE_ONE_PULSE
644#endif
645#ifdef VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
646 , VSF_TIMER_CHANNEL_MODE_HALL_SENSOR
647#endif
648#ifdef VSF_TIMER_BASE_COUNTER_UP
649 , VSF_TIMER_BASE_COUNTER_UP
650#endif
651#ifdef VSF_TIMER_BASE_COUNTER_DOWN
652 , VSF_TIMER_BASE_COUNTER_DOWN
653#endif
654#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED1
655 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED1
656#endif
657#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED2
658 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED2
659#endif
660#ifdef VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED3
661 , VSF_TIMER_BASE_COUNTER_CENTER_ALIGNED3
662#endif
663#endif
664 /* User-defined modes - appended by user configuration */
665#ifdef VSF_TIMER_CUSTOM_MODE_VALUES
666 , VSF_TIMER_CUSTOM_MODE_VALUES
667#endif
668);
669
670#undef VSF_TIMER_CHECK_UNIQUE_CHANNEL_MODE_MODES
671#undef VSF_TIMER_CHECK_UNIQUE_BASE_COUNTER_MODES
672#endif /* VSF_TIMER_CFG_MODE_CHECK_UNIQUE */
673
674/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
675
676#ifdef VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
677
678#ifdef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
679/* Check uniqueness among custom IRQ mask values using user-specified check mode */
681#endif
682
683/* Check uniqueness within vsf_timer_irq_mask_t enum */
684
685/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
686 * Mandatory: VSF_TIMER_IRQ_MASK_OVERFLOW
687 */
690 /* Mandatory IRQ masks - always included */
692 /* User-defined IRQ masks - appended by user configuration */
693#ifdef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
694 , VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
695#endif
696);
697#endif /* VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE */
698
699/* ==================== CTRL UNIQUENESS CHECKS ==================== */
700
701#ifdef VSF_TIMER_CFG_CTRL_CHECK_UNIQUE
702
703#ifdef VSF_TIMER_CUSTOM_CTRL_VALUES
704/* Check uniqueness among custom ctrl values using user-specified check mode */
705VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_TIMER_CFG_CTRL_CHECK_UNIQUE, VSF_TIMER_CUSTOM_CTRL_VALUES);
706#endif
707
708/* Check ctrl uniqueness - all ctrl values should have different values
709 * Placeholder: __VSF_TIMER_CTRL_DUMMY
710 */
712 VSF_TIMER_CFG_CTRL_CHECK_UNIQUE,
713 /* Placeholder ctrl - always included */
715 /* User-defined ctrls - appended by user configuration */
716#ifdef VSF_TIMER_CUSTOM_CTRL_VALUES
717 , VSF_TIMER_CUSTOM_CTRL_VALUES
718#endif
719);
720#endif /* VSF_TIMER_CFG_CTRL_CHECK_UNIQUE */
721
722/* ==================== CHANNEL CTRL UNIQUENESS CHECKS ==================== */
723
724#ifdef VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE
725
726#ifdef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
727/* Check uniqueness among custom channel ctrl values using user-specified check mode */
728VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE, VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES);
729#endif
730
731/* Check channel ctrl uniqueness - all channel ctrl values should have different values
732 * Placeholder: __VSF_TIMER_CHANNEL_CTRL_DUMMY
733 */
735 VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE,
736 /* Placeholder channel ctrl - always included */
738 /* User-defined channel ctrls - appended by user configuration */
739#ifdef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
740 , VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
741#endif
742);
743#endif /* VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE */
744
745/* ==================== SET COUNTER MODE UNIQUENESS CHECKS ==================== */
746
747#ifdef VSF_TIMER_CFG_SET_COUNTER_MODE_CHECK_UNIQUE
748
749/* Check set_counter mode uniqueness — optional members probed via #ifdef
750 * Placeholder: __VSF_TIMER_SET_COUNTER_MODE_DUMMY
751 * Optional (driver-defined): VSF_TIMER_SET_COUNTER_IMMEDIATE, VSF_TIMER_SET_COUNTER_PRELOAD
752 */
754 VSF_TIMER_CFG_SET_COUNTER_MODE_CHECK_UNIQUE,
756#ifdef VSF_TIMER_SET_COUNTER_IMMEDIATE
757 , VSF_TIMER_SET_COUNTER_IMMEDIATE
758#endif
759#ifdef VSF_TIMER_SET_COUNTER_PRELOAD
760 , VSF_TIMER_SET_COUNTER_PRELOAD
761#endif
762);
763#endif /* VSF_TIMER_CFG_SET_COUNTER_MODE_CHECK_UNIQUE */
764
765#undef VSF_TIMER_CFG_MODE_CHECK_UNIQUE
766#undef VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
767#undef VSF_TIMER_CFG_CTRL_CHECK_UNIQUE
768#undef VSF_TIMER_CFG_CHANNEL_CTRL_CHECK_UNIQUE
769#undef VSF_TIMER_CFG_SET_COUNTER_MODE_CHECK_UNIQUE
770#undef VSF_TIMER_CUSTOM_MODE_VALUES
771#undef VSF_TIMER_CUSTOM_IRQ_MASK_VALUES
772#undef VSF_TIMER_CUSTOM_CTRL_VALUES
773#undef VSF_TIMER_CUSTOM_CHANNEL_CTRL_VALUES
774
775#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 uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_timer.h:749
vsf_timer_irq_mask_t irq_mask
Definition timer.h:231
timer configuration
Definition vsf_template_timer.h:566
Definition vsf_template_timer.h:577
Definition vsf_template_timer.h:688
TIMER status information structure Contains the current status of TIMER operations.
Definition vsf_template_timer.h:739
#define VSF_TIMER_CFG_IRQ_MASK_CHECK_UNIQUE
Definition timer.c:309
#define VSF_TIMER_CFG_MODE_CHECK_UNIQUE
Definition timer.c:308
vk_av_control_value_t value
Definition vsf_audio.h:171
#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:516
@ VSF_TIMER_IRQ_MASK_OVERFLOW
Definition vsf_template_timer.h:517
@ VSF_TIMER_CHANNEL_MODE_BASE
Definition vsf_template_timer.h:308
@ VSF_TIMER_BASE_ONESHOT
Standard optional channel modes Note: These are standard optional features. This macro should NOT be ...
Definition vsf_template_timer.h:364
@ VSF_TIMER_BASE_CONTINUES
Definition vsf_template_timer.h:366
vsf_timer_ctrl_t
Predefined VSF TIMER control command that can be reimplemented in specific hal drivers....
Definition vsf_template_timer.h:601
@ __VSF_TIMER_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_timer.h:619
vsf_timer_set_counter_mode_t
Counter write mode for vsf_timer_set_counter().
Definition vsf_template_timer.h:725
@ __VSF_TIMER_SET_COUNTER_MODE_DUMMY
Definition vsf_template_timer.h:726
vsf_timer_channel_ctrl_t
Predefined VSF TIMER control command that can be reimplemented in specific hal drivers....
Definition vsf_template_timer.h:682
@ __VSF_TIMER_CHANNEL_CTRL_DUMMY
Dummy value for compilation.
Definition vsf_template_timer.h:683
Generated from commit: vsfteam/vsf@c3767bf