rt-thread/bsp/acm32/acm32f4xx-nucleo/libraries/HAL_Driver/Src/HAL_IWDT.c

73 lines
1.7 KiB
C

/***********************************************************************
* Filename : HAL_IWDT.c
* Description : HAL IWDT driver source file
* Author(s) : CWT
* version : V1.0
* Modify date : 2020-04-17
***********************************************************************/
#include "ACM32Fxx_HAL.h"
HAL_StatusTypeDef HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)
{
if (hidt == NULL)
{
return HAL_ERROR;
}
System_Module_Enable(EN_IWDT);
System_Delay(1);
System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
System_Enable_RC32K();
System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_IWDT, FUNC_ENABLE);
/*Enable IWDT */
hidt->Instance->CMDR = IWDT_ENABLE_COMMAND;
System_Delay(10);
/*Enable Write */
hidt->Instance->CMDR = IWDT_WRITE_ENABLE_COMMAND;
System_Delay(10);
hidt->Instance->PR = hidt->Init.Prescaler;
hidt->Instance->RLR = hidt->Init.Reload;
hidt->Instance->WINR = hidt->Init.Window;
hidt->Instance->WUTR = hidt->Init.Wakeup;
System_Delay(1);
while(hidt->Instance->SR & (0x0F)){}; // wait for configuration done
if (hidt->Init.Reload > hidt->Init.Wakeup)
{
/*Enable Wake up */
hidt->Instance->CMDR = IWDT_WAKEUP_ENABLE_COMMAND;
}
hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
System_Delay(1);
while(hidt->Instance->SR & (1 << 4)){};
return HAL_OK;
}
HAL_StatusTypeDef HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)
{
hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
System_Delay(1);
while(hidt->Instance->SR & (1 << 4)){}; //wait for kick watchdog done
return HAL_OK;
}