source: rtems/c/src/lib/libcpu/powerpc/mpc860/timer/timer.c @ f817b02

4.104.114.84.95
Last change on this file since f817b02 was f817b02, checked in by Joel Sherrill <joel.sherrill@…>, on 11/04/99 at 18:05:09

The files in libcpu should not be directly dependent on any BSP. In
particular, using bsp.h, or getting information from the BSP which
should properly be obtained from RTEMS is forbidden. This is
necessary to strengthen the division between the BSP independent
parts of RTEMS and the BSPs themselves. This started after
comments and analysis by Ralf Corsepius <corsepiu@…>.
The changes primarily eliminated the need to include bsp.h and
peeking at BSP_Configuration. The use of Cpu_table in each
BSP needs to be eliminated.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*  timer.c
2 *
3 *  This file manages the interval timer on the PowerPC MPC860.
4 *  NOTE: This is not the PIT, but rather the RTEMS interval
5 *        timer
6 *  We shall use the bottom 32 bits of the timebase register,
7 *
8 *  The following was in the 403 version of this file. I don't
9 *  know what it means. JTM 5/19/98
10 *  NOTE: It is important that the timer start/stop overhead be
11 *        determined when porting or modifying this code.
12 *
13 *  Author: Jay Monkman (jmonkman@frasca.com)
14 *  Copywright (C) 1998 by Frasca International, Inc.
15 *
16 *  Derived from c/src/lib/libcpu/ppc/ppc403/timer/timer.c:
17 *
18 *  Author:     Andrew Bray <andy@i-cubed.co.uk>
19 *
20 *  COPYRIGHT (c) 1995 by i-cubed ltd.
21 *
22 *  To anyone who acknowledges that this file is provided "AS IS"
23 *  without any express or implied warranty:
24 *      permission to use, copy, modify, and distribute this file
25 *      for any purpose is hereby granted without fee, provided that
26 *      the above copyright notice and this notice appears in all
27 *      copies, and that the name of i-cubed limited not be used in
28 *      advertising or publicity pertaining to distribution of the
29 *      software without specific, written prior permission.
30 *      i-cubed limited makes no representations about the suitability
31 *      of this software for any purpose.
32 *
33 *  Derived from c/src/lib/libcpu/hppa1_1/timer/timer.c:
34 *
35 *  COPYRIGHT (c) 1989-1998.
36 *  On-Line Applications Research Corporation (OAR).
37 *  Copyright assigned to U.S. Government, 1994.
38 *
39 *  The license and distribution terms for this file may be
40 *  found in the file LICENSE in this distribution or at
41 *  http://www.OARcorp.com/rtems/license.html.
42 *
43 *  $Id$
44 */
45
46#include <rtems.h>
47#include <mpc860.h>
48
49extern rtems_cpu_table           Cpu_table;             /* owned by BSP */
50
51static volatile rtems_unsigned32 Timer_starting;
52static rtems_boolean Timer_driver_Find_average_overhead;
53
54/*
55 *  This is so small that this code will be reproduced where needed.
56 */
57static inline rtems_unsigned32 get_itimer(void)
58{
59   rtems_unsigned32 ret;
60
61   asm volatile ("mftb %0" : "=r" ((ret))); /* TBLO */
62
63   return ret;
64}
65
66void Timer_initialize(void)
67{
68  /* set interrupt level and enable timebase. This should never */
69  /*  generate an interrupt however. */
70  m860.tbscr |= M860_TBSCR_TBIRQ(4) | M860_TBSCR_TBE;
71 
72  Timer_starting = get_itimer();
73}
74
75int Read_timer(void)
76{
77  rtems_unsigned32 clicks;
78  rtems_unsigned32 total;
79
80  clicks = get_itimer();
81
82  total = clicks - Timer_starting;
83
84  if ( Timer_driver_Find_average_overhead == 1 )
85    return total;          /* in XXX microsecond units */
86
87  else {
88    if ( total < Cpu_table.timer_least_valid ) {
89      return 0;            /* below timer resolution */
90    }
91    return (total - Cpu_table.timer_average_overhead);
92  }
93}
94
95rtems_status_code Empty_function(void)
96{
97  return RTEMS_SUCCESSFUL;
98}
99
100void Set_find_average_overhead(rtems_boolean find_flag)
101{
102  Timer_driver_Find_average_overhead = find_flag;
103}
Note: See TracBrowser for help on using the repository browser.