HAL_WDT.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. #ifdef __GNUC__
  30. #pragma GCC diagnostic push
  31. #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
  32. #endif
  33. volatile uint32_t wdt_ris = 0;
  34. wdt_ris = hwdt->Instance->RIS;
  35. HAL_WDT_Feed(hwdt);
  36. NVIC_ClearPendingIRQ(WDT_IRQn);
  37. #ifdef __GNUC__
  38. #pragma GCC diagnostic pop
  39. #endif
  40. }
  41. /************************************************************************
  42. * function : HAL_WDT_Init
  43. * Description: WDT initiation.
  44. * input :
  45. * pinit initiation parameters
  46. * return: none
  47. ************************************************************************/
  48. void HAL_WDT_Init(WDT_HandleTypeDef* hwdt)
  49. {
  50. System_Module_Enable(EN_WDT);
  51. System_Delay(1);
  52. System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);
  53. System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_WDT, FUNC_ENABLE);
  54. hwdt->Instance->LOAD = hwdt->Init.WDTLoad;
  55. hwdt->Instance->CTRL = (hwdt->Instance->CTRL & ~0x47) | (hwdt->Init.WDTDivisor) | (hwdt->Init.WDTMode << 6);
  56. if (WDT_MODE_INT == hwdt->Init.WDTMode)
  57. {
  58. hwdt->Instance->INTCLRTIME = hwdt->Init.WDTINTCLRTIME;
  59. HAL_WDT_Int_Enable(hwdt);
  60. }
  61. }
  62. /************************************************************************
  63. * function : HAL_WDT_Start
  64. * Description: WDT start
  65. * input : none
  66. *
  67. * return: none
  68. ************************************************************************/
  69. void HAL_WDT_Start(WDT_HandleTypeDef* hwdt)
  70. {
  71. hwdt->Instance->CTRL |= WDT_ENABLE;
  72. }
  73. /************************************************************************
  74. * function : WDT_Stop
  75. * Description: WDT stop
  76. * input : none
  77. *
  78. * return: none
  79. ************************************************************************/
  80. void HAL_WDT_Stop(WDT_HandleTypeDef* hwdt)
  81. {
  82. hwdt->Instance->CTRL &= WDT_DISABLE;
  83. }
  84. /************************************************************************
  85. * function : WDT_Int_Enable
  86. * Description: WDT int enable
  87. * input : none
  88. *
  89. * return: none
  90. ************************************************************************/
  91. void HAL_WDT_Int_Enable(WDT_HandleTypeDef* hwdt)
  92. {
  93. hwdt->Instance->CTRL |= WDT_INT_ENABLE;
  94. NVIC_ClearPendingIRQ(WDT_IRQn);
  95. NVIC_EnableIRQ(WDT_IRQn);
  96. }
  97. /************************************************************************
  98. * function : WDT_Int_Disable
  99. * Description: WDT int disable
  100. * input : none
  101. *
  102. * return: none
  103. ************************************************************************/
  104. void HAL_WDT_Int_Disable(WDT_HandleTypeDef* hwdt)
  105. {
  106. hwdt->Instance->CTRL &= WDT_INT_DISABLE;
  107. }