forked from Imagelibrary/rtems
2003-02-14 Joel Sherrill <joel@OARcorp.com>
AMD a29k is obsolete. * Makefile.am: Removed reference. * a29k/.cvsignore, a29k/ChangeLog, a29k/Makefile.am, a29k/configure.ac, a29k/clock/.cvsignore, a29k/clock/Makefile.am, a29k/clock/ckinit.c, a29k/clock/clock.S, a29k/clock/clock.h, a29k/timer/.cvsignore, a29k/timer/Makefile.am, a29k/timer/timer.c, a29k/timer/timerisr.c: Removed.
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
2003-02-14 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
AMD a29k is obsolete.
|
||||
* Makefile.am: Removed reference.
|
||||
* a29k/.cvsignore, a29k/ChangeLog, a29k/Makefile.am, a29k/configure.ac,
|
||||
a29k/clock/.cvsignore, a29k/clock/Makefile.am, a29k/clock/ckinit.c,
|
||||
a29k/clock/clock.S, a29k/clock/clock.h, a29k/timer/.cvsignore,
|
||||
a29k/timer/Makefile.am, a29k/timer/timer.c, a29k/timer/timerisr.c:
|
||||
Removed.
|
||||
|
||||
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
|
||||
|
||||
@@ -13,7 +13,6 @@ shared/src/cache_manager.c
|
||||
SUBDIRS = @subdirs@
|
||||
|
||||
DIST_SUBDIRS = \
|
||||
a29k \
|
||||
hppa1.1 \
|
||||
i386 \
|
||||
i960 \
|
||||
@@ -22,6 +21,7 @@ mips \
|
||||
mips64orion \
|
||||
powerpc \
|
||||
sh \
|
||||
shared \
|
||||
sparc
|
||||
|
||||
include $(top_srcdir)/../../../../automake/subdirs.am
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
aclocal.m4
|
||||
autom4te*.cache
|
||||
config.cache
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
install-sh
|
||||
Makefile
|
||||
Makefile.in
|
||||
missing
|
||||
mkinstalldirs
|
||||
@@ -1,92 +0,0 @@
|
||||
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
|
||||
|
||||
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: AC_PREREQ(2.57).
|
||||
|
||||
2003-01-15 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* clock/Makefile.am: Eliminate *_O_FILES.
|
||||
Don't include @RTEMS_BSP@.cfg.
|
||||
* timer/Makefile.am: Ditto.
|
||||
|
||||
2002-12-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: Remove RTEMS_CHECK_BSP_CACHE.
|
||||
|
||||
2002-12-01 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: Add RTEMS_PROG_CCAS.
|
||||
|
||||
2002-10-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* .cvsignore: Reformat.
|
||||
Add autom4te*cache.
|
||||
Remove autom4te.cache.
|
||||
|
||||
2002-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* clock/Makefile.am: Use .$(OBJEXT) instead of .o.
|
||||
* timer/Makefile.am: Use .$(OBJEXT) instead of .o.
|
||||
|
||||
2002-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac:
|
||||
AC_INIT(package,_RTEMS_VERSION,_RTEMS_BUGS).
|
||||
AM_INIT_AUTOMAKE([no-define foreign 1.6]).
|
||||
* clock/Makefile.am: Remove AUTOMAKE_OPTIONS.
|
||||
* Makefile.am: Remove AUTOMAKE_OPTIONS.
|
||||
* timer/Makefile.am: Remove AUTOMAKE_OPTIONS.
|
||||
|
||||
2001-10-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* .cvsignore: Add autom4te.cache for autoconf > 2.52.
|
||||
* configure.in: Remove.
|
||||
* configure.ac: New file, generated from configure.in by autoupdate.
|
||||
|
||||
2001-02-19 Ralf Corsepius <corsepiu@faw.uni-ulm.de:
|
||||
|
||||
* clock/Makefile.am: Apply include_*HEADERS instead of H_FILES.
|
||||
|
||||
2000-11-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* Makefile.am: Use ... instead of RTEMS_TOPdir in ACLOCAL_AMFLAGS.
|
||||
|
||||
2000-11-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* Makefile.am: Switch to ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal.
|
||||
|
||||
2000-10-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* Makefile.am: ACLOCAL_AMFLAGS= -I $(RTEMS_TOPdir)/macros.
|
||||
Switch to GNU canonicalization.
|
||||
|
||||
2000-10-18 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
* ChangeLog: Corrected comment.
|
||||
|
||||
2000-10-18 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
* clock/ckinit.c: Removed commented out include of bsp.h.
|
||||
* timer/timer.c: Removed commented out include of bsp.h.
|
||||
|
||||
2000-09-25 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
* clock/ckinit.c: Removed include of <bsp.h>. Also switch to
|
||||
macros to get configuration data.
|
||||
* timer/timer.c: Removed include of <bsp.h>. Fixed comment
|
||||
that said 4650 (a mips part).
|
||||
|
||||
2000-09-22 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
* clock/clock.S: Commented out non-GNU assembly.
|
||||
|
||||
2000-09-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* clock/Makefile.am, timer/Makefile.am: Include compile.am
|
||||
|
||||
2000-08-10 Joel Sherrill <joel@OARcorp.com>
|
||||
|
||||
* ChangeLog: New file.
|
||||
@@ -1,10 +0,0 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
ACLOCAL_AMFLAGS = -I ../../../../../aclocal
|
||||
|
||||
SUBDIRS = clock timer
|
||||
|
||||
include $(top_srcdir)/../../../../../automake/subdirs.am
|
||||
include $(top_srcdir)/../../../../../automake/local.am
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,32 +0,0 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
|
||||
PGM = $(ARCH)/clock.rel
|
||||
|
||||
C_FILES = ckinit.c
|
||||
OBJS = $(C_FILES:%.c=$(ARCH)/%.$(OBJEXT))
|
||||
|
||||
noinst_HEADERS = clock.h
|
||||
|
||||
S_FILES = clock.S
|
||||
OBJS += $(S_FILES:%.S=$(ARCH)/%.$(OBJEXT))
|
||||
|
||||
include $(top_srcdir)/../../../../../automake/compile.am
|
||||
include $(top_srcdir)/../../../../../automake/lib.am
|
||||
|
||||
#
|
||||
# (OPTIONAL) Add local stuff here using +=
|
||||
#
|
||||
|
||||
$(PGM): $(OBJS)
|
||||
$(make-rel)
|
||||
|
||||
all-local: $(ARCH) $(OBJS) $(PGM)
|
||||
|
||||
.PRECIOUS: $(PGM)
|
||||
|
||||
EXTRA_DIST = Makefile ckinit.c clock.S clock.h
|
||||
|
||||
include $(top_srcdir)/../../../../../automake/local.am
|
||||
@@ -1,213 +0,0 @@
|
||||
/* ckinit.c
|
||||
*
|
||||
* This file provides a template for the clock device driver initialization.
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char _sccsid[] = "@(#)ckinit.c 03/15/96 1.1\n";
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
extern int CPU_CLOCK_RATE_MHZ; /* provided in bsp */
|
||||
|
||||
#define CLOCKS_PER_MICROSECOND ( CPU_CLOCK_RATE_MHZ ) /* equivalent to CPU clock speed in MHz */
|
||||
|
||||
void Clock_exit( void );
|
||||
rtems_isr Clock_isr( rtems_vector_number vector );
|
||||
|
||||
|
||||
/*
|
||||
* The interrupt vector number associated with the clock tick device
|
||||
* driver.
|
||||
*/
|
||||
|
||||
#define CLOCK_VECTOR 14
|
||||
|
||||
/*
|
||||
* Clock_driver_ticks is a monotonically increasing counter of the
|
||||
* number of clock ticks since the driver was initialized.
|
||||
*/
|
||||
|
||||
volatile rtems_unsigned32 Clock_driver_ticks;
|
||||
|
||||
|
||||
/*
|
||||
* These are set by clock driver during its init
|
||||
*/
|
||||
|
||||
rtems_device_major_number rtems_clock_major = ~0;
|
||||
rtems_device_minor_number rtems_clock_minor;
|
||||
|
||||
/*
|
||||
* The previous ISR on this clock tick interrupt vector.
|
||||
*/
|
||||
|
||||
rtems_isr_entry Old_ticker;
|
||||
|
||||
void Clock_exit( void );
|
||||
|
||||
static unsigned32 a29k_timer_rate = 0;
|
||||
|
||||
/*
|
||||
* Isr Handler
|
||||
*/
|
||||
|
||||
rtems_isr Clock_isr(
|
||||
rtems_vector_number vector
|
||||
)
|
||||
{
|
||||
/*
|
||||
* bump the number of clock driver ticks since initialization
|
||||
*
|
||||
* determine if it is time to announce the passing of tick as configured
|
||||
* to RTEMS through the rtems_clock_tick directive
|
||||
*
|
||||
* perform any timer dependent tasks
|
||||
*/
|
||||
|
||||
a29k_clear_timer();
|
||||
|
||||
Clock_driver_ticks += 1;
|
||||
|
||||
rtems_clock_tick();
|
||||
}
|
||||
|
||||
/* User callback shell (set from Clock_Control) */
|
||||
static void (*user_callback)(void);
|
||||
|
||||
rtems_isr User_Clock_isr(
|
||||
rtems_vector_number vector
|
||||
)
|
||||
{
|
||||
/* refresh the internal CPU timer */
|
||||
a29k_clear_timer();
|
||||
|
||||
if (user_callback)
|
||||
user_callback();
|
||||
}
|
||||
|
||||
/*
|
||||
* Install_clock
|
||||
*
|
||||
* Install a clock tick handler and reprograms the chip. This
|
||||
* is used to initially establish the clock tick.
|
||||
*/
|
||||
|
||||
void Install_clock(
|
||||
rtems_isr_entry clock_isr
|
||||
)
|
||||
{
|
||||
/*
|
||||
* Initialize the clock tick device driver variables
|
||||
*/
|
||||
|
||||
Clock_driver_ticks = 0;
|
||||
|
||||
/*
|
||||
* If ticks_per_timeslice is configured as non-zero, then the user
|
||||
* wants a clock tick.
|
||||
*/
|
||||
|
||||
if ( rtems_configuration_get_ticks_per_timeslice() ) {
|
||||
Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 );
|
||||
/*
|
||||
* Hardware specific initialize goes here
|
||||
*/
|
||||
|
||||
a29k_timer_rate = rtems_configuration_get_microseconds_per_tick() * CLOCKS_PER_MICROSECOND;
|
||||
a29k_init_timer( a29k_timer_rate );
|
||||
}
|
||||
|
||||
/*
|
||||
* Schedule the clock cleanup routine to execute if the application exits.
|
||||
*/
|
||||
|
||||
atexit( Clock_exit );
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up before the application exits
|
||||
*/
|
||||
|
||||
void Clock_exit( void )
|
||||
{
|
||||
if ( rtems_configuration_get_ticks_per_timeslice() ) {
|
||||
|
||||
/* a29k: turn off the timer interrupts */
|
||||
a29k_disable_timer();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clock_initialize
|
||||
*
|
||||
* Device driver entry point for clock tick driver initialization.
|
||||
*/
|
||||
|
||||
rtems_device_driver Clock_initialize(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *pargp
|
||||
)
|
||||
{
|
||||
Install_clock( Clock_isr );
|
||||
|
||||
/*
|
||||
* make major/minor avail to others such as shared memory driver
|
||||
*/
|
||||
|
||||
rtems_clock_major = major;
|
||||
rtems_clock_minor = minor;
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
rtems_device_driver Clock_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *pargp
|
||||
)
|
||||
{
|
||||
rtems_unsigned32 isrlevel;
|
||||
rtems_libio_ioctl_args_t *args = pargp;
|
||||
|
||||
if (args == 0)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* This is hokey, but until we get a defined interface
|
||||
* to do this, it will just be this simple...
|
||||
*/
|
||||
|
||||
if (args->command == rtems_build_name('I', 'S', 'R', ' '))
|
||||
{
|
||||
Clock_isr(CLOCK_VECTOR);
|
||||
}
|
||||
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
||||
{
|
||||
rtems_interrupt_disable( isrlevel );
|
||||
user_callback = (void (*)(void))args->buffer;
|
||||
(void) set_vector( User_Clock_isr, CLOCK_VECTOR, 1 );
|
||||
rtems_interrupt_enable( isrlevel );
|
||||
}
|
||||
|
||||
done:
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
;
|
||||
#if 0
|
||||
; .include "register.ah"
|
||||
.include "amd.ah"
|
||||
.include "pswmacro.ah"
|
||||
|
||||
.text
|
||||
; .equ IN,0x2000000
|
||||
.reg CLOCK,gr78
|
||||
.reg SECS,gr79
|
||||
.equ CPUCLK,16
|
||||
.equ RATE,100
|
||||
.reg it0,gr64
|
||||
.reg it1,gr65
|
||||
.reg v0,gr96
|
||||
timer_clear_sup:
|
||||
const it0,IN
|
||||
consth it0,IN
|
||||
mfsr it1,tmr
|
||||
andn it1,it1,it0
|
||||
mtsr tmr,it1
|
||||
const it0,RATE
|
||||
cplt it0,CLOCK,it0
|
||||
jmpf it0,carry
|
||||
add CLOCK,CLOCK,1
|
||||
iret
|
||||
carry:
|
||||
const CLOCK,0
|
||||
add SECS,SECS,1
|
||||
iret
|
||||
|
||||
.equ TICKS,(CPUCLK*1000000/RATE)
|
||||
; .equ IE,0x1000000
|
||||
timer_init_sup:
|
||||
const it0,TICKS
|
||||
consth it0,TICKS
|
||||
mtsr tmc,it0
|
||||
const it0,(IE|TICKS)
|
||||
consth it0,(IE|TICKS)
|
||||
mtsr tmr,it0
|
||||
const SECS,0
|
||||
const CLOCK,0
|
||||
iret
|
||||
|
||||
timer_get_sup:
|
||||
add gr96,SECS,0
|
||||
iret
|
||||
|
||||
timer_disable_sup:
|
||||
mfsr it0,ops
|
||||
const it1,TD
|
||||
consth it1,TD
|
||||
andn it0,it1,it0
|
||||
mtsr ops,it0
|
||||
iret
|
||||
#endif
|
||||
|
||||
.global _a29k_init_timer
|
||||
_a29k_init_timer:
|
||||
#if 0
|
||||
push msp,lr0
|
||||
const lr2,INIT_TIMER
|
||||
consth lr2,INIT_TIMER
|
||||
const lr3,timer_init_sup
|
||||
consth lr3,timer_init_sup
|
||||
const v0,__settrap
|
||||
consth v0,__settrap
|
||||
calli lr0,v0
|
||||
nop
|
||||
|
||||
const lr2,CLEAR_TIMER
|
||||
consth lr2,CLEAR_TIMER
|
||||
const lr3,timer_clear_sup
|
||||
consth lr3,timer_clear_sup
|
||||
const v0,__settrap
|
||||
consth v0,__settrap
|
||||
calli lr0,v0
|
||||
nop
|
||||
|
||||
const lr2,DISABLE_TIMER
|
||||
consth lr2,DISABLE_TIMER
|
||||
const lr3,timer_disable_sup
|
||||
consth lr3,timer_disable_sup
|
||||
const v0,__settrap
|
||||
consth v0,__settrap
|
||||
calli lr0,v0
|
||||
nop
|
||||
|
||||
const lr2,GET_TIMER
|
||||
consth lr2,GET_TIMER
|
||||
const lr3,timer_get_sup
|
||||
consth lr3,timer_get_sup
|
||||
const v0,__settrap
|
||||
consth v0,__settrap
|
||||
calli lr0,v0
|
||||
nop
|
||||
|
||||
asneq INIT_TIMER,gr1,gr1
|
||||
pop lr0,msp
|
||||
jmpi lr0
|
||||
nop
|
||||
#endif
|
||||
|
||||
.global _a29k_clear_timer
|
||||
_a29k_clear_timer:
|
||||
#if 0
|
||||
; asneq CLEAR_TIMER,gr1,gr1
|
||||
jmpi lr0
|
||||
nop
|
||||
#endif
|
||||
|
||||
.global _a29k_disable_timer
|
||||
_a29k_disable_timer:
|
||||
#if 0
|
||||
asneq DISABLE_TIMER,gr1,gr1
|
||||
jmpi lr0
|
||||
nop
|
||||
#endif
|
||||
|
||||
.global _a29k_get_timer
|
||||
_a29k_get_timer:
|
||||
#if 0
|
||||
asneq GET_TIMER,gr1,gr1
|
||||
jmpi lr0
|
||||
nop
|
||||
#endif
|
||||
@@ -1,7 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
extern void a29k_init_timer( unsigned32 timer_clock_interval );
|
||||
extern void a29k_disable_timer(void);
|
||||
extern void a29k_clear_timer(void);
|
||||
@@ -1,34 +0,0 @@
|
||||
## Process this file with autoconf to produce a configure script.
|
||||
##
|
||||
## $Id$
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([rtems-c-src-lib-libcpu-a29k],[_RTEMS_VERSION],[rtems-bugs@OARcorp.com])
|
||||
AC_CONFIG_SRCDIR([clock])
|
||||
RTEMS_TOP(../../../../..)
|
||||
AC_CONFIG_AUX_DIR(../../../../..)
|
||||
|
||||
RTEMS_CANONICAL_TARGET_CPU
|
||||
|
||||
AM_INIT_AUTOMAKE([no-define foreign 1.7.2])
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
RTEMS_ENABLE_BARE
|
||||
RTEMS_ENV_RTEMSBSP
|
||||
|
||||
RTEMS_CHECK_CPU
|
||||
RTEMS_CANONICAL_HOST
|
||||
|
||||
RTEMS_PROJECT_ROOT
|
||||
|
||||
RTEMS_PROG_CC_FOR_TARGET
|
||||
RTEMS_CANONICALIZE_TOOLS
|
||||
RTEMS_PROG_CCAS
|
||||
|
||||
RTEMS_CHECK_CUSTOM_BSP(RTEMS_BSP)
|
||||
|
||||
# Explicitly list all Makefiles here
|
||||
AC_CONFIG_FILES([Makefile
|
||||
clock/Makefile
|
||||
timer/Makefile])
|
||||
AC_OUTPUT
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,29 +0,0 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
|
||||
PGM = $(ARCH)/timer.rel
|
||||
|
||||
# NOTE: timerisr is normally an assembly file!!!
|
||||
|
||||
C_FILES = timer.c timerisr.c
|
||||
OBJS = $(C_FILES:%.c=$(ARCH)/%.$(OBJEXT))
|
||||
|
||||
include $(top_srcdir)/../../../../../automake/compile.am
|
||||
include $(top_srcdir)/../../../../../automake/lib.am
|
||||
|
||||
#
|
||||
# (OPTIONAL) Add local stuff here using +=
|
||||
#
|
||||
|
||||
$(PGM): $(OBJS)
|
||||
$(make-rel)
|
||||
|
||||
all-local: $(ARCH) $(OBJS) $(PGM)
|
||||
|
||||
.PRECIOUS: $(PGM)
|
||||
|
||||
EXTRA_DIST = Makefile timer.c timerisr.c
|
||||
|
||||
include $(top_srcdir)/../../../../../automake/local.am
|
||||
@@ -1,120 +0,0 @@
|
||||
/* timer.c
|
||||
*
|
||||
* This file manages the benchmark timer used by the RTEMS Timing Test
|
||||
* Suite. Each measured time period is demarcated by calls to
|
||||
* Timer_initialize() and Read_timer(). Read_timer() usually returns
|
||||
* the number of microseconds since Timer_initialize() exitted.
|
||||
*
|
||||
* NOTE: It is important that the timer start/stop overhead be
|
||||
* determined when porting or modifying this code.
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char _sccsid[] = "@(#)timer.c 05/07/96 1.4\n";
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#define CLOCKS_PER_MICROSECOND ( CPU_CLOCK_RATE_MHZ )
|
||||
#define TIMER_MAX_VALUE 0xffffffff
|
||||
|
||||
static unsigned32 read_timer( void )
|
||||
{
|
||||
return 0; /* do something with real hardware here */
|
||||
}
|
||||
|
||||
static rtems_boolean Timer_driver_Find_average_overhead;
|
||||
static unsigned32 Timer_initial_value = 0;
|
||||
|
||||
void Timer_initialize( void )
|
||||
{
|
||||
Timer_initial_value = read_timer();
|
||||
|
||||
/*
|
||||
* Somehow start the timer
|
||||
*/
|
||||
|
||||
/* Timer is always running */
|
||||
}
|
||||
|
||||
/*
|
||||
* The following controls the behavior of Read_timer().
|
||||
*
|
||||
* AVG_OVEREHAD is the overhead for starting and stopping the timer. It
|
||||
* is usually deducted from the number returned.
|
||||
*
|
||||
* LEAST_VALID is the lowest number this routine should trust. Numbers
|
||||
* below this are "noise" and zero is returned.
|
||||
*/
|
||||
|
||||
#define AVG_OVERHEAD 8 /* It typically takes X.X microseconds */
|
||||
/* (Y countdowns) to start/stop the timer. */
|
||||
/* This value is in cycles. */
|
||||
#define LEAST_VALID 1 /* Don't trust a clicks value lower than this */
|
||||
|
||||
int Read_timer( void )
|
||||
{
|
||||
unsigned64 clicks;
|
||||
unsigned32 total;
|
||||
|
||||
/*
|
||||
* Read the timer and see how many clicks it has been since we started.
|
||||
*/
|
||||
|
||||
clicks = read_timer(); /* XXX: read some HW here */
|
||||
if (clicks < Timer_initial_value)
|
||||
{
|
||||
clicks += TIMER_MAX_VALUE;
|
||||
}
|
||||
clicks -= Timer_initial_value;
|
||||
|
||||
/*
|
||||
* Total is calculated by taking into account the number of timer overflow
|
||||
* interrupts since the timer was initialized and clicks since the last
|
||||
* interrupts.
|
||||
*/
|
||||
#if 0 /* leave total in number of cycles */
|
||||
total = clicks / CLOCKS_PER_MICROSECOND;
|
||||
#else
|
||||
total = clicks;
|
||||
#endif
|
||||
|
||||
if ( Timer_driver_Find_average_overhead == 1 )
|
||||
return total; /* in # cycles units */
|
||||
else {
|
||||
if ( total < LEAST_VALID )
|
||||
return 0; /* below timer resolution */
|
||||
/*
|
||||
* leave total in cycles
|
||||
*/
|
||||
return (total - AVG_OVERHEAD);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Empty function call used in loops to measure basic cost of looping
|
||||
* in Timing Test Suite.
|
||||
*/
|
||||
|
||||
rtems_status_code Empty_function( void )
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
void Set_find_average_overhead(
|
||||
rtems_boolean find_flag
|
||||
)
|
||||
{
|
||||
Timer_driver_Find_average_overhead = find_flag;
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/* timerisr.s
|
||||
*
|
||||
* If required this ISR is used to bump a count of interval "overflow"
|
||||
* interrupts which have occurred since the timer was started. The
|
||||
* number of overflows is taken into account in the Read_timer()
|
||||
* routine if necessary.
|
||||
*
|
||||
* To reduce overhead this is best to be the "rawest" hardware interupt
|
||||
* handler you can write. This should be the only interrupt which can
|
||||
* occur during the measured time period.
|
||||
*
|
||||
* NOTE: This file is USUALLY in assembly and is LEAN AND MEAN.
|
||||
* Any code in this isr is pure overhead which can perturb
|
||||
* the accuracy of the Timing Test Suite.
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char _sccsid[] = "@(#)timerisr.c 03/15/96 1.1\n";
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
extern rtems_unsigned32 _Timer_interrupts;
|
||||
|
||||
void timerisr( void )
|
||||
{
|
||||
/*
|
||||
* _Timer_interrupts += TIMER_BETWEEN_OVERFLOWS (usually in microseconds)
|
||||
* return from interrupt
|
||||
*/
|
||||
}
|
||||
Reference in New Issue
Block a user