]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/Common/drivers/ST/STM32F10xFWLib/src/stm32f10x_wwdg.c
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / Common / drivers / ST / STM32F10xFWLib / src / stm32f10x_wwdg.c
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
7 * History:\r
8 * 04/02/2007: V0.2\r
9 * 02/05/2007: V0.1\r
10 * 09/29/2006: V0.01\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
19 \r
20 /* Includes ------------------------------------------------------------------*/\r
21 #include "stm32f10x_wwdg.h"\r
22 #include "stm32f10x_rcc.h"\r
23 \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
28 \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
33 \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
38 \r
39 /* --------------------- WWDG registers bit mask ------------------------ */\r
40 /* CR register bit mask */\r
41 #define CR_WDGA_Set       ((u32)0x00000080)\r
42 \r
43 /* CFR register bit mask */\r
44 #define CFR_WDGTB_Mask    ((u32)0xFFFFFE7F)\r
45 #define CFR_W_Mask        ((u32)0xFFFFFF80)\r
46 \r
47 #define BIT_Mask          ((u8)0x7F)\r
48 \r
49 /* Private macro -------------------------------------------------------------*/\r
50 /* Private variables ---------------------------------------------------------*/\r
51 /* Private function prototypes -----------------------------------------------*/\r
52 /* Private functions ---------------------------------------------------------*/\r
53 \r
54 /*******************************************************************************\r
55 * Function Name  : WWDG_DeInit\r
56 * Description    : Deinitializes the WWDG  peripheral registers to their default\r
57 *                  reset values.\r
58 * Input          : None\r
59 * Output         : None\r
60 * Return         : None\r
61 *******************************************************************************/\r
62 void WWDG_DeInit(void)\r
63 {\r
64   RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE);\r
65   RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE);\r
66 }\r
67 \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
77 * Output         : None\r
78 * Return         : None\r
79 *******************************************************************************/\r
80 void WWDG_SetPrescaler(u32 WWDG_Prescaler)\r
81 {\r
82   u32 tmpreg = 0;\r
83 \r
84   /* Check the parameters */\r
85   assert(IS_WWDG_PRESCALER(WWDG_Prescaler));\r
86 \r
87   /* Clear WDGTB[8:7] bits */\r
88   tmpreg = WWDG->CFR & CFR_WDGTB_Mask;\r
89 \r
90   /* Set WDGTB[8:7] bits according to WWDG_Prescaler value */\r
91   tmpreg |= WWDG_Prescaler;\r
92 \r
93   /* Store the new value */\r
94   WWDG->CFR = tmpreg;\r
95 }\r
96 \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
101 *                    the downcounter.\r
102 *                    This parameter value must be lower than 0x80.\r
103 * Output         : None\r
104 * Return         : None\r
105 *******************************************************************************/\r
106 void WWDG_SetWindowValue(u8 WindowValue)\r
107 {\r
108   u32 tmpreg = 0;\r
109 \r
110   /* Check the parameters */\r
111   assert(IS_WWDG_WINDOW_VALUE(WindowValue));\r
112 \r
113   /* Clear W[6:0] bits */\r
114   tmpreg = WWDG->CFR & CFR_W_Mask;\r
115 \r
116   /* Set W[6:0] bits according to WindowValue value */\r
117   tmpreg |= WindowValue & BIT_Mask;\r
118 \r
119   /* Store the new value */\r
120   WWDG->CFR = tmpreg;\r
121 }\r
122 \r
123 /*******************************************************************************\r
124 * Function Name  : WWDG_EnableIT\r
125 * Description    : Enables the WWDG Early Wakeup interrupt(EWI).\r
126 * Input          : None\r
127 * Output         : None\r
128 * Return         : None\r
129 *******************************************************************************/\r
130 void WWDG_EnableIT(void)\r
131 {\r
132   *(vu32 *) CFR_EWI_BB = (u32)ENABLE;\r
133 }\r
134 \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
140 * Output         : None\r
141 * Return         : None\r
142 *******************************************************************************/\r
143 void WWDG_SetCounter(u8 Counter)\r
144 {\r
145   /* Check the parameters */\r
146   assert(IS_WWDG_COUNTER(Counter));\r
147 \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
151 }\r
152 \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
158 * Input          : None\r
159 * Output         : None\r
160 * Return         : None\r
161 *******************************************************************************/\r
162 void WWDG_Enable(u8 Counter)\r
163 {\r
164   /* Check the parameters */\r
165   assert(IS_WWDG_COUNTER(Counter));\r
166 \r
167   WWDG->CR = CR_WDGA_Set | Counter;\r
168 }\r
169 \r
170 /*******************************************************************************\r
171 * Function Name  : WWDG_GetFlagStatus\r
172 * Description    : Checks whether the Early Wakeup interrupt flag is set or not.\r
173 * Input          : None\r
174 * Output         : None\r
175 * Return         : The new state of the Early Wakeup interrupt flag (SET or RESET)\r
176 *******************************************************************************/\r
177 FlagStatus WWDG_GetFlagStatus(void)\r
178 {\r
179   return (FlagStatus)(*(vu32 *) SR_EWIF_BB);\r
180 }\r
181 \r
182 /*******************************************************************************\r
183 * Function Name  : WWDG_ClearFlag\r
184 * Description    : Clears Early Wakeup interrupt flag.\r
185 * Input          : None\r
186 * Output         : None\r
187 * Return         : None\r
188 *******************************************************************************/\r
189 void WWDG_ClearFlag(void)\r
190 {\r
191   WWDG->SR = (u32)RESET;\r
192 }\r
193 \r
194 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r