73 lines
1.7 KiB
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|