1 /***********************************************************************
2  * Filename    : HAL_IWDT.c
3  * Description : HAL IWDT 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 
HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)11 HAL_StatusTypeDef HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)
12 {
13     if (hidt == NULL)
14     {
15         return HAL_ERROR;
16     }
17 
18     System_Delay(1);
19 
20     System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
21     System_Enable_RC32K();
22     System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_IWDT, FUNC_ENABLE);
23     /*Enable IWDT  */
24     hidt->Instance->CMDR = IWDT_ENABLE_COMMAND;
25     System_Delay(10);
26     /*Enable Write  */
27     hidt->Instance->CMDR = IWDT_WRITE_ENABLE_COMMAND;
28     System_Delay(10);
29 
30     hidt->Instance->PR = hidt->Init.Prescaler;
31     hidt->Instance->RLR = hidt->Init.Reload;
32     hidt->Instance->WINR = hidt->Init.Window;
33     hidt->Instance->WUTR = hidt->Init.Wakeup;
34     System_Delay(1);
35     while(hidt->Instance->SR & (0x0F)){}; // wait for configuration done
36 
37     if (hidt->Init.Reload > hidt->Init.Wakeup)
38     {
39         /*Enable Wake up  */
40         hidt->Instance->CMDR = IWDT_WAKEUP_ENABLE_COMMAND;
41     }
42 
43     hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
44     System_Delay(1);
45     while(hidt->Instance->SR & (1 << 4)){};
46 
47     return HAL_OK;
48 
49 }
50 
HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)51 HAL_StatusTypeDef HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)
52 {
53     hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
54     System_Delay(1);
55     while(hidt->Instance->SR & (1 << 4)){};  //wait for kick watchdog done
56 
57     return HAL_OK;
58 }
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72