/**************************************************************************//** * @file wdt.c * @version V1.00 * $Revision: 2 $ * $Date: 16/02/24 17:25 $ * @brief Panchip series WDT driver source file * * @note * Copyright (C) 2016 Panchip Technology Corp. All rights reserved. *****************************************************************************/ #include "PanSeries.h" #include "pan_wdt.h" /** * @brief This function configures parameters of WDT module * @param[in] timeoutInterval 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_2POW15 * - \ref WDT_TIMEOUT_2POW16 * - \ref WDT_TIMEOUT_2POW17 * - \ref WDT_TIMEOUT_2POW18 * - \ref WDT_TIMEOUT_2POW19 * - \ref WDT_TIMEOUT_2POW20 * - \ref WDT_TIMEOUT_2POW21 * - \ref WDT_TIMEOUT_2POW22 * - \ref WDT_TIMEOUT_2POW23 * - \ref WDT_TIMEOUT_2POW24 * @param[in] resetDelay 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 */ void WDT_Configure(WDT_TimeoutDef timeoutInterval, WDT_ResetDelayDef resetDelay, uint32_t u32EnableReset, uint32_t u32EnableWakeup) { uint32_t tmp_reg = WDT->CTL; tmp_reg &= ~(WDT_CTL_TOUTSEL_Msk | WDT_CTL_RSTEN_Msk | WDT_CTL_WKEN_Msk); tmp_reg |= timeoutInterval | (u32EnableReset << WDT_CTL_RSTEN_Pos) | (u32EnableWakeup << WDT_CTL_WKEN_Pos); tmp_reg |= WDT_CTL_RST_REGION_SEL_Msk; // Reset both 1.2v and 3v region WDT->CTL = tmp_reg; WDT->ALTCTL = resetDelay; } /** * @brief This function enables the WDT module and starts counting * @param None * @note This bit is write protected. Do SYS_UnlockReg() before setting this bit. * @return None */ void WDT_Start(void) { WDT->CTL |= WDT_CTL_WDTEN_Msk; } /** * @brief This function disables the WDT module and resets the internal counter * @param None * @note This bit is write protected. Do SYS_UnlockReg() before setting this bit. * @return None */ void WDT_Stop(void) { WDT->CTL &= ~WDT_CTL_WDTEN_Msk; } /** * @brief This function make WDT module start counting with different time-out interval * @param[in] timeoutInterval 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_2POW15 * - \ref WDT_TIMEOUT_2POW16 * - \ref WDT_TIMEOUT_2POW17 * - \ref WDT_TIMEOUT_2POW18 * - \ref WDT_TIMEOUT_2POW19 * - \ref WDT_TIMEOUT_2POW20 * - \ref WDT_TIMEOUT_2POW21 * - \ref WDT_TIMEOUT_2POW22 * - \ref WDT_TIMEOUT_2POW23 * - \ref WDT_TIMEOUT_2POW24 * @param[in] resetDelay 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 */ void WDT_Open(WDT_TimeoutDef timeoutInterval, WDT_ResetDelayDef resetDelay, uint32_t u32EnableReset, uint32_t u32EnableWakeup) { uint32_t tmp_reg = WDT->CTL; tmp_reg &= ~(WDT_CTL_TOUTSEL_Msk | WDT_CTL_WDTEN_Msk | WDT_CTL_RSTEN_Msk | WDT_CTL_WKEN_Msk); tmp_reg |= timeoutInterval | WDT_CTL_WDTEN_Msk | (u32EnableReset << WDT_CTL_RSTEN_Pos) | (u32EnableWakeup << WDT_CTL_WKEN_Pos); tmp_reg |= WDT_CTL_RST_REGION_SEL_Msk; // Reset both 1.2v and 3v region WDT->CTL = tmp_reg; WDT->ALTCTL = resetDelay; return; } /** * @brief This function stops WDT counting and disable WDT module * @param None * @return None */ void WDT_Close(void) { WDT->CTL = 0; WDT->CTL |= (WDT_CTL_TOF_Msk | WDT_CTL_IF_Msk | WDT_CTL_RSTF_Msk | WDT_CTL_WKF_Msk); return; } /** * @brief This function enables the WDT time-out interrupt * @param None * @return None */ void WDT_EnableInt(void) { WDT->CTL |= WDT_CTL_INTEN_Msk; return; } /** * @brief This function disables the WDT time-out interrupt * @param None * @return None */ void WDT_DisableInt(void) { WDT->CTL &= ~WDT_CTL_INTEN_Msk; return; } /*@}*/ /* end of group PN501_WDT_EXPORTED_FUNCTIONS */ /*@}*/ /* end of group PN501_WDT_Driver */ /*@}*/ /* end of group PN501_Device_Driver */ /*** (C) COPYRIGHT 2016 Panchip Technology Corp. ***/