]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/blob
77a7ce517d5c4e42ee7fa752e161ae0c110a78e3
[mvd_firmware.git] /
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_wwdg.c\r
4   * @author  MCD Application Team\r
5   * @version V3.5.0\r
6   * @date    11-March-2011\r
7   * @brief   This file provides all the WWDG firmware functions.\r
8   ******************************************************************************\r
9   * @attention\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>\r
19   ******************************************************************************\r
20   */\r
21 \r
22 /* Includes ------------------------------------------------------------------*/\r
23 #include "stm32f10x_wwdg.h"\r
24 #include "stm32f10x_rcc.h"\r
25 \r
26 /** @addtogroup STM32F10x_StdPeriph_Driver\r
27   * @{\r
28   */\r
29 \r
30 /** @defgroup WWDG \r
31   * @brief WWDG driver modules\r
32   * @{\r
33   */\r
34 \r
35 /** @defgroup WWDG_Private_TypesDefinitions\r
36   * @{\r
37   */\r
38 \r
39 /**\r
40   * @}\r
41   */\r
42 \r
43 /** @defgroup WWDG_Private_Defines\r
44   * @{\r
45   */\r
46 \r
47 /* ----------- WWDG registers bit address in the alias region ----------- */\r
48 #define WWDG_OFFSET       (WWDG_BASE - PERIPH_BASE)\r
49 \r
50 /* Alias word address of EWI bit */\r
51 #define CFR_OFFSET        (WWDG_OFFSET + 0x04)\r
52 #define EWI_BitNumber     0x09\r
53 #define CFR_EWI_BB        (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4))\r
54 \r
55 /* --------------------- WWDG registers bit mask ------------------------ */\r
56 \r
57 /* CR register bit mask */\r
58 #define CR_WDGA_Set       ((uint32_t)0x00000080)\r
59 \r
60 /* CFR register bit mask */\r
61 #define CFR_WDGTB_Mask    ((uint32_t)0xFFFFFE7F)\r
62 #define CFR_W_Mask        ((uint32_t)0xFFFFFF80)\r
63 #define BIT_Mask          ((uint8_t)0x7F)\r
64 \r
65 /**\r
66   * @}\r
67   */\r
68 \r
69 /** @defgroup WWDG_Private_Macros\r
70   * @{\r
71   */\r
72 \r
73 /**\r
74   * @}\r
75   */\r
76 \r
77 /** @defgroup WWDG_Private_Variables\r
78   * @{\r
79   */\r
80 \r
81 /**\r
82   * @}\r
83   */\r
84 \r
85 /** @defgroup WWDG_Private_FunctionPrototypes\r
86   * @{\r
87   */\r
88 \r
89 /**\r
90   * @}\r
91   */\r
92 \r
93 /** @defgroup WWDG_Private_Functions\r
94   * @{\r
95   */\r
96 \r
97 /**\r
98   * @brief  Deinitializes the WWDG peripheral registers to their default reset values.\r
99   * @param  None\r
100   * @retval None\r
101   */\r
102 void WWDG_DeInit(void)\r
103 {\r
104   RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE);\r
105   RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE);\r
106 }\r
107 \r
108 /**\r
109   * @brief  Sets the WWDG Prescaler.\r
110   * @param  WWDG_Prescaler: specifies the WWDG Prescaler.\r
111   *   This parameter can be one of the following values:\r
112   *     @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1\r
113   *     @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2\r
114   *     @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4\r
115   *     @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8\r
116   * @retval None\r
117   */\r
118 void WWDG_SetPrescaler(uint32_t WWDG_Prescaler)\r
119 {\r
120   uint32_t tmpreg = 0;\r
121   /* Check the parameters */\r
122   assert_param(IS_WWDG_PRESCALER(WWDG_Prescaler));\r
123   /* Clear WDGTB[1:0] bits */\r
124   tmpreg = WWDG->CFR & CFR_WDGTB_Mask;\r
125   /* Set WDGTB[1:0] bits according to WWDG_Prescaler value */\r
126   tmpreg |= WWDG_Prescaler;\r
127   /* Store the new value */\r
128   WWDG->CFR = tmpreg;\r
129 }\r
130 \r
131 /**\r
132   * @brief  Sets the WWDG window value.\r
133   * @param  WindowValue: specifies the window value to be compared to the downcounter.\r
134   *   This parameter value must be lower than 0x80.\r
135   * @retval None\r
136   */\r
137 void WWDG_SetWindowValue(uint8_t WindowValue)\r
138 {\r
139   __IO uint32_t tmpreg = 0;\r
140 \r
141   /* Check the parameters */\r
142   assert_param(IS_WWDG_WINDOW_VALUE(WindowValue));\r
143   /* Clear W[6:0] bits */\r
144 \r
145   tmpreg = WWDG->CFR & CFR_W_Mask;\r
146 \r
147   /* Set W[6:0] bits according to WindowValue value */\r
148   tmpreg |= WindowValue & (uint32_t) BIT_Mask;\r
149 \r
150   /* Store the new value */\r
151   WWDG->CFR = tmpreg;\r
152 }\r
153 \r
154 /**\r
155   * @brief  Enables the WWDG Early Wakeup interrupt(EWI).\r
156   * @param  None\r
157   * @retval None\r
158   */\r
159 void WWDG_EnableIT(void)\r
160 {\r
161   *(__IO uint32_t *) CFR_EWI_BB = (uint32_t)ENABLE;\r
162 }\r
163 \r
164 /**\r
165   * @brief  Sets the WWDG counter value.\r
166   * @param  Counter: specifies the watchdog counter value.\r
167   *   This parameter must be a number between 0x40 and 0x7F.\r
168   * @retval None\r
169   */\r
170 void WWDG_SetCounter(uint8_t Counter)\r
171 {\r
172   /* Check the parameters */\r
173   assert_param(IS_WWDG_COUNTER(Counter));\r
174   /* Write to T[6:0] bits to configure the counter value, no need to do\r
175      a read-modify-write; writing a 0 to WDGA bit does nothing */\r
176   WWDG->CR = Counter & BIT_Mask;\r
177 }\r
178 \r
179 /**\r
180   * @brief  Enables WWDG and load the counter value.                  \r
181   * @param  Counter: specifies the watchdog counter value.\r
182   *   This parameter must be a number between 0x40 and 0x7F.\r
183   * @retval None\r
184   */\r
185 void WWDG_Enable(uint8_t Counter)\r
186 {\r
187   /* Check the parameters */\r
188   assert_param(IS_WWDG_COUNTER(Counter));\r
189   WWDG->CR = CR_WDGA_Set | Counter;\r
190 }\r
191 \r
192 /**\r
193   * @brief  Checks whether the Early Wakeup interrupt flag is set or not.\r
194   * @param  None\r
195   * @retval The new state of the Early Wakeup interrupt flag (SET or RESET)\r
196   */\r
197 FlagStatus WWDG_GetFlagStatus(void)\r
198 {\r
199   return (FlagStatus)(WWDG->SR);\r
200 }\r
201 \r
202 /**\r
203   * @brief  Clears Early Wakeup interrupt flag.\r
204   * @param  None\r
205   * @retval None\r
206   */\r
207 void WWDG_ClearFlag(void)\r
208 {\r
209   WWDG->SR = (uint32_t)RESET;\r
210 }\r
211 \r
212 /**\r
213   * @}\r
214   */\r
215 \r
216 /**\r
217   * @}\r
218   */\r
219 \r
220 /**\r
221   * @}\r
222   */\r
223 \r
224 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/\r