1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
\r
2 * File Name : stm32f10x_wwdg.c
\r
3 * Author : MCD Application Team
\r
4 * Date First Issued : 09/29/2006
\r
5 * Description : This file provides all the WWDG firmware functions.
\r
6 ********************************************************************************
\r
11 ********************************************************************************
\r
12 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
\r
13 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
\r
14 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
\r
15 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
\r
16 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
\r
17 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
\r
18 *******************************************************************************/
\r
20 /* Includes ------------------------------------------------------------------*/
\r
21 #include "stm32f10x_wwdg.h"
\r
22 #include "stm32f10x_rcc.h"
\r
24 /* Private typedef -----------------------------------------------------------*/
\r
25 /* Private define ------------------------------------------------------------*/
\r
26 /* ----------- WWDG registers bit address in the alias region ----------- */
\r
27 #define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE)
\r
29 /* Alias word address of EWI bit */
\r
30 #define CFR_OFFSET (WWDG_OFFSET + 0x04)
\r
31 #define EWI_BitNumber 0x09
\r
32 #define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4))
\r
34 /* Alias word address of EWIF bit */
\r
35 #define SR_OFFSET (WWDG_OFFSET + 0x08)
\r
36 #define EWIF_BitNumber 0x00
\r
37 #define SR_EWIF_BB (PERIPH_BB_BASE + (SR_OFFSET * 32) + (EWIF_BitNumber * 4))
\r
39 /* --------------------- WWDG registers bit mask ------------------------ */
\r
40 /* CR register bit mask */
\r
41 #define CR_WDGA_Set ((u32)0x00000080)
\r
43 /* CFR register bit mask */
\r
44 #define CFR_WDGTB_Mask ((u32)0xFFFFFE7F)
\r
45 #define CFR_W_Mask ((u32)0xFFFFFF80)
\r
47 #define BIT_Mask ((u8)0x7F)
\r
49 /* Private macro -------------------------------------------------------------*/
\r
50 /* Private variables ---------------------------------------------------------*/
\r
51 /* Private function prototypes -----------------------------------------------*/
\r
52 /* Private functions ---------------------------------------------------------*/
\r
54 /*******************************************************************************
\r
55 * Function Name : WWDG_DeInit
\r
56 * Description : Deinitializes the WWDG peripheral registers to their default
\r
61 *******************************************************************************/
\r
62 void WWDG_DeInit(void)
\r
64 RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE);
\r
65 RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE);
\r
68 /*******************************************************************************
\r
69 * Function Name : WWDG_SetPrescaler
\r
70 * Description : Sets the WWDG Prescaler.
\r
71 * Input : - WWDG_Prescaler: specifies the WWDG Prescaler.
\r
72 * This parameter can be one of the following values:
\r
73 * - WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1
\r
74 * - WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2
\r
75 * - WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4
\r
76 * - WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8
\r
79 *******************************************************************************/
\r
80 void WWDG_SetPrescaler(u32 WWDG_Prescaler)
\r
84 /* Check the parameters */
\r
85 assert(IS_WWDG_PRESCALER(WWDG_Prescaler));
\r
87 /* Clear WDGTB[8:7] bits */
\r
88 tmpreg = WWDG->CFR & CFR_WDGTB_Mask;
\r
90 /* Set WDGTB[8:7] bits according to WWDG_Prescaler value */
\r
91 tmpreg |= WWDG_Prescaler;
\r
93 /* Store the new value */
\r
97 /*******************************************************************************
\r
98 * Function Name : WWDG_SetWindowValue
\r
99 * Description : Sets the WWDG window value.
\r
100 * Input : - WindowValue: specifies the window value to be compared to
\r
102 * This parameter value must be lower than 0x80.
\r
105 *******************************************************************************/
\r
106 void WWDG_SetWindowValue(u8 WindowValue)
\r
110 /* Check the parameters */
\r
111 assert(IS_WWDG_WINDOW_VALUE(WindowValue));
\r
113 /* Clear W[6:0] bits */
\r
114 tmpreg = WWDG->CFR & CFR_W_Mask;
\r
116 /* Set W[6:0] bits according to WindowValue value */
\r
117 tmpreg |= WindowValue & BIT_Mask;
\r
119 /* Store the new value */
\r
120 WWDG->CFR = tmpreg;
\r
123 /*******************************************************************************
\r
124 * Function Name : WWDG_EnableIT
\r
125 * Description : Enables the WWDG Early Wakeup interrupt(EWI).
\r
129 *******************************************************************************/
\r
130 void WWDG_EnableIT(void)
\r
132 *(vu32 *) CFR_EWI_BB = (u32)ENABLE;
\r
135 /*******************************************************************************
\r
136 * Function Name : WWDG_SetCounter
\r
137 * Description : Sets the WWDG counter value.
\r
138 * Input : - Counter: specifies the watchdog counter value.
\r
139 * This parameter must be a number between 0x40 and 0x7F.
\r
142 *******************************************************************************/
\r
143 void WWDG_SetCounter(u8 Counter)
\r
145 /* Check the parameters */
\r
146 assert(IS_WWDG_COUNTER(Counter));
\r
148 /* Write to T[6:0] bits to configure the counter value, no need to do
\r
149 a read-modify-write; writing a 0 to WDGA bit does nothing */
\r
150 WWDG->CR = Counter & BIT_Mask;
\r
153 /*******************************************************************************
\r
154 * Function Name : WWDG_Enable
\r
155 * Description : Enables WWDG and load the counter value.
\r
156 * - Counter: specifies the watchdog counter value.
\r
157 * This parameter must be a number between 0x40 and 0x7F.
\r
161 *******************************************************************************/
\r
162 void WWDG_Enable(u8 Counter)
\r
164 /* Check the parameters */
\r
165 assert(IS_WWDG_COUNTER(Counter));
\r
167 WWDG->CR = CR_WDGA_Set | Counter;
\r
170 /*******************************************************************************
\r
171 * Function Name : WWDG_GetFlagStatus
\r
172 * Description : Checks whether the Early Wakeup interrupt flag is set or not.
\r
175 * Return : The new state of the Early Wakeup interrupt flag (SET or RESET)
\r
176 *******************************************************************************/
\r
177 FlagStatus WWDG_GetFlagStatus(void)
\r
179 return (FlagStatus)(*(vu32 *) SR_EWIF_BB);
\r
182 /*******************************************************************************
\r
183 * Function Name : WWDG_ClearFlag
\r
184 * Description : Clears Early Wakeup interrupt flag.
\r
188 *******************************************************************************/
\r
189 void WWDG_ClearFlag(void)
\r
191 WWDG->SR = (u32)RESET;
\r
194 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
\r