HAL_WDT.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /***********************************************************************
  2. * Filename : HAL_WDT.c
  3. * Description : HAL WDT 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. * function : HAL_WDT_Feed
  11. * Description: WDT feed.
  12. * input :
  13. * none
  14. * return: none
  15. ************************************************************************/
  16. void HAL_WDT_Feed(WDT_HandleTypeDef* hwdt)
  17. {
  18. hwdt->Instance->FEED = 0xAA55A55A;
  19. }
  20. /************************************************************************
  21. * function : HAL_WDT_IRQHandler
  22. * Description: WDT interrupt service routine.
  23. * input :
  24. * none
  25. * return: none
  26. ************************************************************************/
  27. void HAL_WDT_IRQHandler(WDT_HandleTypeDef* hwdt)
  28. {
  29. volatile uint32_t wdt_ris = 0;
  30. wdt_ris = hwdt->Instance->RIS;
  31. HAL_WDT_Feed(hwdt);
  32. NVIC_ClearPendingIRQ(WDT_IRQn);
  33. }
  34. /************************************************************************
  35. * function : HAL_WDT_Init
  36. * Description: WDT initiation.
  37. * input :
  38. * pinit initiation parameters
  39. * return: none
  40. ************************************************************************/
  41. void HAL_WDT_Init(WDT_HandleTypeDef* hwdt)
  42. {
  43. System_Module_Enable(EN_WDT);
  44. System_Delay(1);
  45. System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
  46. System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE);
  47. hwdt->Instance->LOAD = hwdt->Init.WDTLoad;
  48. hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6);
  49. if (WDT_MODE_INT == hwdt->Init.WDTMode)
  50. {
  51. hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME;
  52. HAL_WDT_Int_Enable(hwdt);
  53. }
  54. }
  55. /************************************************************************
  56. * function : HAL_WDT_Start
  57. * Description: WDT start
  58. * input : none
  59. *
  60. * return: none
  61. ************************************************************************/
  62. void HAL_WDT_Start(WDT_HandleTypeDef* hwdt)
  63. {
  64. hwdt->Instance->CTRL |= WDT_ENABLE;
  65. }
  66. /************************************************************************
  67. * function : WDT_Stop
  68. * Description: WDT stop
  69. * input : none
  70. *
  71. * return: none
  72. ************************************************************************/
  73. void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt)
  74. {
  75. hwdt->Instance->CTRL &= WDT_DISABLE;
  76. }
  77. /************************************************************************
  78. * function : WDT_Int_Enable
  79. * Description: WDT int enable
  80. * input : none
  81. *
  82. * return: none
  83. ************************************************************************/
  84. void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt)
  85. {
  86. hwdt->Instance->CTRL |= WDT_INT_ENABLE;
  87. NVIC_ClearPendingIRQ(WDT_IRQn);
  88. NVIC_EnableIRQ(WDT_IRQn);
  89. }
  90. /************************************************************************
  91. * function : WDT_Int_Disable
  92. * Description: WDT int disable
  93. * input : none
  94. *
  95. * return: none
  96. ************************************************************************/
  97. void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt)
  98. {
  99. hwdt->Instance->CTRL &= WDT_INT_DISABLE;
  100. }