1 /*! 2 * @file apm32f4xx_iwdt.c 3 * 4 * @brief This file provides all the IWDT firmware functions 5 * 6 * @version V1.0.2 7 * 8 * @date 2022-06-23 9 * 10 * @attention 11 * 12 * Copyright (C) 2021-2022 Geehy Semiconductor 13 * 14 * You may not use this file except in compliance with the 15 * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). 16 * 17 * The program is only for reference, which is distributed in the hope 18 * that it will be usefull and instructional for customers to develop 19 * their software. Unless required by applicable law or agreed to in 20 * writing, the program is distributed on an "AS IS" BASIS, WITHOUT 21 * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions 23 * and limitations under the License. 24 */ 25 26 #include "apm32f4xx_iwdt.h" 27 28 /** @addtogroup APM32F4xx_StdPeriphDriver 29 @{ 30 */ 31 32 /** @defgroup IWDT_Driver 33 * @brief IWDT driver modules 34 @{ 35 */ 36 37 /** @defgroup IWDT_Functions 38 @{ 39 */ 40 41 /*! 42 * @brief Enable IWDT 43 * 44 * @param None 45 * 46 * @retval None 47 */ IWDT_Enable(void)48void IWDT_Enable(void) 49 { 50 IWDT->KEY = IWDT_KEYWORD_ENABLE; 51 } 52 53 /*! 54 * @brief Reload the IWDT counter with value 55 * 56 * @param None 57 * 58 * @retval None 59 */ IWDT_Refresh(void)60void IWDT_Refresh(void) 61 { 62 IWDT->KEY = IWDT_KEYWORD_RELOAD; 63 } 64 65 /*! 66 * @brief Set IWDT count reload values 67 * 68 * @param reload: IWDT count reload values 69 * 70 * @retval None 71 */ IWDT_ConfigReload(uint16_t reload)72void IWDT_ConfigReload(uint16_t reload) 73 { 74 IWDT->CNTRLD = reload; 75 } 76 77 /*! 78 * @brief Enable the IWDT write access 79 * 80 * @param None 81 * 82 * @retval None 83 */ IWDT_EnableWriteAccess(void)84void IWDT_EnableWriteAccess(void) 85 { 86 IWDT->KEY_B.KEY = IWDT_WRITEACCESS_ENABLE; 87 } 88 89 /*! 90 * @brief Disable the IWDT write access 91 * 92 * @param None 93 * 94 * @retval None 95 */ IWDT_DisableWriteAccess(void)96void IWDT_DisableWriteAccess(void) 97 { 98 IWDT->KEY_B.KEY = IWDT_WRITEACCESS_DISABLE; 99 } 100 101 /*! 102 * @brief Set IWDT frequency divider values 103 * 104 * @param div: IWDT frequency divider values 105 * This parameter can be one of the following values: 106 * @arg IWDT_DIVIDER_4 : prescaler divider equal to 4 107 * @arg IWDT_DIVIDER_8 : prescaler divider equal to 8 108 * @arg IWDT_DIVIDER_16 : prescaler divider equal to 16 109 * @arg IWDT_DIVIDER_32 : prescaler divider equal to 32 110 * @arg IWDT_DIVIDER_64 : prescaler divider equal to 64 111 * @arg IWDT_DIVIDER_128: prescaler divider equal to 128 112 * @arg IWDT_DIVIDER_256: prescaler divider equal to 256 113 * 114 * @retval None 115 */ IWDT_ConfigDivider(uint8_t div)116void IWDT_ConfigDivider(uint8_t div) 117 { 118 IWDT->PSC = div; 119 } 120 121 /*! 122 * @brief Read the specified IWDT flag 123 * 124 * @param flag: specifies the flag to read 125 * This parameter can be one of the following values: 126 * @arg IWDT_FLAG_PSCU : Watchdog Prescaler Factor Update flag 127 * @arg IWDT_FLAG_CNTU : Watchdog Counter Reload Value Update flag 128 * 129 * @retval status of IWDT_FLAG (SET or RESET) 130 * 131 * @note 132 */ IWDT_ReadStatusFlag(uint16_t flag)133uint8_t IWDT_ReadStatusFlag(uint16_t flag) 134 { 135 uint8_t bitStatus = RESET; 136 137 if ((IWDT->STS & flag) != (uint32_t)RESET) 138 { 139 bitStatus = SET; 140 } 141 else 142 { 143 bitStatus = RESET; 144 } 145 return bitStatus; 146 } 147 148 /**@} end of group IWDT_Functions */ 149 /**@} end of group IWDT_Driver */ 150 /**@} end of group APM32F4xx_StdPeriphDriver */ 151