Realtek/inc/peripheral/rtl876x_wdg.h

157 lines
4.1 KiB
C
Raw Permalink Normal View History

2025-11-25 10:21:47 +08:00
/**
*********************************************************************************************************
* Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
*********************************************************************************************************
* @file rtl876x_wdg.h
* @brief header file of watch dog driver.
* @details
* @author Lory_xu
* @date 2016-06-12
* @version v0.1
* *********************************************************************************************************
*/
#ifndef _RTL876X_WDG_H_
#define _RTL876X_WDG_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "rtl876x.h"
#include "rtl876x_bitfields.h"
/** @addtogroup IO Peripheral Drivers
*
* @defgroup WATCH_DOG WATCH_DOG
* @brief Watch Dog driver module
* \ingroup IO
* @{
*/
/** @defgroup WATCH_DOG_Exported_Types Watch Dog Exported Types
* @{
*/
typedef enum
{
INTERRUPT_CPU = 0,
RESET_ALL_EXCEPT_AON = 1,
RESET_CORE_DOMAIN = 2,
RESET_ALL = 3
} T_WDG_MODE;
/**
* wdg reset reason introduction:
* 1.If you want to get reset reason from aon 0x16, deviding three types:
* a) HW reset: aon reg 0x16 is cleared to 0, magic pattern on ram will change
* b) SW RESET_ALL: aon reg 0x16 is cleared to 0,but magic pattern on ram not change
* c) SW RESET_ALL_EXCEPT_AON: obtain reset reason by reading aon reg 0x16 .
* 2. Attention: don't use 0x1 as your reset reason when using RESET_ALL_EXCEPT_AON type! Because 0x1 is default value.
*/
typedef enum
{
RESET_REASON_HW = 0x0, /* HW reset */
RESET_REASON_WDG_TIMEOUT = 0x1,
RESET_REASON_POWERDOWN = 0xC0,
SW_RESET_APP_START = 0xD0,
SWITCH_HCI_MODE = 0xD1,
SWITCH_TEST_MODE = 0xD2,
DFU_SWITCH_TO_OTA_MODE = 0xD3,
DFU_ACTIVE_RESET = 0xD4,
DFU_FAIL_RESET = 0xD5,
UPPER_CMD_RESET,
SINGLE_TONE_TIMEOUT_RESET,
UART_CMD_RESET,
RESET_REASON_FACTORY_RESET,
RESET_REASON_LPC_TRIGGER,
KEYBOARD_LOW_POWER_RESET,
MOUSE_LOW_POWER_RESET,
MOUSE_SWITCH_TO_USB_MODE,
MOUSE_SWITCH_TO_UART_DFU_MODE,
EXIT_RF_TEST_MODE,
SW_RESET_APP_END = 0xFF,
} T_SW_RESET_REASON;
typedef void (*APP_CB_WDG_RESET_TYPE)(T_WDG_MODE wdg_mode, T_SW_RESET_REASON reset_reason);
typedef bool (*BOOL_WDG_CB)(T_WDG_MODE wdg_mode, T_SW_RESET_REASON reset_reason);
/**
* @}
*/
/** @defgroup WATCH_DOG_Exported_Variables Watch Dog Exported Variables
* @{
*/
extern APP_CB_WDG_RESET_TYPE app_cb_wdg_reset;
extern BOOL_WDG_CB user_wdg_cb;
/**
* @}
*/
/** @defgroup WATCH_DOG_Exported_Functions Watch Dog Exported Functions
* @{
*/
/**
* @brief Watch Dog Clock Enable.
*/
extern void WDG_ClockEnable(void);
/**
* @brief Watch Dog Timer Config.
* @param div_factor: 16Bit: 32.768k/(1+divfactor).
* @param cnt_limit: 2^(cnt_limit+1) - 1 ; max 11~15 = 0xFFF.
* @param wdg_mode: 0: interrupt CPU
* 1: reset all except aon
* 2: reset core domain
* 3: reset all
* @retval none.
*/
extern void WDG_Config(uint16_t div_factor, uint8_t cnt_limit, T_WDG_MODE wdg_mode);
/**
* @brief Watch Dog Timer Enable.
NOTE: When call WDG_Disable() before entering dlps, must call WDG_Config() before WDG_Enable() when exiting dlps!
*/
extern void WDG_Enable(void);
/**
* @brief Watch Dog Timer Disable.
*/
extern void WDG_Disable(void);
/**
* @brief Watch Dog Timer Restart.
*/
extern void WDG_Restart(void);
/**
* @brief Watch Dog System Reset.
* @param wdg_mode: 0: interrupt CPU
* 1: reset all except aon
* 2: reset core domain
* 3: reset all
*/
extern void WDG_SystemReset(T_WDG_MODE wdg_mode, T_SW_RESET_REASON reset_reason);
extern T_SW_RESET_REASON reset_reason_get(void);
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif //_RTL876X_WDG_H_