blob: f5a13e1962a290d6630c20fd3e81178fbfdd6497 [file] [log] [blame]
/******************************************************************************
*
* Copyright 2013 Altera Corporation. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __ALT_WDOG_H__
#define __ALT_WDOG_H__
#include "hwlib.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*! \addtogroup WDOG_MGR The Watchdog Timer Manager API
*
* This module defines the Watchdog Timer Manager API for accessing, configuring, and
* controlling the HPS Watchdog Timer resources.
*
*
A typical initialization might be:
\verbatim
ALT_STATUS_CODE ret;
ret = alt_wdog_int_clear(ALT_CPU_WATCHDOG);
if (ret == ALT_E_SUCCESS) {ret = alt_wdog_counter_set(ALT_CPU_WATCHDOG, 0x7FFFFFFF); }
if (ret == ALT_E_SUCCESS) {ret = alt_wdog_core_prescaler_set(0x80); }
if (ret == ALT_E_SUCCESS) {ret = alt_wdog_response_mode_set(ALT_CPU_WATCHDOG, ALT_WDOG_TIMER_MODE_FREERUN); }
if (ret == ALT_E_SUCCESS) {ret = alt_wdog_int_enable(ALT_CPU_WATCHDOG); }
if (ret == ALT_E_SUCCESS) {ret = alt_wdog_start(ALT_CPU_WATCHDOG); }
\endverbatim
Then periodically (before it runs out) call this function to restart the watchdog:
\verbatim
alt_wdog_reset(ALT_CPU_WATCHDOG);
\endverbatim
If the interrupt is enabled in the interrupt manager and is triggered, it can be
cleared like this:
\verbatim
alt_wdog_int_clear(ALT_CPU_WATCHDOG);
\endverbatim
If the interrupt is not enabled in the interrupt manager, you can still poll to
see if it hit zero and clear any pending interrupts like this:
\verbatim
alt_wdog_int_if_pending_clear(ALT_CPU_WATCHDOG);
\endverbatim
*
* @{
*/
/******************************************************************************/
/*!
* This type definition enumerates the names of the timers managed by
* the Watchdog Timers Manager.
*/
typedef enum ALT_WDOG_TIMER_e {
/* OSC1 Clock Group */
/*!
* \b ALT_CPU_WATCHDOG - Each CPU core has its own watchdog timer, which is
* clocked by PERIPHCLK. Can be loaded with any 32-bit counter
* value, not limited to powers of two, and it has an 8-bit prescaler.
* This timer also has a pause-enable input that can allow other HW
* to freeze the countdown.
*/
ALT_WDOG_CPU,
/* OSC1 Clock Group */
/*!
* \b watchdog_timer0 - Connected to the L4_OSC1 bus clocked by osc1_clk.
* Counter values are limited to powers of two between 15 and 31
* and there is no prescaler.
*/
ALT_WDOG0,
/*!
* \b watchdog_timer1 - Connected to the L4_OSC1 bus clocked by osc1_clk.
* Counter values are limited to powers of two between 15 and 31
* and there is no prescaler.
*/
ALT_WDOG1,
/*!
* \b watchdog_init_timer0 - This is for the initial timout only (not
* necessarily immediately after system restart), watchdog_timer0 is then
* used for all subsequent timeouts. Connected to the L4_OSC1 bus clocked
* by osc1_clk.
* Counter values are limited to powers of two between 15 and 31 and
* there is no prescaler.
*/
ALT_WDOG0_INIT,
/*!
* \b watchdog_init_timer1 - This is for the initial timout only (not
* necessarily immediately after system restart), watchdog_timer1 is then
* used for all subsequent timeouts. Connected to the L4_OSC1 bus clocked
* by osc1_clk.
* Counter values are limited to powers of two between 15 and 31 and
* there is no prescaler.
*/
ALT_WDOG1_INIT
} ALT_WDOG_TIMER_t;
/******************************************************************************/
/*!
* This type definition enumerates the encoded countdown values that \b
* ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL, and \b ALT_WATCHDOG1_INITIAL
* can be set to use.
*/
typedef enum ALT_WDOG_TIMEOUT_e {
/*!
* \b ALT_WDOG_TIMEOUT64K - Timeout = 65,536 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT64K,
/*!
* \b ALT_WDOG_TIMEOUT128K - Timeout = 131,072 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT128K,
/*!
* \b ALT_WDOG_TIMEOUT256K - Timeout = 262,144 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT256K,
/*!
* \b ALT_WDOG_TIMEOUT512K - Timeout = 524,288 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT512K,
/*!
* \b ALT_WDOG_TIMEOUT1M - Timeout = 1,048,576 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT1M,
/*!
* \b ALT_WDOG_TIMEOUT2M - Timeout = 2,097,152 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT2M,
/*!
* \b ALT_WDOG_TIMEOUT4M - Timeout = 4,194,304 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT4M,
/*!
* \b ALT_WDOG_TIMEOUT8M - Timeout = 8,388,608 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT8M,
/*!
* \b ALT_WDOG_TIMEOUT16M - Timeout = 16,777,216 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT16M,
/*!
* \b ALT_WDOG_TIMEOUT32M - Timeout = 33,554,432 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT32M,
/*!
* \b ALT_WDOG_TIMEOUT64M - Timeout = 67,108,864 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT64M,
/*!
* \b ALT_WDOG_TIMEOUT128M - Timeout = 134,217,728 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT128M,
/*!
* \b ALT_WDOG_TIMEOUT256M - Timeout = 268,435,456 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT256M,
/*!
* \b ALT_WDOG_TIMEOUT512M - Timeout = 536,870,912 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT512M,
/*!
*
* \b ALT_WDOG_TIMEOUT1G - Timeout = 1,073,741,824 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT1G,
/*!
* \b ALT_WDOG_TIMEOUT2G - Timeout = 2,147,483,648 osc1_clk periods.
*/
ALT_WDOG_TIMEOUT2G
} ALT_WDOG_TIMEOUT_t;
/******************************************************************************/
/*!
* This type definition enumerates the reset types that the watchdog
* timers can be set to trigger.
*/
typedef enum ALT_WDOG_RESET_TYPE_e {
/*!
* \b Reset - For \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL,
* and \b ALT_WATCHDOG1_INITIAL, if the counter reaches zero without being
* reset, generate a system-wide warm reset request.
* This is the default mode out of reset. \n For \b ALT_CPU_WATCHDOG, no
* interrupt is triggered and a reset request is asserted. The response
* to the reset request is set in the reset controller block and may
* not automatically trigger a system reset.
*/
ALT_WDOG_WARM_RESET,
/*!
* \b Interrupt_First - When the counter reaches zero without being
* reset, generate an interrupt. For \b ALT_WATCHDOG0, \b
* ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL, and \b ALT_WATCHDOG1_INITIAL, if the
* interrupt is not cleared by the time a second timeout occurs, then
* generate a system warm reset request. \n For \b ALT_CPU_WATCHDOG, the
* interrupt is triggered and a \b WDRESETREQ
* reset request is asserted. The response to the interrupt and the reset
* request is set in the interrupt and reset controller blocks and may
* not automatically trigger a system reset.
*/
ALT_WDOG_INT_THEN_RESET,
/*!
* \b Timer_mode_oneshot - The \b ALT_CPU_WATCHDOG timer has the capability
* to not only operate as a watchdog timer, but also to operate as a
* general-purpose countdown timer. This selection specifies the \b
* ALT_CPU_WATCHDOG runs
* in one-shot timer mode, and can optionally trigger an interrupt when
* the counter reaches zero without being reset. This
* is the default selection for \b ALT_CPU_WATCHDOG out of reset. \n
* This selection has no meaning for \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b
* ALT_WATCHDOG0_INITIAL, and \b ALT_WATCHDOG1_INITIAL.
*/
ALT_WDOG_TIMER_MODE_ONESHOT,
/*!
* \b Timer_mode_freerun - The \b ALT_CPU_WATCHDOG timer has the capability
* to not only operate as a watchdog timer, but also to operate as a
* general-purpose countdown timer. This selection specifies the \b
* ALT_CPU_WATCHDOG in
* free-run or wraparound timer mode, and can optionally trigger an
* interrupt when the counter reaches zero without being reset. \n
* This selection has no meaning for \b
* ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL, and \b ALT_WATCHDOG1_INITIAL.
*/
ALT_WDOG_TIMER_MODE_FREERUN
} ALT_WDOG_RESET_TYPE_t;
/******************************************************************************/
/*! \addtogroup WDOG_STATUS Watchdog Timer Enable, Disable, Restart, Status
*
* This functional group contains the basic functions to control and manage
* the watchdog timers.
*
* @{
*/
/******************************************************************************/
/*!
* Initialize the watchdog timer module before use
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
*/
ALT_STATUS_CODE alt_wdog_init(void);
/******************************************************************************/
/*!
* Uninitialize the watchdog timer module & return to reset state
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
*/
ALT_STATUS_CODE alt_wdog_uninit(void);
/******************************************************************************/
/*!
* Stop the specified watchdog timer. \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b
* ALT_WATCHDOG0_INITIAL and \b ALT_WATCHDOG1_INITIAL cannot be stopped
* once started.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Tried to stop an invalid watchdog timer.
*/
ALT_STATUS_CODE alt_wdog_stop(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Start the specified watchdog timer.
*
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Tried to enable an invalid watchdog timer.
*/
ALT_STATUS_CODE alt_wdog_start(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns whether the specified watchdog timer is currently running or not.
*
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval TRUE The timer is currently running.
* \retval FALSE The timer is currently not running.
*/
bool alt_wdog_tmr_is_enabled(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Reloads the counter countdown value, clears the timer interrupt, and
* restarts the watchdog timer. User can reset the timer at any time before
* timeout. This is also known as kicking, petting, feeding, waking, or
* walking the watchdog. \n If the timer is reset while stopped, it remains
* stopped, the timer reset value is reloaded and the countdown will start
* from there when it is started. The timer configuration is retained.
*
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Tried to reset an invalid watchdog timer.
*/
ALT_STATUS_CODE alt_wdog_reset(ALT_WDOG_TIMER_t tmr_id);
/*! @} */
/******************************************************************************/
/*! \addtogroup WDOG_COUNTERS Watchdog Timer Counter Configuration
*
*
* This functional group implements setting, configuring and reading
* the counters of the watchdog timers.
*
* @{
*/
/******************************************************************************/
/*! Sets the countdown value of the specified timer. This is a regular value
* for \b ALT_CPU_WATCHDOG. For tmr_id = \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b
* ALT_WATCHDOG0_INITIAL or \b ALT_WATCHDOG1_INITIAL however, this is an encoded
* power-of-two value such that 2**(16 + val). \n
* If this value is set before the watchdog timer is started, then this
* value is used from the start. If this value is set after the timer
* has been started, it takes effect when the timer rolls over or the next
* time it is started.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \param val
* The counter value to load.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Tried to write an invalid watchdog timer or
* timeout value.
*/
ALT_STATUS_CODE alt_wdog_counter_set(ALT_WDOG_TIMER_t tmr_id,
uint32_t val);
/******************************************************************************/
/*!
* Returns the current counter value of the specified timer.
*
* \param tmr_id
* The watchdog timer identifier.
*
*
* \retval uint32_t The current 32-bit counter value.
*/
uint32_t alt_wdog_counter_get_current(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the current counter value of the specified timer, as measured in
* milliseconds. For \b ALT_CPU_WATCHDOG, this includes the effects of the
* prescaler setting.
*
* \param tmr_id
* The watchdog timer identifier.
*
*
* \retval uint32_t The current 32-bit counter value (in milliseconds).
*/
uint32_t alt_wdog_counter_get_curtime_millisecs(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the initial counter value of the specified timer as a 32-bit
* integer value. This is the value that will be reloaded when the timer
* is reset or restarted. For the timers where this value is set as an
* encoded powers-of-two between 15 and 31, the value is converted into the
* equivalent binary value before returning it. \n For \b ALT_CPU_WATCHDOG,
* the returned value does not include the effects of the prescaler setting.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint32_t The current 32-bit counter value.
* 0 Indicates an error.
*/
uint32_t alt_wdog_counter_get_init(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the initial value of the specified timer in nanoseconds.
* This is the value that will be reloaded when the timer is reset or
* restarted. For \b ALT_CPU_WATCHDOG, this includes the effects of the
* prescaler setting. This call returns a more precise result than
* alt_wdog_counter_get_inittime_millisecs(), but as an unsigned 64-bit
* integer.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint64_t The currently-selected watchdog delay time (in
* nanoseconds).
*/
uint64_t alt_wdog_counter_get_inittime_nanosecs(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the initialized value of the specified timer in milliseconds.
* This is the value that will be reloaded when the timer is reset or
* restarted. For \b ALT_CPU_WATCHDOG, this includes the effects of the
* prescaler setting. This call returns a 32-bit unsigned integer, though is
* less precise than alt_wdog_counter_get_inittime_nanosecs().
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint32_t The currently-selected watchdog delay time (in
* milliseconds).
* 0 Indicates an error.
*/
uint32_t alt_wdog_counter_get_inittime_millisecs(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Sets the value of the CPU watchdog timer \b ALT_CPU_WATCHDOG prescaler.
* Must be set before the watchdog timer is enabled.
*
*
* \param val
* The eight-bit prescaler value to load (maximum 255).
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_BAD_ARG Bad prescaler value specified.
*/
ALT_STATUS_CODE alt_wdog_core_prescaler_set(uint32_t val);
/******************************************************************************/
/*!
* Returns the value of the prescaler of the CPU core watchdog timer
* \b ALT_CPU_WATCHDOG.
*
* \retval val
* The eight-bit prescaler value.
*
*/
uint32_t alt_wdog_core_prescaler_get(void);
/******************************************************************************/
/*!
* Returns the maximum possible counter value of the specified timer as a
* 32-bit value. For the timers where this value is encoded (as
* powers-of-two between 15 and 31), the encoded value is converted into the
* equivalent binary value before returning it. This does not include the
* effects of the prescaler available for \b ALT_CPU_WATCHDOG.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint32_t The current 32-bit counter value.
*/
uint32_t alt_wdog_counter_get_max(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the maximum possible delay time of the specified timer specified in
* nanoseconds. For \b ALT_CPU_WATCHDOG, this includes the prescaler setting.
* This call returns a more precise reading of the counter than
* alt_wdog_counter_get_max_millisecs(), though in an unsigned 64-bit integer.
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint64_t The maximum delay time before timeout (in
* nanoseconds).
*/
uint64_t alt_wdog_counter_get_max_nanosecs(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the maximum possible delay time of the specified timer specified in
* milliseconds. For \b ALT_CPU_WATCHDOG, this includes the prescaler setting.
* This call returns a 32-bit unsigned integer, though is less precise than
* alt_wdog_counter_get_max_nanosecs().
*
* \param tmr_id
* The watchdog timer identifier.
*
* \retval uint32_t The maximum delay time before timeout (in
* milliseconds).
*/
uint32_t alt_wdog_counter_get_max_millisecs(ALT_WDOG_TIMER_t tmr_id);
/*! @} */
/******************************************************************************/
/*! \addtogroup WDOG_INTS Watchdog Timer Interrupt Management
*
*
* This functional group implements management of the interrupts
* of the watchdog timers.
*
* @{
*/
/******************************************************************************/
/*!
* Disables the interrupt of the specified watchdog timer module.
* If the watchdog timer is one of the watchdog timers that can be used in
* general-purpose mode, and if the timer is in general-purpose timer mode,
* disable the interrupt.
*
* \param tmr_id
* The timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Specified an incorrect timer.
*/
ALT_STATUS_CODE alt_wdog_int_disable(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Sets/enables the interrupt of the specified watchdog timer module.
* If the watchdog timer is one of the watchdog timers that can be used in
* general-purpose mode, and if the timer is in general-purpose timer mode,
* enable the interrupt.
*
* \param tmr_id
* The timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Specified an incorrect timer.
*/
ALT_STATUS_CODE alt_wdog_int_enable(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the status of the interrupt of the specified watchdog timer module
* but does not clear it. Return \b TRUE if the interrupt of the specified
* general purpose timer module is pending and \b FALSE otherwise.
*
* \param tmr_id
* The timer identifier.
*
* \retval TRUE The timer interrupt is currently pending.
* \retval FALSE The timer interrupt is not currently pending.
*/
bool alt_wdog_int_is_pending(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the state of the interrupt of the specified watchdog timer module.
* If the watchdog timer is one of the watchdog timers that can be used in
* general-purpose mode, and if the timer is in general-purpose timer mode,
* returns \b TRUE if the interrupt of the specified general purpose timer
* module is enabled and \b FALSE if disabled. If the timer is not in
* general-purpose timer mode, returns /b TRUE, as watchdog interrupts are
* always enabled.
*
* \param tmr_id
* The timer identifier.
*
* \retval TRUE The timer interrupt is currently pending.
* \retval FALSE The timer interrupt is not currently pending.
*/
bool alt_wdog_int_is_enabled(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Clears the pending status of the interrupt of the specified watchdog
* timer module.
*
*
* \param tmr_id
* The timer identifier.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
*/
ALT_STATUS_CODE alt_wdog_int_clear(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the status of the interrupt of the specified watchdog timer module
* and also clears it. Return \b TRUE if the interrupt of the specified
* general purpose timer module is pending and \b FALSE otherwise.
*
* \param tmr_id
* The timer identifier.
*
* \retval TRUE The timer interrupt was pending.
* \retval FALSE The timer interrupt was not pending.
*/
bool alt_wdog_int_if_pending_clear(ALT_WDOG_TIMER_t tmr_id);
/*! @} */
#if ALTERA_INTERNAL_ONLY_DOCS
/******************************************************************************/
/*! \addtogroup WDOG_MODE_CONF Watchdog Timer Miscellaneous Configuration
*
* This functional group implements setting and reading the current
* timer mode as well as reading the module component code and version code.
*
* @{
*/
#else
/******************************************************************************/
/*! \addtogroup WDOG_MODE_CONF Watchdog Timer Miscellaneous Configuration
*
* This functional group implements setting and reading the current
* timer mode.
*
* @{
*/
#endif
/******************************************************************************/
/*!
* Sets the timeout response mode of the specified watchdog timer. For \b
* ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL or \b ALT_WATCHDOG1_INITIAL, the
* options are to generate a system reset or to generate an interrupt and then
* generate a system reset if the interrupt is not cleared by the next time
* the watchdog timer counter rolls over.\n
* For \b ALT_CPU_WATCHDOG, the options are to trigger an interrupt request (with
* the result set in the interrupt manager) or a reset request (with the
* result set in the reset manager) plus two more options available
* when it is used as a general-purpose timer.
* \param tmr_id
* The timer identifier.
*
* \param type
* \b ALT_WDOG_WARM_RESET - For \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b
* ALT_WATCHDOG0_INITIAL or \b ALT_WATCHDOG1_INITIAL, reset the core
* immediately. \n For \b ALT_CPU_WATCHDOG, the action is
* determined by the current setting in the reset manager.\n\n
* \b ALT_WDOG_INT_THEN_RESET - For \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b
* ALT_WATCHDOG0_INITIAL or \b ALT_WATCHDOG1_INITIAL, raise an interrupt.
* If the interrupt is not cleared before the timer counts down
* to zero again, reset the CPU cores. \n For \b ALT_CPU_WATCHDOG,
* raise an interrupt. \n\n \b ALT_WDOG_TIMER_MODE_ONESHOT - For \b
* ALT_CPU_WATCHDOG, watchdog timer is set to timer mode and one-shot
* operation is selected.\n\n \b ALT_WDOG_TIMER_MODE_FREERUN - For \b
* ALT_CPU_WATCHDOG, watchdog timer is set to timer mode and free-run
* operation is selected.
*
* \retval ALT_E_SUCCESS The operation was successful.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Specified an incorrect timer or an unsupported
* response mode for the specified timer.
*/
ALT_STATUS_CODE alt_wdog_response_mode_set(ALT_WDOG_TIMER_t tmr_id,
ALT_WDOG_RESET_TYPE_t type);
/******************************************************************************/
/*!
* Returns the response mode of the specified timer.
*
* \param tmr_id
* The timer identifier.
*
*
* \retval ALT_WDOG_WARM_RESET
* For \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL or \b
* ALT_WATCHDOG1_INITIAL, reset the core immediately. \n For \b
* ALT_CPU_WATCHDOG, the action is determined by the current setting
* in the reset manager.
* \retval ALT_WDOG_INT_THEN_RESET Raise an interrupt. For \b ALT_WATCHDOG0, \b
* ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL or \b ALT_WATCHDOG1_INITIAL, if
* the interrupt is not cleared before timer wraps around again,
* reset the CPU cores. \n For \b ALT_CPU_WATCHDOG, the action is
* determined by the current setting in the interrupt manager.
* \retval ALT_WDOG_TIMER_MODE_ONESHOT Core watchdog timer is set to timer
* mode and one-shot operation is selected.
* \retval ALT_WDOG_TIMER_MODE_FREERUN Core watchdog timer is set to timer
* mode and free-run operation is selected.
* \retval ALT_E_ERROR The operation failed.
* \retval ALT_E_BAD_ARG Specified an invalid timer.
*/
int32_t alt_wdog_response_mode_get(ALT_WDOG_TIMER_t tmr_id);
#if ALTERA_INTERNAL_ONLY_DOCS
/******************************************************************************/
/*!
* Returns the component code of the watchdog timer module. \n Only valid
* for \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL or \b
* ALT_WATCHDOG1_INITIAL.
*
* \param tmr_id
* The timer identifier.
*
* \retval uint32_t The component code of the module.
* It should be 0x44570120.
*
* \note This is an Altera Internal Only function
*
*/
uint32_t alt_wdog_compcode_get(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/*!
* Returns the version code of the watchdog timer module. \n Only valid for
* \b ALT_WATCHDOG0, \b ALT_WATCHDOG1, \b ALT_WATCHDOG0_INITIAL or \b
* ALT_WATCHDOG1_INITIAL.
*
*
* \param tmr_id
* The timer identifier.
*
*
* \retval uint32_t The encoded revision number of the module.
*
* \note This is an Altera Internal Only function
*
*/
uint32_t alt_wdog_ver_get(ALT_WDOG_TIMER_t tmr_id);
#else
/******************************************************************************/
/* Returns the component code of the watchdog timer module. Only valid
* for ALT_WATCHDOG0, ALT_WATCHDOG1, ALT_WATCHDOG0_INITIAL or ALT_WATCHDOG1_INITIAL.
*
* This is an Altera Internal Only function
*/
uint32_t alt_wdog_compcode_get(ALT_WDOG_TIMER_t tmr_id);
/******************************************************************************/
/* Returns the version code of the watchdog timer module. Only valid for
* ALT_WATCHDOG0, ALT_WATCHDOG1, ALT_WATCHDOG0_INITIAL or ALT_WATCHDOG1_INITIAL.
*
* This is an Altera Internal Only function
*/
uint32_t alt_wdog_ver_get(ALT_WDOG_TIMER_t tmr_id);
#endif /* ALTERA_INTERNAL_ONLY_DOCS */
/******************************************************************************/
/*! @} */
/*! @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __ALT_WDOG_H__ */