OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [kernel/] [v2_0/] [src/] [common/] [timer.cxx] - Blame information for rev 228

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//      common/timer.cxx
4
//
5
//      Timer class implementations
6
//
7
//==========================================================================
8
//####ECOSGPLCOPYRIGHTBEGIN####
9
// -------------------------------------------
10
// This file is part of eCos, the Embedded Configurable Operating System.
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under
14
// the terms of the GNU General Public License as published by the Free
15
// Software Foundation; either version 2 or (at your option) any later version.
16
//
17
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20
// for more details.
21
//
22
// You should have received a copy of the GNU General Public License along
23
// with eCos; if not, write to the Free Software Foundation, Inc.,
24
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25
//
26
// As a special exception, if other files instantiate templates or use macros
27
// or inline functions from this file, or you compile this file and link it
28
// with other works to produce a work based on this file, this file does not
29
// by itself cause the resulting work to be covered by the GNU General Public
30
// License. However the source code for this file must still be made available
31
// in accordance with section (3) of the GNU General Public License.
32
//
33
// This exception does not invalidate any other reasons why a work based on
34
// this file might be covered by the GNU General Public License.
35
//
36
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37
// at http://sources.redhat.com/ecos/ecos-license/
38
// -------------------------------------------
39
//####ECOSGPLCOPYRIGHTEND####
40
//==========================================================================
41
//#####DESCRIPTIONBEGIN####
42
//
43
// Author(s):   dsm
44
// Contributors:        dsm
45
// Date:        1998-06-11
46
// Purpose:     Clock class implementation
47
// Description: This file implements the Timer class which is derived from
48
//              the Alarm class to support uITRON type functionality
49
//
50
//####DESCRIPTIONEND####
51
//
52
//==========================================================================
53
 
54
#include <pkgconf/kernel.h>
55
 
56
#include <cyg/kernel/ktypes.h>         // base kernel types
57
#include <cyg/infra/cyg_trac.h>        // tracing macros
58
#include <cyg/infra/cyg_ass.h>         // assertion macros
59
 
60
#include <cyg/kernel/clock.hxx>
61
#include <cyg/kernel/timer.hxx>
62
 
63
#include <cyg/kernel/clock.inl>        // Clock inlines
64
 
65
// -------------------------------------------------------------------------
66
 
67
Cyg_Timer::Cyg_Timer()
68
{
69
}
70
 
71
Cyg_Timer::~Cyg_Timer()
72
{
73
    CYG_REPORT_FUNCTION();
74
 
75
    disable();
76
    counter = NULL;
77
}
78
 
79
// -------------------------------------------------------------------------
80
 
81
void
82
Cyg_Timer::initialize(
83
        Cyg_Counter    *c,
84
        cyg_alarm_fn   a,
85
        CYG_ADDRWORD   d,
86
        cyg_tick_count t,               // absolute time
87
        cyg_tick_count i,               // 0 => one shot, else repeating
88
        cyg_uint32     action           // (DISABLE | ENABLE)
89
        )
90
{
91
    CYG_REPORT_FUNCTION();
92
 
93
    counter  = c;
94
    alarm    = a;
95
    data     = d;
96
    trigger  = t;
97
    interval = i;
98
    enabled  = false;
99
 
100
    CYG_ASSERT(0 == (action & ~ENABLE), "unknown action");
101
 
102
    if(action & ENABLE)
103
        enable();
104
}
105
 
106
void
107
Cyg_Timer::activate(cyg_uint32 action)  // (DISABLE | ENABLE) [|RESET]
108
{
109
    // we must also disable the alarm when resetting it so as to remove it
110
    // from its queue, so that the enable afterwards places it on the right
111
    // queue instead of assuming that, being enabled, it's already there.
112
    // (if not enabling, the behaviour is unchanged and correct)
113
    if(!(action & ENABLE) || (action & RESET) )
114
        disable(); // otherwise, the enable below does nothing...
115
 
116
    if((action & RESET))
117
    {
118
        cyg_tick_count t;
119
        t = counter->current_value();
120
        trigger = t + interval;
121
    }
122
 
123
    if((action & ENABLE)) {
124
        enable(); // ...when it should put the timer on a new queue.
125
    }
126
}
127
 
128
// -------------------------------------------------------------------------
129
// EOF common/timer.cxx

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.