/************************************************************************** * @file pan_wdt.h * @version V1.00 * $Revision: 2 $ * $Date: 2023/11/08 $ * @brief Panchip series WDT driver header file * * @note * Copyright (C) 2023 Panchip Technology Corp. All rights reserved. *****************************************************************************/ #ifndef __PAN_WDT_H__ #define __PAN_WDT_H__ /** * @brief Wdt Interface * @defgroup wdt_interface Wdt Interface * @{ */ #ifdef __cplusplus extern "C" { #endif /**@defgroup WDT_TIMEOUT_FLAG Wdt timeout count * @brief Wdt timeout count definition * @{ */ typedef enum _WDT_Timeout { WDT_TIMEOUT_2POW4 = (0UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^4 * WDT clocks */ WDT_TIMEOUT_2POW6 = (1UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^6 * WDT clocks */ WDT_TIMEOUT_2POW8 = (2UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^8 * WDT clocks */ WDT_TIMEOUT_2POW10 = (3UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^10 * WDT clocks */ WDT_TIMEOUT_2POW12 = (4UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^12 * WDT clocks */ WDT_TIMEOUT_2POW14 = (5UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^14 * WDT clocks */ WDT_TIMEOUT_2POW15 = (6UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^15 * WDT clocks */ WDT_TIMEOUT_2POW16 = (7UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^16 * WDT clocks */ WDT_TIMEOUT_2POW17 = (8UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^17 * WDT clocks */ WDT_TIMEOUT_2POW18 = (9UL << WDT_CTL_TOUTSEL_Pos), /*!< WDT setting for timeout interval = 2^18 * WDT clocks */ WDT_TIMEOUT_2POW19 = (10UL << WDT_CTL_TOUTSEL_Pos),/*!< WDT setting for timeout interval = 2^19 * WDT clocks */ WDT_TIMEOUT_2POW20 = (11UL << WDT_CTL_TOUTSEL_Pos),/*!< WDT setting for timeout interval = 2^20 * WDT clocks */ WDT_TIMEOUT_2POW21 = (12UL << WDT_CTL_TOUTSEL_Pos),/*!< WDT setting for timeout interval = 2^21 * WDT clocks */ WDT_TIMEOUT_2POW22 = (13UL << WDT_CTL_TOUTSEL_Pos),/*!< WDT setting for timeout interval = 2^22 * WDT clocks */ WDT_TIMEOUT_2POW23 = (14UL << WDT_CTL_TOUTSEL_Pos),/*!< WDT setting for timeout interval = 2^23 * WDT clocks */ WDT_TIMEOUT_2POW24 = (15UL << WDT_CTL_TOUTSEL_Pos) /*!< WDT setting for timeout interval = 2^24 * WDT clocks */ } WDT_TimeoutDef; /**@} */ /**@defgroup WDT_RESET_DELAY_FLAG Wdt reset delay time * @brief Wdt reset delay time definition * @{ */ typedef enum _WDT_ResetDelay { WDT_RESET_DELAY_2CLK = (3UL << WDT_ALTCTL_RSTDSEL_Pos), /*!< WDT setting reset delay to 2 WDT clocks */ WDT_RESET_DELAY_17CLK = (2UL << WDT_ALTCTL_RSTDSEL_Pos), /*!< WDT setting reset delay to 17 WDT clocks */ WDT_RESET_DELAY_129CLK = (1UL << WDT_ALTCTL_RSTDSEL_Pos), /*!< WDT setting reset delay to 129 WDT clocks */ WDT_RESET_DELAY_1025CLK = (0UL << WDT_ALTCTL_RSTDSEL_Pos) /*!< WDT setting reset delay to 1025 WDT clocks */ } WDT_ResetDelayDef; /**@} */ /** * @brief This function clear WDT time-out reset system flag. * \hideinitializer */ __STATIC_INLINE void WDT_ClearResetFlag(void) { WDT->CTL |= WDT_CTL_RSTF_Msk; } /** * @brief This function clear WDT time-out flag. * \hideinitializer */ __STATIC_INLINE void WDT_ClearTimeoutFlag(void) { WDT->CTL |= WDT_CTL_TOF_Msk; } /** * @brief This function clear WDT time-out interrupt flag. * \hideinitializer */ __STATIC_INLINE void WDT_ClearTimeoutIntFlag(void) { WDT->CTL |= WDT_CTL_IF_Msk; } /** * @brief This function clear WDT time-out wake-up system flag. * \hideinitializer */ __STATIC_INLINE void WDT_ClearTimeoutWakeupFlag(void) { WDT->CTL |= WDT_CTL_WKF_Msk; } /** * @brief This function indicate WDT time-out to reset system or not. * @return WDT reset system or not * @retval false WDT did not cause system reset * @retval true WDT caused system reset * \hideinitializer */ __STATIC_INLINE bool WDT_GetResetFlag(void) { return (WDT->CTL & WDT_CTL_RSTF_Msk) ? true : false; } /** * @brief This function indicate WDT time-out evnet occurred or not. * @return WDT time-out evnet occurred or not * @retval false WDT time-out evnet did not occur * @retval true WDT time-out evnet occurred * \hideinitializer */ __STATIC_INLINE bool WDT_GetTimeoutFlag(void) { return (WDT->CTL & WDT_CTL_TOF_Msk) ? true : false; } /** * @brief This function indicate WDT time-out interrupt occurred or not. * @return WDT time-out interrupt occurred or not * @retval false WDT time-out interrupt did not occur * @retval true WDT time-out interrupt occurred * \hideinitializer */ __STATIC_INLINE bool WDT_GetTimeoutIntFlag(void) { return (WDT->CTL & WDT_CTL_IF_Msk) ? true : false; } /** * @brief This function indicate WDT time-out waked system up or not * @return WDT time-out waked system up or not * @retval false WDT did not wake up system * @retval true WDT waked up system * \hideinitializer */ __STATIC_INLINE bool WDT_GetTimeoutWakeupFlag(void) { return (WDT->CTL & WDT_CTL_WKF_Msk) ? true : false; } /** * @brief This function is used to reset 18-bit WDT counter. * @details If WDT is activated and enabled to reset system, software must reset WDT counter * before WDT time-out plus reset delay reached. Or WDT generate a reset signal. * \hideinitializer */ __STATIC_INLINE void WDT_ResetCounter(void) { WDT->CTL |= WDT_CTL_RSTCNT_Msk; } /** * @brief This function make WDT module start counting with different time-out interval * @param[in] u32TimeoutInterval Time-out interval period of WDT module. Valid values are: * - \ref WDT_TIMEOUT_2POW4 * - \ref WDT_TIMEOUT_2POW6 * - \ref WDT_TIMEOUT_2POW8 * - \ref WDT_TIMEOUT_2POW10 * - \ref WDT_TIMEOUT_2POW12 * - \ref WDT_TIMEOUT_2POW14 * - \ref WDT_TIMEOUT_2POW16 * - \ref WDT_TIMEOUT_2POW18 * @param[in] u32ResetDelay Reset delay period while WDT time-out happened. Valid values are: * - \ref WDT_RESET_DELAY_2CLK * - \ref WDT_RESET_DELAY_17CLK * - \ref WDT_RESET_DELAY_129CLK * - \ref WDT_RESET_DELAY_1025CLK * @param[in] u32EnableReset Enable WDT reset system function. Valid values are TRUE and FALSE * @param[in] u32EnableWakeup Enable WDT wake-up system function. Valid values are TRUE and FALSE * @return None * * @code * * CLK_SetWdtClkSrc(WDT_CLK_SRC_SEL_APBDIV); * WDT_Open(WDT_TIMEOUT_2POW16, WDT_RESET_DELAY_1025CLK, FALSE, FALSE); * * @endcode */ void WDT_Open(WDT_TimeoutDef u32TimeoutInterval, WDT_ResetDelayDef u32ResetDelay, uint32_t u32EnableReset, uint32_t u32EnableWakeup); /** * @brief This function stops WDT counting and disable WDT module * @return None */ void WDT_Close(void); /** * @brief This function enables the WDT time-out interrupt * @return None */ void WDT_EnableInt(void); /** * @brief This function disables the WDT time-out interrupt * @return None */ void WDT_DisableInt(void); /**@} */ #ifdef __cplusplus } #endif #endif //__PAN_WDT_H__ /*** (C) COPYRIGHT 2023 Panchip Technology Corp. ***/