summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/mvme162/timer
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1995-08-01 15:33:39 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1995-08-01 15:33:39 +0000
commitc6fb8e90960d4504018e61bbe2bf06ff7f116d72 (patch)
tree9270b61fb2eb654e71d35c1bec732f29a565773f /c/src/lib/libbsp/m68k/mvme162/timer
parentmoved ringbuf.h to a shared include directory (diff)
downloadrtems-c6fb8e90960d4504018e61bbe2bf06ff7f116d72.tar.bz2
updated mvme162 code from Misha (mms@eiscathq.irf.se)
Diffstat (limited to 'c/src/lib/libbsp/m68k/mvme162/timer')
-rw-r--r--c/src/lib/libbsp/m68k/mvme162/timer/timer.c40
-rw-r--r--c/src/lib/libbsp/m68k/mvme162/timer/timerisr.s1
2 files changed, 22 insertions, 19 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme162/timer/timer.c b/c/src/lib/libbsp/m68k/mvme162/timer/timer.c
index c000fadd28..5eb1493c90 100644
--- a/c/src/lib/libbsp/m68k/mvme162/timer/timer.c
+++ b/c/src/lib/libbsp/m68k/mvme162/timer/timer.c
@@ -31,41 +31,42 @@
* $Id$
*/
-
#include <rtems.h>
#include <bsp.h>
/* Periodic tick interval */
-#define TICK_INTERVAL 0x10000
-#define TIMER_INT_LEVEL 6
+#define TICK_INTERVAL 0x10000U
+#define TIMER_INT_LEVEL 6
-int Ttimer_val;
-rtems_boolean Timer_driver_Find_average_overhead;
+rtems_unsigned32 Ttimer_val;
+rtems_boolean Timer_driver_Find_average_overhead;
rtems_isr timerisr();
void Timer_initialize()
{
- (void) set_vector( timerisr, (VECTOR_BASE >> 28) * 0x10 + 0x8, 0 );
-
- Ttimer_val = 0; /* clear timer ISR count */
- lcsr->vector_base = 0x67800000; /* set vb, enable interrupts */
+ (void) set_vector( timerisr, VBR0 * 0x10 + 0x8, 0 );
+
+ Ttimer_val = 0; /* clear timer ISR count */
+ lcsr->vector_base |= MASK_INT; /* unmask VMEchip2 interrupts */
+ lcsr->intr_clear |= 0x01000000; /* clear pending interrupt */
lcsr->to_ctl = 0xE7; /* prescaler to 1 MHz (see Appendix A1) */
lcsr->timer_cmp_1 = TICK_INTERVAL;
- lcsr->timer_cnt_1 = 0; /* clear counter */
- lcsr->board_ctl |= 7; /* increment, reset-on-compare, clear-ovfl-cnt */
+ lcsr->timer_cnt_1 = 0; /* clear counter */
+ lcsr->board_ctl |= 7; /* increment, reset-on-compare, */
+ /* and clear-overflow-cnt */
- lcsr->intr_level[0] |= TIMER_INT_LEVEL; /* set int level */
- lcsr->intr_ena |= 0x01000000; /* enable tick timer 1 interrupt */
+ lcsr->intr_level[0] |= TIMER_INT_LEVEL; /* set int level */
+ lcsr->intr_ena |= 0x01000000; /* enable tick timer 1 interrupt */
}
-#define AVG_OVERHEAD 6 /* It typically takes 3.0 microseconds */
- /* (6 countdowns) to start/stop the timer. */
-#define LEAST_VALID 10 /* Don't trust a value lower than this */
+#define AVG_OVERHEAD 3U /* It typically takes 3.0 microseconds */
+ /* (3 countdowns) to start/stop the timer. */
+#define LEAST_VALID 10U /* Don't trust a value lower than this */
-int Read_timer()
+int Read_timer()
{
- unsigned long total;
+ rtems_unsigned32 total;
total = (Ttimer_val * TICK_INTERVAL) + lcsr->timer_cnt_1;
@@ -75,9 +76,10 @@ int Read_timer()
if ( total < LEAST_VALID )
return 0; /* below timer resolution */
- return (total-AVG_OVERHEAD); /* in musec units */
+ return (total-AVG_OVERHEAD) >> 1;
}
+
rtems_status_code Empty_function( void )
{
return RTEMS_SUCCESSFUL;
diff --git a/c/src/lib/libbsp/m68k/mvme162/timer/timerisr.s b/c/src/lib/libbsp/m68k/mvme162/timer/timerisr.s
index af31e4276b..5563d1fcd8 100644
--- a/c/src/lib/libbsp/m68k/mvme162/timer/timerisr.s
+++ b/c/src/lib/libbsp/m68k/mvme162/timer/timerisr.s
@@ -33,6 +33,7 @@ BEGIN_CODE
.set INTR_CLEAR_REG, 0xfff40074 | interrupt clear register
.set RELOAD, 0x01000000 | clear tick 1 interrupt
+ PUBLIC (Ttimer_val)
PUBLIC (timerisr)
SYM (timerisr):
move.l a0, -(a7) | save a0