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)11HAL_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)51HAL_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