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     volatile uint32_t wdt_ris = 0;
31     wdt_ris = hwdt->Instance->RIS;
32     HAL_WDT_Feed(hwdt);
33     NVIC_ClearPendingIRQ(WDT_IRQn);
34 }
35 
36 /************************************************************************
37  * function   : HAL_WDT_Init
38  * Description: WDT initiation.
39  * input :
40  *         pinit initiation parameters
41  * return: none
42  ************************************************************************/
HAL_WDT_Init(WDT_HandleTypeDef * hwdt)43 void HAL_WDT_Init(WDT_HandleTypeDef* hwdt)
44 {
45     System_Module_Enable(EN_WDT);
46     System_Delay(1);
47     System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
48     System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE);
49 
50     hwdt->Instance->LOAD = hwdt->Init.WDTLoad;
51     hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6);
52 
53     if (WDT_MODE_INT == hwdt->Init.WDTMode)
54     {
55         hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME;
56         HAL_WDT_Int_Enable(hwdt);
57     }
58 }
59 
60 /************************************************************************
61  * function   : HAL_WDT_Start
62  * Description: WDT start
63  * input : none
64  *
65  * return: none
66  ************************************************************************/
HAL_WDT_Start(WDT_HandleTypeDef * hwdt)67 void HAL_WDT_Start(WDT_HandleTypeDef* hwdt)
68 {
69     hwdt->Instance->CTRL |= WDT_ENABLE;
70 }
71 
72 /************************************************************************
73  * function   : WDT_Stop
74  * Description: WDT stop
75  * input : none
76  *
77  * return: none
78  ************************************************************************/
HAL_WDT_Stop(WDT_HandleTypeDef * hwdt)79 void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt)
80 {
81     hwdt->Instance->CTRL &= WDT_DISABLE;
82 }
83 
84 /************************************************************************
85  * function   : WDT_Int_Enable
86  * Description: WDT int enable
87  * input : none
88  *
89  * return: none
90  ************************************************************************/
HAL_WDT_Int_Enable(WDT_HandleTypeDef * hwdt)91 void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt)
92 {
93     hwdt->Instance->CTRL |= WDT_INT_ENABLE;
94     NVIC_ClearPendingIRQ(WDT_IRQn);
95     NVIC_EnableIRQ(WDT_IRQn);
96 }
97 
98 /************************************************************************
99  * function   : WDT_Int_Disable
100  * Description: WDT int disable
101  * input : none
102  *
103  * return: none
104  ************************************************************************/
HAL_WDT_Int_Disable(WDT_HandleTypeDef * hwdt)105 void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt)
106 {
107     hwdt->Instance->CTRL &= WDT_INT_DISABLE;
108 }
109 
110 
111