1 /***********************************************************************
2  * Filename    : HAL_WDT.c
3  * Description : HAL WDT driver source file
4  * Author(s)   : CWT
5  * version     : V1.0
6  * Modify date : 2020-04-17
7  ***********************************************************************/
8 #include  "ACM32Fxx_HAL.h"
9 
10 /************************************************************************
11  * function   : HAL_WDT_Feed
12  * Description: WDT feed.
13  * input :
14  *         none
15  * return: none
16  ************************************************************************/
HAL_WDT_Feed(WDT_HandleTypeDef * hwdt)17 void HAL_WDT_Feed(WDT_HandleTypeDef* hwdt)
18 {
19     hwdt->Instance->FEED = 0xAA55A55A;
20 }
21 /************************************************************************
22  * function   : HAL_WDT_IRQHandler
23  * Description: WDT interrupt service routine.
24  * input :
25  *         none
26  * return: none
27  ************************************************************************/
HAL_WDT_IRQHandler(WDT_HandleTypeDef * hwdt)28 void HAL_WDT_IRQHandler(WDT_HandleTypeDef* hwdt)
29 {
30 #ifdef __GNUC__
31     #pragma GCC diagnostic push
32     #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
33 #endif
34     volatile uint32_t wdt_ris = 0;
35     wdt_ris = hwdt->Instance->RIS;
36     HAL_WDT_Feed(hwdt);
37     NVIC_ClearPendingIRQ(WDT_IRQn);
38 #ifdef __GNUC__
39     #pragma GCC diagnostic pop
40 #endif
41 }
42 
43 /************************************************************************
44  * function   : HAL_WDT_Init
45  * Description: WDT initiation.
46  * input :
47  *         pinit initiation parameters
48  * return: none
49  ************************************************************************/
HAL_WDT_Init(WDT_HandleTypeDef * hwdt)50 void HAL_WDT_Init(WDT_HandleTypeDef* hwdt)
51 {
52     System_Module_Enable(EN_WDT);
53     System_Delay(1);
54     System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
55     System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE);
56 
57     hwdt->Instance->LOAD = hwdt->Init.WDTLoad;
58     hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6);
59 
60     if (WDT_MODE_INT == hwdt->Init.WDTMode)
61     {
62         hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME;
63         HAL_WDT_Int_Enable(hwdt);
64     }
65 }
66 
67 /************************************************************************
68  * function   : HAL_WDT_Start
69  * Description: WDT start
70  * input : none
71  *
72  * return: none
73  ************************************************************************/
HAL_WDT_Start(WDT_HandleTypeDef * hwdt)74 void HAL_WDT_Start(WDT_HandleTypeDef* hwdt)
75 {
76     hwdt->Instance->CTRL |= WDT_ENABLE;
77 }
78 
79 /************************************************************************
80  * function   : WDT_Stop
81  * Description: WDT stop
82  * input : none
83  *
84  * return: none
85  ************************************************************************/
HAL_WDT_Stop(WDT_HandleTypeDef * hwdt)86 void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt)
87 {
88     hwdt->Instance->CTRL &= WDT_DISABLE;
89 }
90 
91 /************************************************************************
92  * function   : WDT_Int_Enable
93  * Description: WDT int enable
94  * input : none
95  *
96  * return: none
97  ************************************************************************/
HAL_WDT_Int_Enable(WDT_HandleTypeDef * hwdt)98 void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt)
99 {
100     hwdt->Instance->CTRL |= WDT_INT_ENABLE;
101     NVIC_ClearPendingIRQ(WDT_IRQn);
102     NVIC_EnableIRQ(WDT_IRQn);
103 }
104 
105 /************************************************************************
106  * function   : WDT_Int_Disable
107  * Description: WDT int disable
108  * input : none
109  *
110  * return: none
111  ************************************************************************/
HAL_WDT_Int_Disable(WDT_HandleTypeDef * hwdt)112 void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt)
113 {
114     hwdt->Instance->CTRL &= WDT_INT_DISABLE;
115 }
116 
117 
118