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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [devs/] [watchdog/] [arm/] [aeb/] [v2_0/] [src/] [watchdog_aeb.cxx] - Blame information for rev 174

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//      devs/watchdog/arm/aeb/watchdog_aeb.cxx
4
//
5
//      Watchdog implementation for ARM AEB1 board (SHARP LH77790 CPU)
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):    jskov
44
// Contributors: jskov
45
// Date:         1999-09-01
46
// Purpose:      Watchdog class implementation
47
// Description:  Contains an implementation of the Watchdog class for use
48
//               with the SHARP LH77790 watchdog timer.
49
//
50
//####DESCRIPTIONEND####
51
//
52
//==========================================================================
53
 
54
#include <pkgconf/system.h>             // system configuration file
55
#include <pkgconf/watchdog.h>           // configuration for this package
56
#include <pkgconf/kernel.h>             // kernel config
57
 
58
#include <cyg/infra/cyg_trac.h>         // tracing macros
59
#include <cyg/kernel/instrmnt.h>        // instrumentation
60
 
61
#include <cyg/hal/hal_io.h>             // IO register access
62
 
63
#include <cyg/io/watchdog.hxx>          // watchdog API
64
 
65
// -------------------------------------------------------------------------
66
// Register definitions
67
#define CYGARC_REG_WATCHDOG_BASE        0xFFFFAC00
68
#define CYGARC_REG_WATCHDOG_WDCTLR      (CYGARC_REG_WATCHDOG_BASE+0x30)
69
#define CYGARC_REG_WATCHDOG_WDCNTR      (CYGARC_REG_WATCHDOG_BASE+0x34)
70
 
71
// Control register bits
72
#define CYGARC_REG_WATCHDOG_WDCTLR_EN        0x01 // enable
73
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_NMF   0x00 // non-maskable fiq
74
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_ER    0x04 // external reset
75
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR    0x06 // system reset
76
#define CYGARC_REG_WATCHDOG_WDCTLR_FRZ       0x08 // lock enable bit
77
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_MASK  0x70 // time out period
78
 
79
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17    0x00 // 2^17
80
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17_P  5242880 // = 5.2ms
81
 
82
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25    0x40 // 2^25
83
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P  1342177300 // = 1.3421773s
84
 
85
 
86
// -------------------------------------------------------------------------
87
// Constructor
88
 
89
void
90
Cyg_Watchdog::init_hw(void)
91
{
92
    CYG_REPORT_FUNCTION();
93
 
94
    // No HW init.
95
 
96
    resolution          = CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P;
97
 
98
    CYG_REPORT_RETURN();
99
}
100
 
101
// -------------------------------------------------------------------------
102
// Start the watchdog running.
103
 
104
void
105
Cyg_Watchdog::start()
106
{
107
    CYG_REPORT_FUNCTION();
108
 
109
    // Clear the watchdog counter.
110
    HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
111
 
112
    // Enable the watchdog (and lock/FRZ it).
113
    HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR,
114
                    (CYGARC_REG_WATCHDOG_WDCTLR_TOP_25
115
                     | CYGARC_REG_WATCHDOG_WDCTLR_FRZ
116
                     | CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR
117
                     | CYGARC_REG_WATCHDOG_WDCTLR_EN));
118
 
119
    CYG_REPORT_RETURN();
120
}
121
 
122
// -------------------------------------------------------------------------
123
// Reset watchdog timer. This needs to be called regularly to prevent
124
// the watchdog firing.
125
 
126
void
127
Cyg_Watchdog::reset()
128
{
129
    CYG_REPORT_FUNCTION();
130
 
131
    HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
132
 
133
    CYG_REPORT_RETURN();
134
}
135
 
136
#if 0
137
// -------------------------------------------------------------------------
138
// Action which will do a board reset. Application can register this
139
// action to get a board reset on watchdog timeout.
140
 
141
void
142
Cyg_Watchdog::reset_action(void)
143
{
144
    CYG_REPORT_FUNCTION();
145
 
146
    // Clear the watchdog counter.
147
    HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
148
 
149
    // Enable the watchdog with the smallest timeout.
150
    HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR,
151
                    (CYGARC_REG_WATCHDOG_WDCTLR_TOP_17
152
                     | CYGARC_REG_WATCHDOG_WDCTLR_FRZ
153
                     | CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR
154
                     | CYGARC_REG_WATCHDOG_WDCTLR_EN));
155
 
156
    CYG_REPORT_RETURN();
157
}
158
#endif
159
 
160
// -------------------------------------------------------------------------
161
// EOF watchdog_aeb.cxx

powered by: WebSVN 2.1.0

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