OpenCores
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
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v2_0/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
/v2_0/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();
}
/v2_0/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####

powered by: WebSVN 2.1.0

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