X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Ftimer.c;h=e7879fb8065fb12deaa76811d7f1bf77f9d898e9;hb=9ba9dcf2a59a952609e19154e11de3e2478cbf42;hp=85175224cdc37e03190872217590fd4d27938249;hpb=2a5698ac0ea139d09429b66e4aa785b82adb424b;p=bertos.git diff --git a/drv/timer.c b/drv/timer.c old mode 100755 new mode 100644 index 85175224..e7879fb8 --- a/drv/timer.c +++ b/drv/timer.c @@ -1,9 +1,34 @@ -/*! +/** * \file * * * \brief Hardware independent timer driver (implementation) @@ -14,6 +39,12 @@ /*#* *#* $Log$ + *#* Revision 1.32 2007/10/08 12:14:32 batt + *#* Fix some review issues. + *#* + *#* Revision 1.31 2006/07/19 12:56:26 bernie + *#* Convert to new Doxygen style. + *#* *#* Revision 1.30 2006/02/24 00:26:49 bernie *#* Fixes for CONFIG_KERNEL. *#* @@ -89,7 +120,7 @@ #endif -/*! +/** * \def CONFIG_TIMER_STROBE * * This is a debug facility that can be used to @@ -106,19 +137,19 @@ #endif -//! Master system clock (1 tick accuracy) +/// Master system clock (1 tick accuracy) volatile ticks_t _clock; #ifndef CONFIG_TIMER_DISABLE_EVENTS -/*! +/** * List of active asynchronous timers. */ REGISTER static List timers_queue; -/*! +/** * Add the specified timer to the software timer service queue. * When the delay indicated by the timer expires, the timer * device will execute the event associated with it. @@ -165,7 +196,7 @@ void timer_add(Timer *timer) } -/*! +/** * Remove a timer from the timer queue before it has expired. */ Timer *timer_abort(Timer *timer) @@ -216,7 +247,7 @@ void timer_delayTicks(ticks_t delay) #ifndef CONFIG_TIMER_DISABLE_UDELAY -/*! +/** * Busy wait until the specified amount of high-precision ticks have elapsed. * * \note This function is interrupt safe, the only @@ -243,7 +274,7 @@ void timer_busyWait(hptime_t delay) } } -/*! +/** * Wait for the specified amount of time (expressed in microseconds). * * \bug In AVR arch the maximum amount of time that can be used as @@ -263,7 +294,7 @@ void timer_delayHp(hptime_t delay) #endif /* CONFIG_TIMER_DISABLE_UDELAY */ -/*! +/** * Timer interrupt handler. Find soft timers expired and * trigger corresponding events. */ @@ -281,9 +312,16 @@ DEFINE_TIMER_ISR #ifndef CONFIG_TIMER_DISABLE_EVENTS Timer *timer; #endif + /* + * On systems sharing IRQ line and vector, this check is needed + * to ensure that IRQ is generated by timer source. + */ + if (!timer_hw_triggered()) + return; TIMER_STROBE_ON; + /* Perform hw IRQ handling */ timer_hw_irq(); /* Update the master ms counter */ @@ -317,7 +355,7 @@ DEFINE_TIMER_ISR MOD_DEFINE(timer) -/*! +/** * Initialize timer */ void timer_init(void)