X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Ftimer.h;h=bd7b1f7e8154cb1ef760cda37cd6b9c02e9f01dc;hb=b4e1c52676ca63fb01e49a26a3411838e5277d6a;hp=bcf1ac9d14d9ecde1c6020da3d722a123870fb88;hpb=1981202f8c3e005f0504137204ddef70fcbc824c;p=bertos.git diff --git a/drv/timer.h b/drv/timer.h index bcf1ac9d..bd7b1f7e 100755 --- a/drv/timer.h +++ b/drv/timer.h @@ -15,6 +15,27 @@ /*#* *#* $Log$ + *#* Revision 1.24 2005/04/11 19:10:28 bernie + *#* Include top-level headers from cfg/ subdir. + *#* + *#* Revision 1.23 2005/03/01 23:25:46 bernie + *#* Move event.h to mware/. + *#* + *#* Revision 1.22 2004/12/13 12:07:06 bernie + *#* DISABLE_IRQSAVE/ENABLE_IRQRESTORE: Convert to IRQ_SAVE_DISABLE/IRQ_RESTORE. + *#* + *#* Revision 1.21 2004/12/09 08:35:21 bernie + *#* Replace IPTR with iptr_t. + *#* + *#* Revision 1.20 2004/12/08 08:56:41 bernie + *#* Rename sigset_t to sigmask_t; Reformat. + *#* + *#* Revision 1.19 2004/12/08 08:30:37 bernie + *#* Convert to mtime_t; timer_minutes(): Remove. + *#* + *#* Revision 1.18 2004/11/16 23:09:52 bernie + *#* Disable timer_minutes() for targets with 16bit time_t. + *#* *#* Revision 1.17 2004/11/16 22:37:14 bernie *#* Replace IPTR with iptr_t. *#* @@ -65,17 +86,17 @@ #ifndef DRV_TIMER_H #define DRV_TIMER_H -#include "cpu.h" -#include "compiler.h" -#include #include +#include +#include +#include /*! Number of timer ticks per second. */ -#define TICKS_PER_SEC ((time_t)1000) +#define TICKS_PER_SEC ((mtime_t)1000) /* Function protos */ extern void timer_init(void); -extern void timer_delay(time_t time); +extern void timer_delay(mtime_t time); #ifndef CONFIG_TIMER_DISABLE_UDELAY extern void timer_udelay(utime_t utime); @@ -84,11 +105,7 @@ extern void timer_udelay(utime_t utime); #ifndef CONFIG_TIMER_DISABLE_EVENTS -#ifdef CONFIG_KERNEL - #include -#else - #include -#endif +#include /*! * The timer driver supports multiple synchronous timers @@ -99,10 +116,10 @@ extern void timer_udelay(utime_t utime); */ typedef struct Timer { - Node link; /*!< Link into timers queue */ - time_t delay; /*!< Timer delay in ms */ - time_t tick; /*!< Timer will expire at this tick */ - Event expire; /*!< Event to execute when the timer expires */ + Node link; /*!< Link into timers queue */ + mtime_t delay; /*!< Timer delay in ms */ + mtime_t tick; /*!< Timer will expire at this tick */ + Event expire; /*!< Event to execute when the timer expires */ } Timer; extern void timer_add(Timer *timer); @@ -111,7 +128,7 @@ extern Timer *timer_abort(Timer *timer); #if defined(CONFIG_KERN_SIGNALS) && CONFIG_KERN_SIGNALS /*! Set the timer so that it sends a signal when it expires */ -INLINE void timer_set_event_signal(Timer* timer, struct Process* proc, sigset_t sigs) +INLINE void timer_set_event_signal(Timer *timer, struct Process *proc, sigmask_t sigs) { event_initSignal(&timer->expire, proc, sigs); } @@ -119,20 +136,20 @@ INLINE void timer_set_event_signal(Timer* timer, struct Process* proc, sigset_t #endif /* CONFIG_KERN_SIGNALS */ /*! Set the timer so that it calls an user hook when it expires */ -INLINE void timer_set_event_softint(Timer* timer, Hook func, void* user_data) +INLINE void timer_set_event_softint(Timer *timer, Hook func, iptr_t user_data) { event_initSoftInt(&timer->expire, func, user_data); } /*! Set the timer delay (the time before the event will be triggered) */ -INLINE void timer_set_delay(Timer* timer, time_t delay) +INLINE void timer_set_delay(Timer *timer, mtime_t delay) { timer->delay = delay; } #endif /* CONFIG_TIMER_DISABLE_EVENTS */ -extern volatile time_t _clock; +extern volatile mtime_t _clock; /*! * \brief Return the system tick counter (expressed in ms) @@ -143,7 +160,7 @@ extern volatile time_t _clock; * The following code is safe: * * \code - * time_t tea_start_time = get_tick(); + * mtime_t tea_start_time = get_tick(); * * boil_water(); * @@ -151,21 +168,18 @@ extern volatile time_t _clock; * printf("Your tea, Sir.\n"); * \endcode * - * When the tick counter increments every millisecond and time_t + * When the tick counter increments every millisecond and mtime_t * is 32bit wide, the tick count will overflow every 49.7 days. * * \note This function must disable interrupts on 8/16bit CPUs because the * clock variable is larger than the processor word size and can't * be copied atomically. */ -INLINE time_t timer_ticks(void) +INLINE mtime_t timer_ticks(void) { - time_t result; - cpuflags_t flags; + mtime_t result; - DISABLE_IRQSAVE(flags); - result = _clock; - ENABLE_IRQRESTORE(flags); + ATOMIC(result = _clock); return result; } @@ -178,22 +192,9 @@ INLINE time_t timer_ticks(void) * * \sa timer_ticks */ -INLINE time_t timer_ticks_unlocked(void) +INLINE mtime_t timer_ticks_unlocked(void) { return _clock; } - -/*! - * Return the minutes passed since timer start. - * - * The uptime in minutes is computed directly from system tick counter. - * This value wraps around every 71582 minutes with a 32bit time_t. - */ -INLINE time_t timer_minutes(void) -{ - return timer_ticks() / (TICKS_PER_SEC * 60); -} - #endif /* DRV_TIMER_H */ -