123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /******************************************************************************
- * @brief provide commond watch dog utilities.
- *
- *******************************************************************************
- *
- * provide APIs for accessing watch dog
- ******************************************************************************/
- #ifndef __WDOG_H__
- #define __WDOG_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- /******************************************************************************
- * Includes
- ******************************************************************************/
- #include "sim.h"
- /******************************************************************************
- * Constants
- ******************************************************************************/
- /******************************************************************************
- * Macros
- ******************************************************************************/
- /* wdog_unlock sequence must be performed within 16 bus clock cycles without
- * any interrupt
- */
-
- /* WDOG clock sources option */
- /******************************************************************************
- * define watchdog clock source selection
- *
- *//*! @addtogroup wdog_clock_sources
- * @{
- *******************************************************************************/
- #define WDOG_CLK_BUS 0 /*!< clock source is bus clock */
- #define WDOG_CLK_INTERNAL_32KHZ 2 /*!< clock source is internal oscillator 32 kHz (ICSIRCLK) */
- #define WDOG_CLK_INTERNAL_1KHZ 1 /*!< clock source is internal LPO 1 KHz */
- #define WDOG_CLK_EXTERNAL 3 /*!< clock source is external clock */
- /*! @} End of wdog_clock_sources */
- /* WDOG clock source selection */
- #define WDOG_CLK (WDOG_CLK_INTERNAL_1KHZ)
-
- /* WDOG default values */
- #define WDOG_CS1_DEFAULT_VALUE 0x80
- #define WDOG_CS2_DEFAULT_VALUE 0x01
- #define WDOG_TOVAL_DEFAULT_VALUE 0x0400
- #define WDOG_WIN_DEFAULT_VALUE 0x0000
-
- /* WDOG utilities */
- /******************************************************************************
- * define watchdog API list
- *
- *//*! @addtogroup wdog_api_list
- * @{
- *******************************************************************************/
- /*!
- * @brief watchdog unlock routine.
- */
- #define WDOG_Unlock() WDOG->CNT = 0x20C5; WDOG->CNT = 0x28D9
- //#define WDOG_Unlock() DisableInterrupts; WDOG->CNT = 0x20C5; WDOG->CNT = 0x28D9; EnableInterrupts
- /*! @} End of wdog_api_list */
- /******************************************************************************
- * Types
- ******************************************************************************/
- /******************************************************************************
- * define watchdog configuration structure
- *
- *//*! @addtogroup wdog_config_type
- * @{
- *******************************************************************************/
- /*!
- * @brief watchdog configuration structure.
- *
- */
- typedef struct {
- struct {
- uint16_t bIntEnable : 1; /*!< watchdog interrupt enable */
- uint16_t bDisable : 1; /*!< disable watchdog */
- uint16_t bWaitEnable : 1; /*!< enable watchdog in wait mode */
- uint16_t bStopEnable : 1; /*!< enable watchdog in stop mode */
- uint16_t bDbgEnable : 1; /*!< enable watchdog in debug mode */
- uint16_t bWinEnable : 1; /*!< enable watchdog window mode */
- uint16_t bUpdateEnable : 1; /*!< enable update of watchdog control */
- uint16_t bClkSrc : 2; /*!< watchdog clock source selection */
- uint16_t bPrescaler : 1; /*!< prescaler */
- }sBits; /*!< bitfield structure */
- uint16_t u16ETMeOut; /*!< watchdog ETMeout value */
- uint16_t u16WinETMe; /*!< watchdog window value */
- } WDOG_ConfigType, *WDOG_ConfigPtr; /*!< watchdog configuration structure type */
- /*! @} End of wdog_config_type */
- /******************************************************************************
- * Global variables
- ******************************************************************************/
- /******************************************************************************
- * Global functions
- ******************************************************************************/
- /******************************************************************************
- * define watchdog API list
- *
- *//*! @addtogroup wdog_api_list
- * @{
- *******************************************************************************/
- /*****************************************************************************//*!
- *
- * @brief set ETMe out value for WDOG.
- *
- * @param[in] u16ETMeOut ETMeout value to TOVAL register.
- *
- * @return none
- *
- * @ Pass/ Fail criteria: none
- *
- *****************************************************************************/
- __STATIC_INLINE void WDOG_SetETMeOut(uint16_t u16ETMeOut)
- {
- WDOG->CNT = 0x20C5;
- WDOG->CNT = 0x28D9;
- WDOG->TOVAL8B.TOVALL = u16ETMeOut;
- WDOG->TOVAL8B.TOVALH = u16ETMeOut >> 8;
- }
- /*****************************************************************************//*!
- *
- * @brief set window value for WDOG.
- *
- * @param[in] u16WinETMe window value to WIN register.
- *
- * @return none
- *
- * @ Pass/ Fail criteria: none
- *
- *****************************************************************************/
- __STATIC_INLINE void WDOG_SetWindow(uint16_t u16WinETMe)
- {
- WDOG->CNT = 0x20C5;
- WDOG->CNT = 0x28D9;
- WDOG->WIN8B.WINL = u16WinETMe;
- WDOG->WIN8B.WINH = u16WinETMe >> 8;
- }
- /*****************************************************************************//*!
- *
- * @brief check if watchdog reset occurs.
- *
- * @param none.
- *
- * @return TRUE if watchdog reset occurs, FALSE otherwise.
- *
- * @ Pass/ Fail criteria: none
- *****************************************************************************/
- __STATIC_INLINE uint8_t WDOG_IsReset(void)
- {
- if(SIM_GetStatus(SIM_SRSID_WDOG_MASK))
- {
- return (TRUE);
- }
- return (FALSE);
- }
- /*! @} End of wdog_api_list */
- void WDOG_Init(WDOG_ConfigPtr pConfig);
- void WDOG_DeInit(void);
- void WDOG_Disable(void);
- void WDOG_DisableWDOGEnableUpdate(void);
- void WDOG_Enable(void);
- void WDOG_Feed(void);
- void WDOG_SetETMeOut(uint16_t u16ETMeOut);
- void WDOG_SetWindow(uint16_t u16WinETMe);
- void WDOG_EnableUpdate(void);
- void WDOG_DisableUpdate(void);
- uint8_t WDOG_IsReset(void);
- #ifdef __cplusplus
- }
- #endif
- /********************************************************************/
- #endif /* __WDOG_H__ */
|