HAL_IWDT.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. HAL_StatusTypeDef HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)
  10. {
  11. if (hidt == NULL)
  12. {
  13. return HAL_ERROR;
  14. }
  15. System_Delay(1);
  16. System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
  17. System_Enable_RC32K();
  18. System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_IWDT, FUNC_ENABLE);
  19. /*Enable IWDT */
  20. hidt->Instance->CMDR = IWDT_ENABLE_COMMAND;
  21. System_Delay(10);
  22. /*Enable Write */
  23. hidt->Instance->CMDR = IWDT_WRITE_ENABLE_COMMAND;
  24. System_Delay(10);
  25. hidt->Instance->PR = hidt->Init.Prescaler;
  26. hidt->Instance->RLR = hidt->Init.Reload;
  27. hidt->Instance->WINR = hidt->Init.Window;
  28. hidt->Instance->WUTR = hidt->Init.Wakeup;
  29. System_Delay(1);
  30. while(hidt->Instance->SR & (0x0F)){}; // wait for configuration done
  31. if (hidt->Init.Reload > hidt->Init.Wakeup)
  32. {
  33. /*Enable Wake up */
  34. hidt->Instance->CMDR = IWDT_WAKEUP_ENABLE_COMMAND;
  35. }
  36. hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
  37. System_Delay(1);
  38. while(hidt->Instance->SR & (1 << 4)){};
  39. return HAL_OK;
  40. }
  41. HAL_StatusTypeDef HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)
  42. {
  43. hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
  44. System_Delay(1);
  45. while(hidt->Instance->SR & (1 << 4)){}; //wait for kick watchdog done
  46. return HAL_OK;
  47. }