#ifndef _HAL_WATCHDOG_H_
#define _HAL_WATCHDOG_H_

#include <stdio.h>

typedef enum
{
    WDOG_DEFER_10ms = 0x00000000UL, ///<10ms后复位
    WDOG_DEFER_125ms = 0x00000100UL, ///<125ms后复位
    WDOG_DEFER_250ms = 0x00000200UL, ///<250ms后复位
    WDOG_DEFER_500ms = 0x00000300UL, ///<500ms后复位
    WDOG_DEFER_MASK = 0x00000300UL,
} WDOG_DefferEnum;

typedef enum
{
    WDOG_TIME_10ms = 0x00000000UL, ///<10ms后复位
    WDOG_TIME_125ms = 0x00000010UL, ///<125ms后复位
    WDOG_TIME_250ms = 0x00000020UL, ///<250ms后复位
    WDOG_TIME_500ms = 0x00000030UL, ///<500ms后复位
    WDOG_TIME_1s = 0x00000040UL, ///<1s后复位
    WDOG_TIME_2s = 0x00000050UL, ///<2s后复位
    WDOG_TIME_4s = 0x00000060UL, ///<4s后复位
    WDOG_TIME_8s = 0x00000070UL, ///<8s后复位
    WDOG_TIME_MASK = 0x00000070UL,
} WDOG_TimeEnum;


#define WDOG_PD                         0x00000400UL///<看门狗计数溢出pending
#define WDOG_DEFER_EN                   0x00000080UL///<看门狗延时触发使能
#define WDOG_RESET_EN                   0x00000008UL///<看门狗复位使能
#define WDOG_IRQ_EN                     0x00000004UL///<看门狗计数溢出中断使能
#define WDOG_CLR                        0x00000002UL///<看门狗计数清空
#define WDOG_EN                         0x00000001UL///<看门狗使能位




void hal_watchdog_init(void);
void hal_Watchdog_clearITPendingBit(void);
uint32_t hal_watchdog_get_timeout(void);
void hal_watchdog_set_timeout(uint32_t timeout);
uint32_t hal_watchdog_get_timeLeft(void);
void hal_watchdog_keep_alive(void);
void hal_watchdog_start(void);
void hal_watchdog_stop(void);

#endif
