HAL_IWDT.c 1.7 KB

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