diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-10-23 19:38:12 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-10-23 19:38:12 +0000 |
commit | 8d41236f6d4bdb59545f2052bff5de122ffebb72 (patch) | |
tree | 6e480d466b16bf1491e5cb6954d921a4d6f7936f /c/src/lib/libbsp/bfin/shared/timer/timer.c | |
parent | 2006-10-23 Joel Sherrill <joel@OARcorp.com> (diff) | |
download | rtems-8d41236f6d4bdb59545f2052bff5de122ffebb72.tar.bz2 |
2006-10-23 Joel Sherrill <joel@OARcorp.com>
* bfin/ChangeLog, bfin/Makefile.am, bfin/acinclude.m4,
bfin/configure.ac, bfin/eZKit533/.cvsignore, bfin/eZKit533/ChangeLog,
bfin/eZKit533/Makefile.am, bfin/eZKit533/README,
bfin/eZKit533/bsp_specs, bfin/eZKit533/configure,
bfin/eZKit533/configure.ac, bfin/eZKit533/preinstall.am,
bfin/eZKit533/times, bfin/eZKit533/console/console-io.c,
bfin/eZKit533/include/.cvsignore, bfin/eZKit533/include/bsp.h,
bfin/eZKit533/include/bspopts.h.in, bfin/eZKit533/include/coverhd.h,
bfin/eZKit533/include/tm27.h, bfin/eZKit533/startup/bspstart.c,
bfin/eZKit533/startup/linkcmds, bfin/shared/clock/clockdrv.c,
bfin/shared/clock/rtc.c, bfin/shared/clock/tod.h,
bfin/shared/console/console.c, bfin/shared/start/start.S,
bfin/shared/timer/timer.c: New files.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/bfin/shared/timer/timer.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/bfin/shared/timer/timer.c b/c/src/lib/libbsp/bfin/shared/timer/timer.c new file mode 100644 index 0000000000..9bbf6f7a83 --- /dev/null +++ b/c/src/lib/libbsp/bfin/shared/timer/timer.c @@ -0,0 +1,106 @@ +/* bspstart.c for eZKit533 + * + * 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. + * + * Copyright (c) 2006 by Atos Automacao Industrial Ltda. + * written by Alain Schaefer <alain.schaefer@easc.ch> + * and Antonio Giovanini <antonio@atos.com.br> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + + +#include <rtems.h> +#include <bsp.h> + + +uint32_t Timer_interrupts; +rtems_boolean Timer_driver_Find_average_overhead; + +/* + * Timer_initialize + * + * Blackfin processor has a counter for clock cycles. + */ +void Timer_initialize( void ) +{ + + /*reset counters*/ + asm ("R2 = 0;"); + asm ("CYCLES = R2;"); + asm ("CYCLES2 = R2;"); + /*start counters*/ + asm ("R2 = SYSCFG;"); + asm ("BITSET(R2,1);"); + asm ("SYSCFG = R2"); + +} + +/* + * 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 0 /* It typically takes X.X microseconds */ + /* (Y countdowns) to start/stop the timer. */ + /* This value is in microseconds. */ +#define LEAST_VALID 1 /* Don't trust a clicks value lower than this */ + +int Read_timer( void ) +{ + uint32_t clicks; + uint32_t total; + register int *cycles asm ("R2"); + + /* stop counter */ + asm("R2 = SYSCFG;"); + asm("BITCLR(R2,1);"); + asm("SYSCFG = R2;"); + asm("R2 = CYCLES;"); + + + clicks = cycles; /* Clock cycles */ + + /* converting to microseconds */ + total = clicks / (CCLK/1000000); + + if ( Timer_driver_Find_average_overhead == 1 ) + return total; /* in XXX microsecond units */ + else { + if ( total < LEAST_VALID ) + return 0; /* below timer resolution */ + /* + * Somehow convert total into microseconds + */ + 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; +} |