]> rtime.felk.cvut.cz Git - lincan.git/blob - embedded/arch/generic/defines/lt_timer.h
Merge branch 'master' into can-usb1
[lincan.git] / embedded / arch / generic / defines / lt_timer.h
1 #ifndef _LT_TIMER_H
2 #define _LT_TIMER_H
3
4 #include <types.h>
5 #include <system_def.h>
6 #include <cpu_def.h>
7 #include <lt_timer_types.h>
8
9 //timers
10
11 #ifndef LT_TIMER_VAR_LOC
12 #define LT_TIMER_VAR_LOC
13 #endif
14
15 static lt_ticks_t LT_TIMER_VAR_LOC last_ticks;
16 static lt_mstime_t LT_TIMER_VAR_LOC actual_msec; 
17
18 /* Declaration of ulan light timers */
19
20 #define lt_get_msbase()     (1000/SYS_TIMER_HZ)         /* in ms */
21 #define lt_get_ticks()      (get_sys_timer_ticks())
22
23 static inline void
24 lt_mstime_update()
25 {
26   lt_ticks_t LT_TIMER_VAR_LOC act_ticks;
27   lt_mstime_t LT_TIMER_VAR_LOC msec_diff;
28
29   act_ticks=lt_get_ticks();
30   msec_diff=((lt_tidiff_t)(act_ticks-last_ticks))*lt_get_msbase();
31   last_ticks=act_ticks;
32
33   actual_msec+=msec_diff;
34 }
35
36
37 #define LT_TIMER_DEC(cust_prefix) \
38 \
39 extern lt_mstime_t LT_TIMER_VAR_LOC cust_prefix##_last_expired; \
40 static inline void \
41 cust_prefix##_init() \
42 {\
43   lt_mstime_update();\
44   cust_prefix##_last_expired=actual_msec;\
45 }\
46 static inline int \
47 cust_prefix##_expired(lt_mstime_t expiration) \
48 {\
49   lt_mstime_update();\
50   \
51   if ((lt_msdiff_t)(actual_msec-cust_prefix##_last_expired)>=expiration) {\
52     cust_prefix##_last_expired=actual_msec;\
53     return 1;\
54   }\
55   \
56   return 0;\
57 }
58
59 #define LT_TIMER_IMP(cust_prefix) \
60 \
61 lt_mstime_t LT_TIMER_VAR_LOC cust_prefix##_last_expired; \
62
63
64 #endif /* _LT_TIMER_H */