fm33lc0xx_fl_iwdt.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /**
  2. ****************************************************************************************************
  3. * @file fm33lc0xx_fl_iwdt.c
  4. * @author FMSH Application Team
  5. * @brief Src file of IWDT FL Module
  6. ****************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) [2019] [Fudan Microelectronics]
  10. * THIS SOFTWARE is licensed under the Mulan PSL v1.
  11. * can use this software according to the terms and conditions of the Mulan PSL v1.
  12. * You may obtain a copy of Mulan PSL v1 at:
  13. * http://license.coscl.org.cn/MulanPSL
  14. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
  16. * PURPOSE.
  17. * See the Mulan PSL v1 for more details.
  18. *
  19. ****************************************************************************************************
  20. */
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "fm33lc0xx_fl_rcc.h"
  23. #include "fm33lc0xx_fl_iwdt.h"
  24. #include "fm33_assert.h"
  25. /** @addtogroup FM33LC0XX_FL_Driver
  26. * @{
  27. */
  28. /** @addtogroup IWDT
  29. * @{
  30. */
  31. /* Private macros ------------------------------------------------------------*/
  32. /** @addtogroup IWDT_FL_Private_Macros
  33. * @{
  34. */
  35. #define IS_IWDT_INSTANCE(INTANCE) ((INTANCE) == IWDT)
  36. #define IS_FL_IWDT_WINDOWSVEL(__VALUE__) ((__VALUE__) < 0xFFF)
  37. #define IS_FL_IWDT_OVERFLOWPERIOD(__VALUE__) (((__VALUE__) == FL_IWDT_PERIOD_125MS)||\
  38. ((__VALUE__) == FL_IWDT_PERIOD_250MS)||\
  39. ((__VALUE__) == FL_IWDT_PERIOD_500MS)||\
  40. ((__VALUE__) == FL_IWDT_PERIOD_1000MS)||\
  41. ((__VALUE__) == FL_IWDT_PERIOD_2000MS)||\
  42. ((__VALUE__) == FL_IWDT_PERIOD_4000MS)||\
  43. ((__VALUE__) == FL_IWDT_PERIOD_8000MS)||\
  44. ((__VALUE__) == FL_IWDT_PERIOD_16000MS))
  45. /**
  46. * @}
  47. */
  48. /** @addtogroup IWDT_FL_EF_Init
  49. * @{
  50. */
  51. /**
  52. * @brief 复位IWDT外设
  53. *
  54. * @note 此函数只能用于配制前复位外设,因为IWDT开启后不可以关闭
  55. *
  56. * @param IWDTx 外设入口地址
  57. *
  58. * @retval 错误状态,可能值:
  59. * -FL_PASS 外设寄存器值恢复复位值
  60. * -FL_FAIL 未成功执行
  61. */
  62. FL_ErrorStatus FL_IWDT_DeInit(IWDT_Type *IWDTx)
  63. {
  64. assert_param(IS_IWDT_INSTANCE(IWDTx));
  65. return FL_PASS;
  66. }
  67. /**
  68. * @brief 配置IWDT
  69. *
  70. * @note IWTD使能后将无法关闭,直到下一次芯片复位
  71. *
  72. * @param IWDTx 外设入口地址
  73. * @param IWDT_InitStruct 指向 @ref FL_IWDT_InitTypeDef 结构体的指针
  74. *
  75. * @retval 错误状态,可能值:
  76. * -FL_PASS 配置成功
  77. * -FL_FAIL 配置过程发生错误
  78. */
  79. FL_ErrorStatus FL_IWDT_Init(IWDT_Type *IWDTx, FL_IWDT_InitTypeDef *IWDT_InitStruct)
  80. {
  81. FL_ErrorStatus status = FL_PASS;
  82. /* 入口参数检查 */
  83. assert_param(IS_IWDT_INSTANCE(IWDTx));
  84. assert_param(IS_FL_IWDT_WINDOWSVEL(IWDT_InitStruct->iwdtWindows));
  85. assert_param(IS_FL_IWDT_OVERFLOWPERIOD(IWDT_InitStruct->overflowPeriod));
  86. /* 开启总线时钟 */
  87. FL_RCC_EnableGroup1BusClock(FL_RCC_GROUP1_BUSCLK_IWDT);
  88. /* 配置独立看门狗溢出周期 */
  89. FL_IWDT_SetPeriod(IWDTx, IWDT_InitStruct->overflowPeriod);
  90. /* 配置独立看门狗清狗窗口*/
  91. FL_IWDT_WriteWindow(IWDTx, IWDT_InitStruct->iwdtWindows);
  92. /* 启动看门狗 */
  93. FL_IWDT_ReloadCounter(IWDTx);
  94. return status;
  95. }
  96. /**
  97. * @brief 将 @ref FL_IWDT_InitTypeDef 结构体初始化为默认配置
  98. * @param IWDT_InitStruct 指向 @ref FL_IWDT_InitTypeDef 结构体的指针
  99. *
  100. * @retval None
  101. */
  102. void FL_IWDT_StructInit(FL_IWDT_InitTypeDef *IWDT_InitStruct)
  103. {
  104. /* 默认不使用窗口 */
  105. IWDT_InitStruct->iwdtWindows = 0;
  106. /*最长溢出时间*/
  107. IWDT_InitStruct->overflowPeriod = FL_IWDT_PERIOD_500MS;
  108. }
  109. /**
  110. *@}
  111. */
  112. /**
  113. *@}
  114. */
  115. /**
  116. *@}
  117. */
  118. /******************************************* END OF FILE *******************************************/