apm32f10x_wwdt.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*!
  2. * @file apm32f10x_wwdt.c
  3. *
  4. * @brief This file contains all the functions for the WWDT peripheral
  5. *
  6. * @version V1.0.1
  7. *
  8. * @date 2021-03-23
  9. *
  10. */
  11. #include "apm32f10x_wwdt.h"
  12. #include "apm32f10x_rcm.h"
  13. /** @addtogroup Peripherals_Library Standard Peripheral Library
  14. @{
  15. */
  16. /** @addtogroup WWDT_Driver WWDT Driver
  17. @{
  18. */
  19. /** @addtogroup WWDT_Fuctions Fuctions
  20. @{
  21. */
  22. /*!
  23. * @brief Reset the WWDT peripheral registers
  24. *
  25. * @param None
  26. *
  27. * @retval None
  28. */
  29. void WWDT_Reset(void)
  30. {
  31. RCM_EnableAPB1PeriphReset(RCM_APB1_PERIPH_WWDT);
  32. RCM_DisableAPB1PeriphReset(RCM_APB1_PERIPH_WWDT);
  33. }
  34. /*!
  35. * @brief Config the WWDT Timebase
  36. *
  37. * @param timebase: WWDT Prescaler
  38. * The parameter can be one of following values:
  39. * @arg WWDT_TIME_BASE_1: WWDT counter clock = (PCLK1/4096)/1
  40. * @arg WWDT_TIME_BASE_2: WWDT counter clock = (PCLK1/4096)/2
  41. * @arg WWDT_TIME_BASE_4: WWDT counter clock = (PCLK1/4096)/4
  42. * @arg WWDT_TIME_BASE_8: WWDT counter clock = (PCLK1/4096)/8
  43. *
  44. * @retval None
  45. */
  46. void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase)
  47. {
  48. __IO uint32_t reg;
  49. reg = WWDT->CFG & 0xFFFFFE7F;
  50. reg |= timeBase;
  51. WWDT->CFG = reg;
  52. }
  53. /*!
  54. * @brief Config the WWDT Window data
  55. *
  56. * @param windowdata: window data which compare with the downcounter
  57. *
  58. * @retval None
  59. *
  60. * @note The windowdata must be lower than 0x80
  61. */
  62. void WWDT_ConfigWindowData(uint8_t windowData)
  63. {
  64. __IO uint32_t reg;
  65. reg = WWDT->CFG & 0xFFFFFF80;
  66. reg |= windowData & 0x7F;
  67. WWDT->CFG = reg;
  68. }
  69. /*!
  70. * @brief Config the WWDT counter value
  71. *
  72. * @param counter: Specifies the watchdog counter value
  73. *
  74. * @retval None
  75. *
  76. * @note The counter between 0x40 and 0x7F
  77. */
  78. void WWDT_ConfigCounter(uint8_t counter)
  79. {
  80. WWDT->CTRL = counter & 0x7F;
  81. }
  82. /*!
  83. * @brief Enable the WWDT Early Wakeup interrupt
  84. *
  85. * @param None
  86. *
  87. * @retval None
  88. */
  89. void WWDT_EnableEWI(void)
  90. {
  91. WWDT->CFG_B.EWIEN = SET;
  92. }
  93. /*!
  94. * @brief Enable WWDT and set the counter value
  95. *
  96. * @param counter: the window watchdog counter value
  97. *
  98. * @retval None
  99. *
  100. * @note The counter between 0x40 and 0x7F
  101. */
  102. void WWDT_Enable(uint8_t counter)
  103. {
  104. WWDT->CTRL = counter | 0x00000080;
  105. }
  106. /*!
  107. * @brief Read the Early Wakeup interrupt flag
  108. *
  109. * @param None
  110. *
  111. * @retval the state of the Early Wakeup interrupt flagte
  112. */
  113. uint8_t WWDT_ReadFlag(void)
  114. {
  115. return (uint8_t) (WWDT->STS);
  116. }
  117. /*!
  118. * @brief Clear the Early Wakeup interrupt flag
  119. *
  120. * @param None
  121. *
  122. * @retval None
  123. */
  124. void WWDT_ClearFlag(void)
  125. {
  126. WWDT->STS_B.EWIFLG = RESET;
  127. }
  128. /**@} end of group WWDT_Fuctions*/
  129. /**@} end of group WWDT_Driver */
  130. /**@} end of group Peripherals_Library*/