X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Ftimer.c;h=3afe03d6be8080f06715a2c11f263938bdc64f30;hb=77c1d6ba65a199f60faa0e0a68e63ef0eb87677c;hp=bf65778db7df61918ceba16d0586505b02b3f1c9;hpb=fc978885d252a546f65e0e6691b81999dd03ff4f;p=bertos.git diff --git a/drv/timer.c b/drv/timer.c old mode 100755 new mode 100644 index bf65778d..3afe03d6 --- a/drv/timer.c +++ b/drv/timer.c @@ -1,7 +1,32 @@ -/*! +/** * \file * @@ -14,6 +39,21 @@ /*#* *#* $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. + *#* + *#* Revision 1.29 2006/02/17 22:24:07 bernie + *#* Add MOD_CHECK() checks. + *#* + *#* Revision 1.28 2006/02/10 12:32:52 bernie + *#* Update Copyright year. + *#* *#* Revision 1.27 2005/11/27 03:04:08 bernie *#* Move test code to timer_test.c; Add OS_HOSTED support. *#* @@ -43,6 +83,7 @@ #include #include #include +#include #include /* @@ -69,12 +110,17 @@ #include #endif -#if CONFIG_KERNEL && CONFIG_KERN_SIGNALS - #include +#if CONFIG_KERNEL + #include + #if CONFIG_KERN_SIGNALS + #include /* sig_wait(), sig_check() */ + #include /* proc_current() */ + #include /* BV() */ + #endif #endif -/*! +/** * \def CONFIG_TIMER_STROBE * * This is a debug facility that can be used to @@ -91,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. @@ -144,13 +190,13 @@ void timer_add(Timer *timer) } /* Enqueue timer request into the list */ - INSERTBEFORE(&timer->link, &node->link); + INSERT_BEFORE(&timer->link, &node->link); IRQ_RESTORE(flags); } -/*! +/** * Remove a timer from the timer queue before it has expired. */ Timer *timer_abort(Timer *timer) @@ -164,8 +210,8 @@ Timer *timer_abort(Timer *timer) #endif /* CONFIG_TIMER_DISABLE_EVENTS */ -/*! - * Wait for the specified amount of time (expressed in ms). +/** + * Wait for the specified amount of timer ticks. */ void timer_delayTicks(ticks_t delay) { @@ -179,7 +225,7 @@ void timer_delayTicks(ticks_t delay) ASSERT(!sig_check(SIG_SINGLE)); timer_set_event_signal(&t, proc_current(), SIG_SINGLE); - timer_set_delay(&t, delay); + timer_setDelay(&t, delay); timer_add(&t); sig_wait(SIG_SINGLE); @@ -201,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 @@ -228,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 @@ -248,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. */ @@ -266,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 */ @@ -300,8 +353,9 @@ DEFINE_TIMER_ISR TIMER_STROBE_OFF; } +MOD_DEFINE(timer) -/*! +/** * Initialize timer */ void timer_init(void) @@ -315,4 +369,6 @@ void timer_init(void) _clock = 0; timer_hw_init(); + + MOD_INIT(timer); }