diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-05-22 23:07:09 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-05-22 23:07:09 +0000 |
commit | a355e3ea982d7bb8a8cb5a67f810c66cbfc78330 (patch) | |
tree | c6400f1b326f859d8bc027ce12e8a5bb78c953cc /c/src/lib/libbsp/mips/genmongoosev/timer/timer.c | |
parent | 2001-05-22 Greg Menke <gregory.menke@gsfc.nasa.gov> (diff) | |
download | rtems-a355e3ea982d7bb8a8cb5a67f810c66cbfc78330.tar.bz2 |
2001-05-22 Greg Menke <gregory.menke@gsfc.nasa.gov>
* Assisted in design and debug by Joel Sherrill <joel@OARcorp.com>.
* clock/clockdrv.c, console/conscfg.c: Corrected.
* include/bsp.h: Support for tm27 and addition of CPU_CLOCK_RATE.
* startup/bspstart.c: Properly set initial status register and
pending interrupts.
* timer/timer.c: Works now.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/mips/genmongoosev/timer/timer.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/c/src/lib/libbsp/mips/genmongoosev/timer/timer.c b/c/src/lib/libbsp/mips/genmongoosev/timer/timer.c index 154ab66230..16c6ba20cb 100644 --- a/c/src/lib/libbsp/mips/genmongoosev/timer/timer.c +++ b/c/src/lib/libbsp/mips/genmongoosev/timer/timer.c @@ -37,20 +37,21 @@ void Timer_initialize() * the compare register is set to the maximum value. */ - MONGOOSEV_WRITE_REGISTER( - TIMER_BASE, - MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, - 0xffffffff - ); - MONGOOSEV_WRITE_REGISTER( - TIMER_BASE, - MONGOOSEV_TIMER_CONTROL_REGISTER, - MONGOOSEV_TIMER_CONTROL_COUNTER_ENABLE - ); + MONGOOSEV_WRITE_REGISTER( TIMER_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0); + + MONGOOSEV_WRITE_REGISTER( TIMER_BASE, + MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, + 0xffffffff ); + + MONGOOSEV_WRITE_REGISTER( TIMER_BASE, + MONGOOSEV_TIMER_CONTROL_REGISTER, + MONGOOSEV_TIMER_CONTROL_COUNTER_ENABLE ); + } #define AVG_OVERHEAD 0 /* It typically takes N instructions */ /* to start/stop the timer. */ + #define LEAST_VALID 1 /* Don't trust a value lower than this */ /* mongoose-v can count cycles. :) */ #include <bspIo.h> @@ -61,13 +62,16 @@ int Read_timer() rtems_unsigned32 total; rtems_unsigned32 tcr; - clicks = MONGOOSEV_READ_REGISTER( - TIMER_BASE, - MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER - ); + clicks = MONGOOSEV_READ_REGISTER( TIMER_BASE, + MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER ); total = 0xffffffff - clicks; tcr = MONGOOSEV_READ_REGISTER( TIMER_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER ); + + MONGOOSEV_WRITE_REGISTER( TIMER_BASE, + MONGOOSEV_TIMER_CONTROL_REGISTER, + 0 ); + if ( tcr & MONGOOSEV_TIMER_CONTROL_TIMEOUT ) printk( "MG5 timer overran\n" ); @@ -77,7 +81,7 @@ int Read_timer() if ( total < LEAST_VALID ) return 0; /* below timer resolution */ - return total - AVG_OVERHEAD; + return (total - AVG_OVERHEAD) / CPU_CLOCK_RATE_MHZ; } rtems_status_code Empty_function( void ) @@ -91,3 +95,6 @@ void Set_find_average_overhead( { Timer_driver_Find_average_overhead = find_flag; } + + +/* eof */ |