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