1 ////////////////////////////////////////////////////////////////////////////////
2 /// @file hal_iwdg.c
3 /// @author AE TEAM
4 /// @brief THIS FILE PROVIDES ALL THE IWDG FIRMWARE FUNCTIONS.
5 ////////////////////////////////////////////////////////////////////////////////
6 /// @attention
7 ///
8 /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
9 /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
10 /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
11 /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
12 /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
13 /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
14 ///
15 /// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
16 ////////////////////////////////////////////////////////////////////////////////
17
18 // Define to prevent recursive inclusion
19 #define _HAL_IWDG_C_
20
21 // Files includes
22 #include "hal_iwdg.h"
23
24 ////////////////////////////////////////////////////////////////////////////////
25 /// @addtogroup MM32_Hardware_Abstract_Layer
26 /// @{
27
28 ////////////////////////////////////////////////////////////////////////////////
29 /// @addtogroup IWDG_HAL
30 /// @{
31
32 ////////////////////////////////////////////////////////////////////////////////
33 /// @addtogroup IWDG_Exported_Functions
34 /// @{
35
36 ////////////////////////////////////////////////////////////////////////////////
37 /// @brief Enables or disables write access to IWDG_PR and IWDG_RLR
38 /// registers.
39 /// @param write_access: new state of write access to IWDG_PR and
40 /// IWDG_RLR registers.
41 /// This parameter can be one of the following values:
42 /// @arg IWDG_WriteAccess_Enable: Enable write access to
43 /// IWDG_PR and IWDG_RLR registers
44 /// @arg IWDG_WriteAccess_Disable: Disable write access to
45 /// IWDG_PR and IWDG_RLR registers
46 /// @retval None.
47 ////////////////////////////////////////////////////////////////////////////////
IWDG_WriteAccessCmd(u16 write_access)48 void IWDG_WriteAccessCmd(u16 write_access)
49 {
50 IWDG->KR = write_access;
51 }
52
53 ////////////////////////////////////////////////////////////////////////////////
54 /// @brief Sets IWDG Prescaler value.
55 /// @param prescaler: specifies the IWDG Prescaler value.
56 /// This parameter can be one of the following values:
57 /// @arg IWDG_Prescaler_4: IWDG prescaler set to 4
58 /// @arg IWDG_Prescaler_8: IWDG prescaler set to 8
59 /// @arg IWDG_Prescaler_16: IWDG prescaler set to 16
60 /// @arg IWDG_Prescaler_32: IWDG prescaler set to 32
61 /// @arg IWDG_Prescaler_64: IWDG prescaler set to 64
62 /// @arg IWDG_Prescaler_128: IWDG prescaler set to 128
63 /// @arg IWDG_Prescaler_256: IWDG prescaler set to 256
64 /// @retval None.
65 ////////////////////////////////////////////////////////////////////////////////
IWDG_SetPrescaler(u8 prescaler)66 void IWDG_SetPrescaler(u8 prescaler)
67 {
68 IWDG->PR = prescaler;
69 PVU_CheckStatus();
70 }
71
72 ////////////////////////////////////////////////////////////////////////////////
73 /// @brief Set IWDG reload value.
74 /// @param reload: specifies the IWDG reload value.
75 /// This parameter must be a number between 0 and 0x0FFF.
76 /// @retval None.
77 ////////////////////////////////////////////////////////////////////////////////
IWDG_SetReload(u16 reload)78 void IWDG_SetReload(u16 reload)
79 {
80 IWDG->RLR = reload;
81 RVU_CheckStatus();
82 }
83
84 ////////////////////////////////////////////////////////////////////////////////
85 /// @brief Get IWDG reload value.
86 /// @param None.
87 /// @retval reload: specifies the IWDG reload value.
88 ////////////////////////////////////////////////////////////////////////////////
IWDG_GetReload(void)89 u32 IWDG_GetReload(void)
90 {
91 return IWDG->RLR;
92 }
93
94 ////////////////////////////////////////////////////////////////////////////////
95 /// @brief Reloads IWDG counter with value defined in the reload register
96 /// (write access to IWDG_PR and IWDG_RLR registers disabled).
97 /// @param None.
98 /// @retval None.
99 ////////////////////////////////////////////////////////////////////////////////
IWDG_ReloadCounter(void)100 void IWDG_ReloadCounter(void)
101 {
102 IWDG->KR = KR_KEY_Reload;
103 }
104
105 ////////////////////////////////////////////////////////////////////////////////
106 /// @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers
107 /// disabled).
108 /// @param None.
109 /// @retval None.
110 ////////////////////////////////////////////////////////////////////////////////
IWDG_Enable(void)111 void IWDG_Enable(void)
112 {
113 IWDG->KR = KR_KEY_Enable;
114 }
115
116 ////////////////////////////////////////////////////////////////////////////////
117 /// @brief Checks whether the specified IWDG flag is set or not.
118 /// @param flag: specifies the flag to check.
119 /// This parameter can be one of the following values:
120 /// @arg IWDG_FLAG_PVU: Prescaler Value Update on going
121 /// @arg IWDG_FLAG_RVU: reload Value Update on going
122 /// @retval The new state of flag (SET or RESET).
123 ////////////////////////////////////////////////////////////////////////////////
IWDG_GetFlagStatus(u16 flag)124 FlagStatus IWDG_GetFlagStatus(u16 flag)
125 {
126 return ((IWDG->SR & flag) != (u32)RESET) ? SET : RESET;
127 }
128
129 ////////////////////////////////////////////////////////////////////////////////
130 /// @brief Checks prescaler value has been updated.
131 /// @param None.
132 /// @retval None.
133 ////////////////////////////////////////////////////////////////////////////////
PVU_CheckStatus(void)134 void PVU_CheckStatus(void)
135 {
136 while (IWDG_GetFlagStatus(IWDG_FLAG_PVU) == SET);
137 }
138
139 ////////////////////////////////////////////////////////////////////////////////
140 /// @brief Checks count relead value has been updated.
141 /// @param None.
142 /// @retval None.
143 ////////////////////////////////////////////////////////////////////////////////
RVU_CheckStatus(void)144 void RVU_CheckStatus(void)
145 {
146 while (IWDG_GetFlagStatus(IWDG_FLAG_RVU) == SET);
147 }
148
149 ////////////////////////////////////////////////////////////////////////////////
150 /// @brief IWDG overflow configuration.
151 /// @param overflow_config
152 /// @arg IWDG_Overflow_Interrupt: Interrupt after overflow.
153 /// @arg IWDG_Overflow_Reset: Reset after overflow.
154 /// @retval None.
155 ////////////////////////////////////////////////////////////////////////////////
IWDG_OverflowConfig(IWDGOverflowConfig_TypeDef overflow_config)156 void IWDG_OverflowConfig(IWDGOverflowConfig_TypeDef overflow_config)
157 {
158 IWDG->CR &= ~IWDG_CR_IRQSEL;
159 IWDG->CR |= overflow_config;
160 }
161
162 ////////////////////////////////////////////////////////////////////////////////
163 /// @brief Clear interrupt flag
164 /// @param None.
165 /// @retval None.
166 ////////////////////////////////////////////////////////////////////////////////
IWDG_ClearITPendingBit(void)167 void IWDG_ClearITPendingBit(void)
168 {
169 IWDG->CR |= IWDG_CR_IRQCLR;//write 1 clear interrupt Flag
170 }
171
172 ////////////////////////////////////////////////////////////////////////////////
173 /// @brief Clear interrupt flag
174 /// @param None.
175 /// @retval None.
176 ////////////////////////////////////////////////////////////////////////////////
IWDG_ClearIT(void)177 void IWDG_ClearIT(void)
178 {
179 IWDG->CR |= IWDG_CR_IRQCLR;//write 1 clear interrupt Flag
180 }
181
182 ////////////////////////////////////////////////////////////////////////////////
183 /// @brief Enable IWDG interrupt function
184 /// @param None.
185 /// @retval None.
186 ////////////////////////////////////////////////////////////////////////////////
IWDG_EnableIT(void)187 void IWDG_EnableIT(void)
188 {
189 IWDG->CR |= IWDG_CR_IRQSEL;
190 }
191
192 ////////////////////////////////////////////////////////////////////////////////
193 /// @brief Disable IWDG interrupt function
194 /// @param None.
195 /// @retval None.
196 ////////////////////////////////////////////////////////////////////////////////
IWDG_Reset(void)197 void IWDG_Reset(void)
198 {
199 IWDG->CR &= ~IWDG_CR_IRQSEL;
200 }
201
202
203
204 /// @}
205
206 /// @}
207
208 /// @}
209