summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/mips/genmongoosev/timer/timer.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2001-05-22 23:07:09 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2001-05-22 23:07:09 +0000
commita355e3ea982d7bb8a8cb5a67f810c66cbfc78330 (patch)
treec6400f1b326f859d8bc027ce12e8a5bb78c953cc /c/src/lib/libbsp/mips/genmongoosev/timer/timer.c
parent2001-05-22 Greg Menke <gregory.menke@gsfc.nasa.gov> (diff)
downloadrtems-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.c37
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 */