/********************************************************************** | |
* $Id$ lpc18xx_wwdt.c 2011-06-02 | |
*//** | |
* @file lpc18xx_wwdt.c | |
* @brief Contains all functions support for WDT firmware library | |
* on LPC18xx | |
* @version 1.0 | |
* @date 02. June. 2011 | |
* @author NXP MCU SW Application Team | |
* | |
* Copyright(C) 2011, NXP Semiconductor | |
* All rights reserved. | |
* | |
*********************************************************************** | |
* Software that is described herein is for illustrative purposes only | |
* which provides customers with programming information regarding the | |
* products. This software is supplied "AS IS" without any warranties. | |
* NXP Semiconductors assumes no responsibility or liability for the | |
* use of the software, conveys no license or title under any patent, | |
* copyright, or mask work right to the product. NXP Semiconductors | |
* reserves the right to make changes in the software without | |
* notification. NXP Semiconductors also make no representation or | |
* warranty that such application will be suitable for the specified | |
* use without further testing or modification. | |
**********************************************************************/ | |
/* Peripheral group ----------------------------------------------------------- */ | |
/** @addtogroup WWDT | |
* @{ | |
*/ | |
/* Includes ------------------------------------------------------------------- */ | |
#include "lpc18xx_wwdt.h" | |
/* If this source file built with example, the LPC18xx FW library configuration | |
* file in each example directory ("lpc18xx_libcfg.h") must be included, | |
* otherwise the default FW library configuration file must be included instead | |
*/ | |
#ifdef __BUILD_WITH_EXAMPLE__ | |
#include "lpc18xx_libcfg.h" | |
#else | |
#include "lpc18xx_libcfg_default.h" | |
#endif /* __BUILD_WITH_EXAMPLE__ */ | |
#ifdef _WWDT | |
void WWDT_SetTimeOut(uint32_t timeout); | |
/*********************************************************************//** | |
* @brief Update WDT timeout value and feed | |
* @param[in] timeout WDT timeout (us) | |
* @return none | |
**********************************************************************/ | |
void WWDT_SetTimeOut(uint32_t timeout) | |
{ | |
uint32_t timeoutVal; | |
timeoutVal = WDT_GET_FROM_USEC(timeout); | |
if(timeoutVal < WWDT_TIMEOUT_MIN) | |
{ | |
timeoutVal = WWDT_TIMEOUT_MIN; | |
} | |
else if (timeoutVal > WWDT_TIMEOUT_MAX) | |
{ | |
timeoutVal = WWDT_TIMEOUT_MAX; | |
} | |
LPC_WWDT->TC = timeoutVal; | |
} | |
/* Public Functions ----------------------------------------------------------- */ | |
/** @addtogroup WDT_Public_Functions | |
* @{ | |
*/ | |
/*********************************************************************//** | |
* @brief Initial for Watchdog function | |
* @param[in] none | |
* @return None | |
**********************************************************************/ | |
void WWDT_Init(void) | |
{ | |
LPC_WWDT->MOD = 0; // Clear time out and interrupt flags | |
LPC_WWDT->TC = WWDT_TIMEOUT_MIN; // Reset time out | |
LPC_WWDT->WARNINT= 0; // Reset warning value | |
LPC_WWDT->WINDOW = WWDT_WINDOW_MAX; // Reset window value | |
} | |
/********************************************************************//** | |
* @brief Update WDT timeout value and feed | |
* @param[in] TimeOut TimeOut value to be updated, should be in range: | |
* 2048 .. 134217728 | |
* @return None | |
*********************************************************************/ | |
void WDT_UpdateTimeOut(uint32_t TimeOut) | |
{ | |
/* check WDPROTECT, | |
* if it is enable, wait until the counter is below the value of | |
* WDWARNINT and WDWINDOW | |
*/ | |
if(LPC_WWDT->MOD & (1<<4)) | |
{ | |
while((LPC_WWDT->TV <(LPC_WWDT->WARNINT & WWDT_WDWARNINT_MASK))\ | |
&&(LPC_WWDT->TV <(LPC_WWDT->WINDOW & WWDT_WDTC_MASK))); | |
} | |
WWDT_SetTimeOut(TimeOut); | |
} | |
/********************************************************************//** | |
* @brief After set WDTEN, call this function to start Watchdog | |
* or reload the Watchdog timer | |
* @param[in] None | |
* @return None | |
*********************************************************************/ | |
void WWDT_Feed (void) | |
{ | |
LPC_WWDT->FEED = 0xAA; | |
LPC_WWDT->FEED = 0x55; | |
} | |
/********************************************************************//** | |
* @brief Update WDT timeout value and feed | |
* @param[in] WarnTime time to generate watchdog warning interrupt(us) | |
* should be in range: 2048 .. 8192 | |
* @return None | |
*********************************************************************/ | |
void WWDT_SetWarning(uint32_t WarnTime) | |
{ | |
uint32_t warnVal; | |
warnVal = WDT_GET_FROM_USEC(WarnTime); | |
if(warnVal <= WWDT_WARNINT_MIN) | |
{ | |
warnVal = WWDT_WARNINT_MIN; | |
} | |
else if (warnVal >= WWDT_WARNINT_MAX) | |
{ | |
warnVal = WWDT_WARNINT_MAX; | |
} | |
LPC_WWDT->WARNINT = warnVal; | |
} | |
/********************************************************************//** | |
* @brief Update WDT timeout value and feed | |
* @param[in] WindowedTime expected time to set watchdog window event(us) | |
* @return none | |
*********************************************************************/ | |
void WWDT_SetWindow(uint32_t WindowedTime) | |
{ | |
uint32_t wndVal; | |
wndVal = WDT_GET_FROM_USEC(WindowedTime); | |
if(wndVal <= WWDT_WINDOW_MIN) | |
{ | |
wndVal = WWDT_WINDOW_MIN; | |
} | |
else if (wndVal >= WWDT_WINDOW_MAX) | |
{ | |
wndVal = WWDT_WINDOW_MAX; | |
} | |
LPC_WWDT->WINDOW = wndVal; | |
} | |
/*********************************************************************//** | |
* @brief Enable/Disable WWDT activity | |
* @param[in] None | |
* @return None | |
**********************************************************************/ | |
void WWDT_Configure(st_Wdt_Config wdtCfg) | |
{ | |
WWDT_SetTimeOut(wdtCfg.wdtTmrConst); | |
if(wdtCfg.wdtReset) | |
{ | |
LPC_WWDT->MOD |= WWDT_WDMOD_WDRESET; | |
} | |
else | |
{ | |
LPC_WWDT->MOD &= ~WWDT_WDMOD_WDRESET; | |
} | |
if(wdtCfg.wdtProtect) | |
{ | |
LPC_WWDT->MOD |= WWDT_WDMOD_WDPROTECT; | |
} | |
else | |
{ | |
LPC_WWDT->MOD &= ~WWDT_WDMOD_WDPROTECT; | |
} | |
} | |
/*********************************************************************//** | |
* @brief Enable WWDT activity | |
* @param[in] None | |
* @return None | |
**********************************************************************/ | |
void WWDT_Start(void) | |
{ | |
LPC_WWDT->MOD |= WWDT_WDMOD_WDEN; | |
WWDT_Feed(); | |
} | |
/********************************************************************//** | |
* @brief Read WWDT status flag | |
* @param[in] Status kind of status flag that you want to get, should be: | |
* - WWDT_WARNINT_FLAG: watchdog interrupt flag | |
* - WWDT_TIMEOUT_FLAG: watchdog time-out flag | |
* @return Time out flag status of WDT | |
*********************************************************************/ | |
FlagStatus WWDT_GetStatus (uint8_t Status) | |
{ | |
if(Status == WWDT_WARNINT_FLAG) | |
{ | |
return ((FlagStatus)(LPC_WWDT->MOD & (1<<3))); | |
} | |
else if (Status == WWDT_TIMEOUT_FLAG) | |
{ | |
return ((FlagStatus)(LPC_WWDT->MOD & (1<<2))); | |
} | |
return (FlagStatus)RESET; | |
} | |
/********************************************************************//** | |
* @brief Read WWDT status flag | |
* @param[in] Status kind of status flag that you want to get, should be: | |
* - WWDT_WARNINT_FLAG: watchdog interrupt flag | |
* - WWDT_TIMEOUT_FLAG: watchdog time-out flag | |
* @return Time out flag status of WDT | |
*********************************************************************/ | |
void WWDT_ClearStatusFlag (uint8_t flag) | |
{ | |
if(flag == WWDT_WARNINT_FLAG) | |
{ | |
// Write 1 to this bit to clear itself | |
LPC_WWDT->MOD |= WWDT_WDMOD_WDINT; | |
} | |
else if(flag == WWDT_TIMEOUT_FLAG) | |
{ | |
// Write 0 to this bit to clear itself | |
LPC_WWDT->MOD &= ~ WWDT_WDMOD_WDTOF; | |
} | |
} | |
/********************************************************************//** | |
* @brief Get the current value of WDT | |
* @param[in] None | |
* @return current value of WDT | |
*********************************************************************/ | |
uint32_t WWDT_GetCurrentCount(void) | |
{ | |
return LPC_WWDT->TV; | |
} | |
/** | |
* @} | |
*/ | |
#endif /* _WWDT */ | |
/** | |
* @} | |
*/ | |
/* --------------------------------- End Of File ------------------------------ */ |