URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/rtos/ecos-2.0/packages/devs/watchdog/arm/at91/v2_0
- from Rev 27 to Rev 174
- ↔ Reverse comparison
Rev 27 → Rev 174
/cdl/watchdog_at91.cdl
0,0 → 1,133
# ==================================================================== |
# |
# watchdog_at91.cdl |
# |
# eCos watchdog for ARM AT91 driver configuration data |
# |
# ==================================================================== |
#####ECOSGPLCOPYRIGHTBEGIN#### |
## ------------------------------------------- |
## This file is part of eCos, the Embedded Configurable Operating System. |
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
## |
## eCos is free software; you can redistribute it and/or modify it under |
## the terms of the GNU General Public License as published by the Free |
## Software Foundation; either version 2 or (at your option) any later version. |
## |
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
## WARRANTY; without even the implied warranty of MERCHANTABILITY or |
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
## for more details. |
## |
## You should have received a copy of the GNU General Public License along |
## with eCos; if not, write to the Free Software Foundation, Inc., |
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
## |
## As a special exception, if other files instantiate templates or use macros |
## or inline functions from this file, or you compile this file and link it |
## with other works to produce a work based on this file, this file does not |
## by itself cause the resulting work to be covered by the GNU General Public |
## License. However the source code for this file must still be made available |
## in accordance with section (3) of the GNU General Public License. |
## |
## This exception does not invalidate any other reasons why a work based on |
## this file might be covered by the GNU General Public License. |
## |
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
## at http://sources.redhat.com/ecos/ecos-license/ |
## ------------------------------------------- |
#####ECOSGPLCOPYRIGHTEND#### |
# ==================================================================== |
######DESCRIPTIONBEGIN#### |
# |
# Author(s): tkoeller |
# Contributors: tkoeller |
# Date: 2000-05-05 |
# |
#####DESCRIPTIONEND#### |
# |
# ==================================================================== |
|
cdl_package CYGPKG_DEVICES_WATCHDOG_ARM_AT91 { |
parent CYGPKG_IO_WATCHDOG |
active_if CYGPKG_IO_WATCHDOG |
display "ARM AT91 watchdog driver" |
requires CYGPKG_HAL_ARM_AT91 |
requires CYGPKG_KERNEL |
hardware |
define_header devs_watchdog_arm_at91.h |
compile watchdog_at91.cxx |
implements CYGINT_WATCHDOG_HW_IMPLEMENTATIONS |
active_if CYGIMP_WATCHDOG_HARDWARE |
description " |
This package uses the watchdog device integrated |
in the ARM CPU to execute a predefined action if the |
application fails to call the reset function for |
longer than a given timeout interval." |
|
cdl_option CYGIMP_WATCHDOG_HARDWARE { |
parent CYGPKG_IO_WATCHDOG_IMPLEMENTATION |
display "Hardware watchdog" |
calculated 1 |
implements CYGINT_WATCHDOG_IMPLEMENTATIONS |
} |
|
cdl_option CYGNUM_DEVS_WATCHDOG_ARM_AT91_DESIRED_TMEOUT_MS { |
display "Desired timeout value" |
flavor data |
legal_values 1 to 2047 |
default_value 100 |
description " |
This parameter controls the watchdog timeout interval. |
Note that you may not get the exact value requested |
here, the timeout interval may have to be adjusted |
because of hardware limitations. The actual timeout |
used will be the smallest possible value that is not |
less than this parameter." |
} |
|
cdl_option CYGSEM_DEVS_WATCHDOG_ARM_AT91_RESET { |
display "Generate reset on watchdog expiration" |
flavor bool |
default_value 1 |
implements CYGINT_WATCHDOG_RESETS_ON_TIMEOUT |
description " |
Enabling this option changes the watchdog operation mode |
to generate a system reset upon expiration instead of |
invoking an application-defined action." |
} |
|
cdl_component CYGPKG_DEVICES_WATCHDOG_ARM_AT91_OPTIONS { |
display "AT91 watchdog build options" |
flavor none |
description " |
Package specific build options including control over |
compiler flags used only in building this package, |
and details of which tests are built." |
|
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AT91_CFLAGS_ADD { |
display "Additional compiler flags" |
flavor data |
no_define |
default_value { "" } |
description " |
This option modifies the set of compiler flags for |
building the watchdog device. These flags are used in addition |
to the set of global flags." |
} |
|
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AT91_CFLAGS_REMOVE { |
display "Suppressed compiler flags" |
flavor data |
no_define |
default_value { "" } |
description " |
This option modifies the set of compiler flags for |
building the watchdog device. These flags are removed from |
the set of global flags if present." |
} |
|
} |
} |
|
# EOF watchdog_at91.cdl |
/src/watchdog_at91.cxx
0,0 → 1,200
//========================================================================== |
// |
// devs/watchdog/arm/at91/watchdog_at91.cxx |
// |
// Watchdog implementation for ARM AT91 CPU |
// |
//========================================================================== |
//####ECOSGPLCOPYRIGHTBEGIN#### |
// ------------------------------------------- |
// This file is part of eCos, the Embedded Configurable Operating System. |
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
// |
// eCos is free software; you can redistribute it and/or modify it under |
// the terms of the GNU General Public License as published by the Free |
// Software Foundation; either version 2 or (at your option) any later version. |
// |
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
// WARRANTY; without even the implied warranty of MERCHANTABILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with eCos; if not, write to the Free Software Foundation, Inc., |
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
// |
// As a special exception, if other files instantiate templates or use macros |
// or inline functions from this file, or you compile this file and link it |
// with other works to produce a work based on this file, this file does not |
// by itself cause the resulting work to be covered by the GNU General Public |
// License. However the source code for this file must still be made available |
// in accordance with section (3) of the GNU General Public License. |
// |
// This exception does not invalidate any other reasons why a work based on |
// this file might be covered by the GNU General Public License. |
// |
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
// at http://sources.redhat.com/ecos/ecos-license/ |
// ------------------------------------------- |
//####ECOSGPLCOPYRIGHTEND#### |
//========================================================================== |
//#####DESCRIPTIONBEGIN#### |
// |
// Author(s): tkoeller |
// Contributors: tkoeller |
// Date: 2002-05-05 |
// Purpose: Watchdog class implementation |
// Description: Contains an implementation of the Watchdog class for use |
// with the ATMEL AT91 watchdog timer. |
// |
//####DESCRIPTIONEND#### |
// |
//========================================================================== |
|
#include <pkgconf/kernel.h> |
#include <pkgconf/infra.h> |
#include <pkgconf/kernel.h> |
#include <pkgconf/watchdog.h> |
#include <pkgconf/devs_watchdog_arm_at91.h> |
#include <cyg/infra/cyg_type.h> |
#include <cyg/infra/cyg_ass.h> |
#include <cyg/infra/cyg_trac.h> |
#include <cyg/hal/hal_io.h> |
#include <cyg/hal/plf_io.h> |
#include <cyg/hal/hal_diag.h> |
#include <cyg/io/watchdog.hxx> |
#if !defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) |
#include <cyg/hal/hal_platform_ints.h> |
#include <cyg/kernel/intr.hxx> |
#endif |
|
#define MCLK_FREQUENCY_KHZ 32768 |
#define MAX_TICKS 0x0000ffff |
#define BASE_TICKS (MCLK_FREQUENCY_KHZ * CYGNUM_DEVS_WATCHDOG_ARM_AT91_DESIRED_TMEOUT_MS) |
|
#if BASE_TICKS / 8 <= MAX_TICKS |
#define DIVIDER 0 |
#define DIV_FACTOR 8 |
#elif BASE_TICKS / 32 <= MAX_TICKS |
#define DIVIDER 1 |
#define DIV_FACTOR 32 |
#elif BASE_TICKS / 128 <= MAX_TICKS |
#define DIVIDER 2 |
#define DIV_FACTOR 128 |
#elif BASE_TICKS / 1024 <= MAX_TICKS |
#define DIVIDER 3 |
#define DIV_FACTOR 1024 |
#else |
#error Desired resolution beyond hardware capabilities |
#endif |
|
#define TICKS ((BASE_TICKS / DIV_FACTOR) | 0xfff) |
#define RESOLUTION ((cyg_uint64) (TICKS * DIV_FACTOR ) * 1000000 / MCLK_FREQUENCY_KHZ) |
|
|
|
#if defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) |
|
#define OMRVAL (AT91_WD_OMR_OKEY | AT91_WD_OMR_RSTEN | AT91_WD_OMR_WDEN) |
|
void |
Cyg_Watchdog::init_hw(void) |
{ |
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARGVOID(); |
resolution = RESOLUTION; |
CYG_REPORT_RETURN(); |
} |
|
#else /* defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) */ |
|
#define OMRVAL (AT91_WD_OMR_OKEY | AT91_WD_OMR_IRQEN | AT91_WD_OMR_WDEN) |
#define INT_PRIO 7 |
|
|
static void * |
operator new(size_t size) |
{ |
static cyg_uint8 buf[sizeof (Cyg_Interrupt)]; |
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARG1XV(size); |
CYG_ASSERTC(size == sizeof buf); |
CYG_REPORT_RETVAL(buf); |
return buf; |
} |
|
static cyg_uint32 |
isr(cyg_vector vector, CYG_ADDRWORD data) |
{ |
Cyg_Watchdog &wd = *(Cyg_Watchdog *) data; |
|
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARG2XV(vector, data); |
|
wd.trigger(); |
Cyg_Interrupt::acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG); |
CYG_REPORT_RETVAL(Cyg_Interrupt::HANDLED); |
return Cyg_Interrupt::HANDLED; |
} |
|
static Cyg_Interrupt * wdint; |
|
void |
Cyg_Watchdog::init_hw(void) |
{ |
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARGVOID(); |
|
resolution = RESOLUTION; |
wdint = new Cyg_Interrupt( |
CYGNUM_HAL_INTERRUPT_WATCHDOG, |
INT_PRIO, |
(CYG_ADDRWORD) this, |
isr, |
NULL |
); |
wdint->configure_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG, false, true); |
wdint->attach(); |
wdint->acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG); |
wdint->unmask_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG); |
CYG_REPORT_RETURN(); |
} |
|
#endif /* defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) */ |
|
|
|
/* |
* Reset watchdog timer. This needs to be called regularly to prevent |
* the watchdog from firing. |
*/ |
void |
Cyg_Watchdog::reset(void) |
{ |
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARGVOID(); |
|
/* Write magic code to reset the watchdog. */ |
HAL_WRITE_UINT32(AT91_WD + AT91_WD_CR, AT91_WD_CR_RSTKEY); |
CYG_REPORT_RETURN(); |
} |
|
/* |
* Start watchdog to generate a hardware reset |
* or interrupt when expiring. |
*/ |
void |
Cyg_Watchdog::start(void) |
{ |
CYG_REPORT_FUNCTION(); |
CYG_REPORT_FUNCARGVOID(); |
|
HAL_WRITE_UINT32(AT91_WD + AT91_WD_OMR, AT91_WD_OMR_OKEY); |
HAL_WRITE_UINT32( |
AT91_WD + AT91_WD_CMR, |
AT91_WD_CMR_CKEY | ((TICKS >> 10) & AT91_WD_CMR_HPCV) | DIVIDER |
); |
HAL_WRITE_UINT32(AT91_WD + AT91_WD_CR, AT91_WD_CR_RSTKEY); |
HAL_WRITE_UINT32(AT91_WD + AT91_WD_OMR, OMRVAL); |
CYG_REPORT_RETURN(); |
} |
/ChangeLog
0,0 → 1,36
2002-08-06 Thomas Koeller <thomas@koeller.dyndns.org> |
|
* Added watchdog driver for ARM AT91 board. |
|
//####ECOSGPLCOPYRIGHTBEGIN#### |
// ------------------------------------------- |
// This file is part of eCos, the Embedded Configurable Operating System. |
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
// |
// eCos is free software; you can redistribute it and/or modify it under |
// the terms of the GNU General Public License as published by the Free |
// Software Foundation; either version 2 or (at your option) any later version. |
// |
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
// WARRANTY; without even the implied warranty of MERCHANTABILITY or |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
// for more details. |
// |
// You should have received a copy of the GNU General Public License along |
// with eCos; if not, write to the Free Software Foundation, Inc., |
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
// |
// As a special exception, if other files instantiate templates or use macros |
// or inline functions from this file, or you compile this file and link it |
// with other works to produce a work based on this file, this file does not |
// by itself cause the resulting work to be covered by the GNU General Public |
// License. However the source code for this file must still be made available |
// in accordance with section (3) of the GNU General Public License. |
// |
// This exception does not invalidate any other reasons why a work based on |
// this file might be covered by the GNU General Public License. |
// |
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
// at http://sources.redhat.com/ecos/ecos-license/ |
// ------------------------------------------- |
//####ECOSGPLCOPYRIGHTEND#### |