version_2.0

Dependents:   cc3000_ping_demo_try_2

Fork of mbed by mbed official

Revision:
82:6473597d706e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/wdog/fsl_wdog_hal.h	Mon Apr 07 18:28:36 2014 +0100
@@ -0,0 +1,467 @@
+/*
+ * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o 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.
+ *
+ * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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 __FSL_WDOG_HAL_H__
+#define __FSL_WDOG_HAL_H__
+
+#include <assert.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_wdog_features.h"
+#include "fsl_device_registers.h"
+
+/*! 
+ * @addtogroup wdog_hal
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ *******************************************************************************/
+
+/*! @brief Watchdog ISR callback function type*/
+typedef void (*wdog_isr_callback_t)(void);
+
+/*! @brief Watchdog clock source selection.*/
+typedef enum _wdog_clock_source {
+    kWdogDedicatedClock = 0, /*!< Dedicated clock source (LPO Oscillator),1K HZ.*/
+    kWdogAlternateClock = 1 /*!< Alternate clock source, Bus clock.*/
+} wdog_clock_source_t;
+
+/*! @brief Define the selection of the clock prescaler*/
+typedef enum _wdog_clock_prescaler {
+    kWdogClockPrescaler1 = 0, /*!< Divide 1, default*/
+    kWdogClockPrescaler2 = 1, /*!< Divide 2*/
+    kWdogClockPrescaler3 = 2, /*!< Divide 3*/
+    kWdogClockPrescaler4 = 3, /*!< Divide 4*/
+    kWdogClockPrescaler5 = 4, /*!< Divide 5*/
+    kWdogClockPrescaler6 = 5, /*!< Divide 6*/
+    kWdogClockPrescaler7 = 6, /*!< Divide 7*/
+    kWdogClockPrescaler8 = 7, /*!< Divide 8*/
+} wdog_clock_prescaler_t;
+
+/*******************************************************************************
+ * API
+ *******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*! 
+ * @name Watchdog HAL.
+ * @{
+ */
+
+/*!
+ * @brief Enable watchdog module.
+ *
+ * This function is used to enable the WDOG and must be called after all 
+ * necessary configure have been set.
+ *
+ */
+void wdog_hal_enable(void);
+
+/*!
+ * @brief Disable watchdog module.
+ * 
+ * This function is used to disable the WDOG.
+ *
+ */
+void wdog_hal_disable(void);
+
+/*!
+ * @brief Check whether WDOG is enabled.
+ * 
+ * This function is used check whether WDOG is enabled.
+ *
+ * @return 0 means WDOG is disabled, 1 means WODG is enabled.
+ *
+ */
+static inline bool wdog_hal_is_enabled(void)
+{
+    return BR_WDOG_STCTRLH_WDOGEN;
+}
+
+/*!
+ * @brief Enable and disable watchdog interrupt.
+ *
+ * This function is used to configure the WDOG interrupt.
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means disable watchdog interrupt. 1 means enable watchdog interrupt.
+ */
+void wdog_hal_configure_interrupt(bool isEnabled);
+
+/*!
+ * @brief Check whether WDOG interrupt is enabled.
+ *
+ * This function is used to check whether the WDOG interrupt is enabled.
+ *
+ * @return 0 means interrupt is disabled, 1 means interrupt is enabled.
+ */
+static inline bool wdog_hal_is_interrupt_enabled(void)
+{
+    return BR_WDOG_STCTRLH_IRQRSTEN;
+}
+
+/*!
+ * @brief set watchdog clock Source.
+ *
+ * This function is used to set the WDOG clock source. There are two clock sources that can be used,
+ * the LPO clock and the bus clock.
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param clockSource watchdog clock source, see wdog_clock_source_t.
+ */
+void wdog_hal_set_clock_source(wdog_clock_source_t clockSource);
+
+/*!
+ * @brief Get watchdog clock Source.
+ *
+ * This function is used to get the WDOG clock source. There are two clock sources that can be used,
+ * the LPO clock and the bus clock.
+ *
+ * @return watchdog clock source, see wdog_clock_source_t.
+ */
+static inline wdog_clock_source_t wdog_hal_get_clock_source(void)
+{
+    return (wdog_clock_source_t)BR_WDOG_STCTRLH_CLKSRC;
+}
+
+/*!
+ * @brief Enable and disable watchdog window mode.
+ *
+ * This function is used to configure the WDOG window mode.
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means disable watchdog window mode. 1 means enable watchdog window mode.
+ */
+void wdog_hal_configure_window_mode(bool isEnabled);
+
+/*!
+ * @brief Check whether window mode is enabled.
+ *
+ * This function is used to check whether the WDOG window mode is enabled.
+ *
+ * @return 0 means window mode is disabled, 1 means window mode is enabled.
+ */
+static inline bool wdog_hal_is_window_mode_enabled(void)
+{
+    return BR_WDOG_STCTRLH_WINEN;
+}
+
+/*!
+ * @brief Enable and disable watchdog write-once-only register update.
+ *
+ * This function is used to configure the WDOG register update feature. If disabled, it means that
+ * all WDOG registers will never be written again unless Power On Reset.
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means disable watchdog write-once-only register update.
+ *                  1 means enable watchdog write-once-only register update.
+ */
+void wdog_hal_configure_register_update(bool isEnabled);
+
+/*!
+ * @brief Check whether register update is enabled.
+ *
+ * This function is used to check whether the WDOG register update is enabled.
+ *
+ * @return 0 means register update is disabled, 1 means register update is enabled.
+ */
+static inline bool wdog_hal_is_register_update_enabled(void)
+{
+    return BR_WDOG_STCTRLH_ALLOWUPDATE;
+}
+
+/*!
+ * @brief Set whether watchdog is working while cpu is in debug mode.
+ *
+ * This function is used to configure whether the WDOG is enabled in CPU debug mode. 
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means watchdog is disabled in CPU debug mode.
+ *                  1 means watchdog is enabled in CPU debug mode.
+ */
+void wdog_hal_configure_enabled_in_cpu_debug_mode(bool isEnabled);
+
+/*!
+ * @brief Check whether WDOG works while in CPU debug mode.
+ *
+ * This function is used to check whether WDOG works in CPU debug mode.
+ *
+ * @return 0 means not work while in cpu debug mode, 1 means works while in cpu debug mode.
+ */
+static inline bool wdog_hal_is_cpu_debug_mode_enabled(void)
+{
+    return BR_WDOG_STCTRLH_DBGEN;
+}
+
+/*!
+ * @brief Set whether watchdog is working while cpu is in stop mode.
+ *
+ * This function is used to configure whether the WDOG is enabled in CPU stop mode. 
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means watchdog is disabled in CPU stop mode.
+ *                  1 means watchdog is enabled in CPU stop mode.
+ */
+void wdog_hal_configure_enabled_in_cpu_stop_mode(bool isEnabled);
+
+/*!
+ * @brief Check whether WDOG works while in CPU stop mode.
+ *
+ * This function is used to check whether WDOG works in CPU stop mode.
+ *
+ * @return 0 means not work while in CPU stop mode, 1 means works while in CPU stop mode.
+ */
+static inline bool wdog_hal_is_cpu_stop_mode_enabled(void)
+{
+    return BR_WDOG_STCTRLH_STOPEN;
+}
+
+/*!
+ * @brief Set whether watchdog is working while CPU is in wait mode.
+ *
+ * This function is used to configure whether the WDOG is enabled in CPU wait mode. 
+ * The configuration is saved in an internal configure buffer and written back to the register in wdog_hal_enable 
+ * function, so this function must be called before wdog_hal_enable is called.
+ *
+ * @param isEnabled 0 means watchdog is disabled in CPU wait mode.
+ *                  1 means watchdog is enabled in CPU wait mode.
+ */
+void wdog_hal_configure_enabled_in_cpu_wait_mode(bool isEnabled);
+
+/*!
+ * @brief Check whether WDOG works while in CPU wait mode.
+ *
+ * This function is used to check whether WDOG works in CPU wait mode.
+ *
+ * @return 0 means not work while in CPU wait mode, 1 means works while in CPU wait mode.
+ */
+
+static inline bool wdog_hal_is_cpu_wait_mode_enabled(void)
+{
+    return BR_WDOG_STCTRLH_WAITEN;
+}
+
+/*!
+ * @brief Get watchdog interrupt status.
+ *
+ * This function is used to get the WDOG interrupt flag.
+ *
+ * @return Watchdog interrupt status, 0 means interrupt not asserted, 1 means interrupt asserted.
+ */
+static inline bool wdog_hal_is_interrupt_asserted(void)
+{
+    return BR_WDOG_STCTRLL_INTFLG;
+}
+
+/*!
+ * @brief Clear watchdog interrupt flag.
+ *
+ * This function is used to clear the WDOG interrupt flag.
+ *
+ */
+static inline void wdog_hal_clear_interrupt_flag(void)
+{
+    BW_WDOG_STCTRLL_INTFLG(1);
+}
+
+/*!
+ * @brief set watchdog timeout value.
+ *
+ * This function is used to set the WDOG_TOVAL value.
+ *
+ * @param timeoutCount watchdog timeout value, count of watchdog clock tick.
+ */
+static inline void wdog_hal_set_timeout_value(uint32_t timeoutCount)
+{
+    BW_WDOG_TOVALH_TOVALHIGH((uint16_t)((timeoutCount >> 16U) & 0xFFFFU));
+    BW_WDOG_TOVALL_TOVALLOW((uint16_t)((timeoutCount) & 0xFFFFU));
+}
+
+/*!
+ * @brief Get watchdog timeout value.
+ *
+ * This function is used to Get the WDOG_TOVAL value.
+ *
+ * @return value of register WDOG_TOVAL.
+ */
+static inline uint32_t wdog_hal_get_timeout_value(void)
+{
+    return (uint32_t)((((uint32_t)(BR_WDOG_TOVALH_TOVALHIGH)) << 16U) | (BR_WDOG_TOVALL_TOVALLOW));
+}
+
+/*!
+ * @brief Get watchdog timer output.
+ *
+ * This function is used to get the WDOG_TMROUT value.
+ *
+ * @return Current value of watchdog timer counter.
+ */
+static inline uint32_t wdog_hal_get_timer_output(void)
+{
+    return (uint32_t)((((uint32_t)(BR_WDOG_TMROUTH_TIMEROUTHIGH)) << 16U) | (BR_WDOG_TMROUTL_TIMEROUTLOW));
+}
+
+/*!
+ * @brief Set watchdog clock prescaler.
+ *
+ * This function is used to set the WDOG clock proscaler.
+ * 
+ * @param clockPrescaler watchdog clock prescaler, see wdog_clock_prescaler_t.
+ */
+static inline void wdog_hal_set_clock_prescaler(wdog_clock_prescaler_t clockPrescaler)
+{
+    BW_WDOG_PRESC_PRESCVAL(clockPrescaler);
+}
+
+/*!
+ * @brief Get watchdog clock prescaler.
+ *
+ * This function is used to get the WDOG clock prescaler.
+ * 
+ * @return WDOG clock prescaler.
+ */
+static inline wdog_clock_prescaler_t wdog_hal_get_clock_prescaler(void)
+{
+    return (wdog_clock_prescaler_t)BR_WDOG_PRESC_PRESCVAL;
+}
+
+/*!
+ * @brief Set watchdog window value.
+ *
+ * This function is used to set the WDOG_WIN value.
+ *
+ * @param windowValue watchdog window value.
+ */
+static inline void wdog_hal_set_window_value(uint32_t windowValue)
+{
+    BW_WDOG_WINH_WINHIGH((uint16_t)((windowValue>>16U) & 0xFFFFU));
+    BW_WDOG_WINL_WINLOW((uint16_t)((windowValue) & 0xFFFFU));
+}
+
+/*!
+ * @brief Get watchdog window value.
+ *
+ * This function is used to Get the WDOG_WIN value.
+ *
+ * @return watchdog window value.
+ */
+static inline uint32_t wdog_hal_get_window_value(void)
+{
+    return (uint32_t)((((uint32_t)(BR_WDOG_WINH_WINHIGH)) << 16U) | (BR_WDOG_WINL_WINLOW));
+}
+
+/*!
+ * @brief Unlock watchdog register written.
+ * 
+ * This function is used to unlock the WDOG register written.
+ * This function must be called before any configuration is set because watchdog register
+ * will be locked automatically after a WCT(256 bus cycles).
+ *
+ */
+static inline void wdog_hal_unlock(void)
+{
+    BW_WDOG_UNLOCK_WDOGUNLOCK(0xC520U);
+    BW_WDOG_UNLOCK_WDOGUNLOCK(0xD928U);
+}
+
+/*!
+ * @brief Refresh watchdog timer.
+ *
+ * This function is used to feed the WDOG.
+ * This function should be called before watchdog timer is in timeout, otherwise a RESET
+ * will assert.
+ *
+ */
+static inline void wdog_hal_refresh(void)
+{
+    BW_WDOG_REFRESH_WDOGREFRESH(0xA602U);
+    BW_WDOG_REFRESH_WDOGREFRESH(0xB480U);
+}
+
+/*!
+ * @brief Reset chip using watchdog.
+ *
+ * This function is used to reset chip using WDOG.
+ *
+ */
+static inline void wdog_hal_reset_chip(void)
+{
+    BW_WDOG_REFRESH_WDOGREFRESH(0xA602U);
+    BW_WDOG_REFRESH_WDOGREFRESH(0);
+    while(1)
+    {
+    }
+}
+
+/*!
+ * @brief Get chip reset count that was reset by watchdog.
+ *
+ * This function is used to get the value of WDOG_RSTCNT.
+ *
+ * @return Chip reset count that was reset by watchdog.
+ */
+static inline uint32_t wdog_hal_get_reset_count(void)
+{
+    return BR_WDOG_RSTCNT_RSTCNT;
+}
+
+/*!
+ * @brief Clear chip reset count that was reset by watchdog.
+ *
+ * This function is used to clear the WDOG_RSTCNT.
+ *
+ */
+static inline void wdog_hal_clear_reset_count(void)
+{
+    BW_WDOG_RSTCNT_RSTCNT(0xFFFFU);
+}
+/*@}*/
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*! @}*/
+
+#endif /* __FSL_WDOG_HAL_H__*/
+/*******************************************************************************
+ * EOF
+ *******************************************************************************/
+