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