]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_IAR/STM32F10xFWLib/inc/stm32f10x_rcc.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_IAR / STM32F10xFWLib / inc / stm32f10x_rcc.h
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_rcc.h\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 09/29/2006\r
5 * Description        : This file contains all the functions prototypes for the\r
6 *                      RCC firmware library.\r
7 ********************************************************************************\r
8 * History:\r
9 * 04/02/2007: V0.2\r
10 * 02/05/2007: V0.1\r
11 * 09/29/2006: V0.01\r
12 ********************************************************************************\r
13 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
14 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
15 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
16 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
17 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
18 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
19 *******************************************************************************/\r
20 \r
21 /* Define to prevent recursive inclusion -------------------------------------*/\r
22 #ifndef __STM32F10x_RCC_H\r
23 #define __STM32F10x_RCC_H\r
24 \r
25 /* Includes ------------------------------------------------------------------*/\r
26 #include "stm32f10x_map.h"\r
27 \r
28 /* Exported types ------------------------------------------------------------*/\r
29 typedef struct\r
30 {\r
31   u32 SYSCLK_Frequency;\r
32   u32 HCLK_Frequency;\r
33   u32 PCLK1_Frequency;\r
34   u32 PCLK2_Frequency;\r
35   u32 ADCCLK_Frequency;\r
36 }RCC_ClocksTypeDef;\r
37 \r
38 /* Exported constants --------------------------------------------------------*/\r
39 /* HSE configuration */\r
40 #define RCC_HSE_OFF                      ((u32)0x00000000)\r
41 #define RCC_HSE_ON                       ((u32)0x00010000)\r
42 #define RCC_HSE_Bypass                   ((u32)0x00040000)\r
43 \r
44 #define IS_RCC_HSE(HSE) ((HSE == RCC_HSE_OFF) || (HSE == RCC_HSE_ON) || \\r
45                          (HSE == RCC_HSE_Bypass))\r
46 \r
47 /* PLL entry clock source */\r
48 #define RCC_PLLSource_HSI_Div2           ((u32)0x00000000)\r
49 #define RCC_PLLSource_HSE_Div1           ((u32)0x00010000)\r
50 #define RCC_PLLSource_HSE_Div2           ((u32)0x00030000)\r
51 \r
52 #define IS_RCC_PLL_SOURCE(SOURCE) ((SOURCE == RCC_PLLSource_HSI_Div2) || \\r
53                                    (SOURCE == RCC_PLLSource_HSE_Div1) || \\r
54                                    (SOURCE == RCC_PLLSource_HSE_Div2))\r
55 \r
56 /* PLL multiplication factor */\r
57 #define RCC_PLLMul_2                     ((u32)0x00000000)\r
58 #define RCC_PLLMul_3                     ((u32)0x00040000)\r
59 #define RCC_PLLMul_4                     ((u32)0x00080000)\r
60 #define RCC_PLLMul_5                     ((u32)0x000C0000)\r
61 #define RCC_PLLMul_6                     ((u32)0x00100000)\r
62 #define RCC_PLLMul_7                     ((u32)0x00140000)\r
63 #define RCC_PLLMul_8                     ((u32)0x00180000)\r
64 #define RCC_PLLMul_9                     ((u32)0x001C0000)\r
65 #define RCC_PLLMul_10                    ((u32)0x00200000)\r
66 #define RCC_PLLMul_11                    ((u32)0x00240000)\r
67 #define RCC_PLLMul_12                    ((u32)0x00280000)\r
68 #define RCC_PLLMul_13                    ((u32)0x002C0000)\r
69 #define RCC_PLLMul_14                    ((u32)0x00300000)\r
70 #define RCC_PLLMul_15                    ((u32)0x00340000)\r
71 #define RCC_PLLMul_16                    ((u32)0x00380000)\r
72 \r
73 #define IS_RCC_PLL_MUL(MUL) ((MUL == RCC_PLLMul_2) || (MUL == RCC_PLLMul_3)   ||\\r
74                              (MUL == RCC_PLLMul_4) || (MUL == RCC_PLLMul_5)   ||\\r
75                              (MUL == RCC_PLLMul_6) || (MUL == RCC_PLLMul_7)   ||\\r
76                              (MUL == RCC_PLLMul_8) || (MUL == RCC_PLLMul_9)   ||\\r
77                              (MUL == RCC_PLLMul_10) || (MUL == RCC_PLLMul_11) ||\\r
78                              (MUL == RCC_PLLMul_12) || (MUL == RCC_PLLMul_13) ||\\r
79                              (MUL == RCC_PLLMul_14) || (MUL == RCC_PLLMul_15) ||\\r
80                              (MUL == RCC_PLLMul_16))\r
81 \r
82 /* System clock source */\r
83 #define RCC_SYSCLKSource_HSI             ((u32)0x00000000)\r
84 #define RCC_SYSCLKSource_HSE             ((u32)0x00000001)\r
85 #define RCC_SYSCLKSource_PLLCLK          ((u32)0x00000002)\r
86 \r
87 #define IS_RCC_SYSCLK_SOURCE(SOURCE) ((SOURCE == RCC_SYSCLKSource_HSI) || \\r
88                                       (SOURCE == RCC_SYSCLKSource_HSE) || \\r
89                                       (SOURCE == RCC_SYSCLKSource_PLLCLK))\r
90 \r
91 /* AHB clock source */\r
92 #define RCC_SYSCLK_Div1                  ((u32)0x00000000)\r
93 #define RCC_SYSCLK_Div2                  ((u32)0x00000080)\r
94 #define RCC_SYSCLK_Div4                  ((u32)0x00000090)\r
95 #define RCC_SYSCLK_Div8                  ((u32)0x000000A0)\r
96 #define RCC_SYSCLK_Div16                 ((u32)0x000000B0)\r
97 #define RCC_SYSCLK_Div64                 ((u32)0x000000C0)\r
98 #define RCC_SYSCLK_Div128                ((u32)0x000000D0)\r
99 #define RCC_SYSCLK_Div256                ((u32)0x000000E0)\r
100 #define RCC_SYSCLK_Div512                ((u32)0x000000F0)\r
101 \r
102 #define IS_RCC_HCLK(HCLK) ((HCLK == RCC_SYSCLK_Div1) || (HCLK == RCC_SYSCLK_Div2) || \\r
103                            (HCLK == RCC_SYSCLK_Div4) || (HCLK == RCC_SYSCLK_Div8) || \\r
104                            (HCLK == RCC_SYSCLK_Div16) || (HCLK == RCC_SYSCLK_Div64) || \\r
105                            (HCLK == RCC_SYSCLK_Div128) || (HCLK == RCC_SYSCLK_Div256) || \\r
106                            (HCLK == RCC_SYSCLK_Div512))\r
107 \r
108 /* APB1/APB2 clock source */\r
109 #define RCC_HCLK_Div1                    ((u32)0x00000000)\r
110 #define RCC_HCLK_Div2                    ((u32)0x00000400)\r
111 #define RCC_HCLK_Div4                    ((u32)0x00000500)\r
112 #define RCC_HCLK_Div8                    ((u32)0x00000600)\r
113 #define RCC_HCLK_Div16                   ((u32)0x00000700)\r
114 \r
115 #define IS_RCC_PCLK(PCLK) ((PCLK == RCC_HCLK_Div1) || (PCLK == RCC_HCLK_Div2) || \\r
116                            (PCLK == RCC_HCLK_Div4) || (PCLK == RCC_HCLK_Div8) || \\r
117                            (PCLK == RCC_HCLK_Div16))\r
118 \r
119 /* RCC Interrupt source */\r
120 #define RCC_IT_LSIRDY                    ((u8)0x01)\r
121 #define RCC_IT_LSERDY                    ((u8)0x02)\r
122 #define RCC_IT_HSIRDY                    ((u8)0x04)\r
123 #define RCC_IT_HSERDY                    ((u8)0x08)\r
124 #define RCC_IT_PLLRDY                    ((u8)0x10)\r
125 #define RCC_IT_CSS                       ((u8)0x80)\r
126 \r
127 #define IS_RCC_IT(IT) (((IT & (u8)0xE0) == 0x00) && (IT != 0x00))\r
128 #define IS_RCC_GET_IT(IT) ((IT == RCC_IT_LSIRDY) || (IT == RCC_IT_LSERDY) || \\r
129                            (IT == RCC_IT_HSIRDY) || (IT == RCC_IT_HSERDY) || \\r
130                            (IT == RCC_IT_PLLRDY) || (IT == RCC_IT_CSS))\r
131 #define IS_RCC_CLEAR_IT(IT) (((IT & (u8)0x60) == 0x00) && (IT != 0x00))\r
132 \r
133 /* USB clock source */\r
134 #define RCC_USBCLKSource_PLLCLK_1Div5    ((u8)0x00)\r
135 #define RCC_USBCLKSource_PLLCLK_Div1     ((u8)0x01)\r
136 \r
137 #define IS_RCC_USBCLK_SOURCE(SOURCE) ((SOURCE == RCC_USBCLKSource_PLLCLK_1Div5) || \\r
138                                       (SOURCE == RCC_USBCLKSource_PLLCLK_Div1))\r
139 \r
140 /* ADC clock source */\r
141 #define RCC_PCLK2_Div2                   ((u32)0x00000000)\r
142 #define RCC_PCLK2_Div4                   ((u32)0x00004000)\r
143 #define RCC_PCLK2_Div6                   ((u32)0x00008000)\r
144 #define RCC_PCLK2_Div8                   ((u32)0x0000C000)\r
145 \r
146 #define IS_RCC_ADCCLK(ADCCLK) ((ADCCLK == RCC_PCLK2_Div2) || (ADCCLK == RCC_PCLK2_Div4) || \\r
147                                (ADCCLK == RCC_PCLK2_Div6) || (ADCCLK == RCC_PCLK2_Div8))\r
148 \r
149 /* LSE configuration */\r
150 #define RCC_LSE_OFF                      ((u8)0x00)\r
151 #define RCC_LSE_ON                       ((u8)0x01)\r
152 #define RCC_LSE_Bypass                   ((u8)0x04)\r
153 \r
154 #define IS_RCC_LSE(LSE) ((LSE == RCC_LSE_OFF) || (LSE == RCC_LSE_ON) || \\r
155                          (LSE == RCC_LSE_Bypass))\r
156 \r
157 /* RTC clock source */\r
158 #define RCC_RTCCLKSource_LSE             ((u32)0x00000100)\r
159 #define RCC_RTCCLKSource_LSI             ((u32)0x00000200)\r
160 #define RCC_RTCCLKSource_HSE_Div128      ((u32)0x00000300)\r
161 \r
162 #define IS_RCC_RTCCLK_SOURCE(SOURCE) ((SOURCE == RCC_RTCCLKSource_LSE) || \\r
163                                       (SOURCE == RCC_RTCCLKSource_LSI) || \\r
164                                       (SOURCE == RCC_RTCCLKSource_HSE_Div128))\r
165 \r
166 /* AHB peripheral */\r
167 #define RCC_AHBPeriph_DMA                ((u32)0x00000001)\r
168 #define RCC_AHBPeriph_SRAM               ((u32)0x00000004)\r
169 #define RCC_AHBPeriph_FLITF              ((u32)0x00000010)\r
170 \r
171 #define IS_RCC_AHB_PERIPH(PERIPH) (((PERIPH & 0xFFFFFFEA) == 0x00) && (PERIPH != 0x00))\r
172 \r
173 /* APB2 peripheral */\r
174 #define RCC_APB2Periph_AFIO              ((u32)0x00000001)\r
175 #define RCC_APB2Periph_GPIOA             ((u32)0x00000004)\r
176 #define RCC_APB2Periph_GPIOB             ((u32)0x00000008)\r
177 #define RCC_APB2Periph_GPIOC             ((u32)0x00000010)\r
178 #define RCC_APB2Periph_GPIOD             ((u32)0x00000020)\r
179 #define RCC_APB2Periph_GPIOE             ((u32)0x00000040)\r
180 #define RCC_APB2Periph_ADC1              ((u32)0x00000200)\r
181 #define RCC_APB2Periph_ADC2              ((u32)0x00000400)\r
182 #define RCC_APB2Periph_TIM1              ((u32)0x00000800)\r
183 #define RCC_APB2Periph_SPI1              ((u32)0x00001000)\r
184 #define RCC_APB2Periph_USART1            ((u32)0x00004000)\r
185 #define RCC_APB2Periph_ALL               ((u32)0x00005E7D)\r
186 \r
187 #define IS_RCC_APB2_PERIPH(PERIPH) (((PERIPH & 0xFFFFA182) == 0x00) && (PERIPH != 0x00))\r
188 \r
189 /* APB1 peripheral */\r
190 #define RCC_APB1Periph_TIM2              ((u32)0x00000001)\r
191 #define RCC_APB1Periph_TIM3              ((u32)0x00000002)\r
192 #define RCC_APB1Periph_TIM4              ((u32)0x00000004)\r
193 #define RCC_APB1Periph_WWDG              ((u32)0x00000800)\r
194 #define RCC_APB1Periph_SPI2              ((u32)0x00004000)\r
195 #define RCC_APB1Periph_USART2            ((u32)0x00020000)\r
196 #define RCC_APB1Periph_USART3            ((u32)0x00040000)\r
197 #define RCC_APB1Periph_I2C1              ((u32)0x00200000)\r
198 #define RCC_APB1Periph_I2C2              ((u32)0x00400000)\r
199 #define RCC_APB1Periph_USB               ((u32)0x00800000)\r
200 #define RCC_APB1Periph_CAN               ((u32)0x02000000)\r
201 #define RCC_APB1Periph_BKP               ((u32)0x08000000)\r
202 #define RCC_APB1Periph_PWR               ((u32)0x10000000)\r
203 #define RCC_APB1Periph_ALL               ((u32)0x1AE64807)\r
204 \r
205 #define IS_RCC_APB1_PERIPH(PERIPH) (((PERIPH & 0xE519B7F8) == 0x00) && (PERIPH != 0x00))\r
206 \r
207 /* Clock source to output on MCO pin */\r
208 #define RCC_MCO_NoClock                  ((u8)0x00)\r
209 #define RCC_MCO_SYSCLK                   ((u8)0x04)\r
210 #define RCC_MCO_HSI                      ((u8)0x05)\r
211 #define RCC_MCO_HSE                      ((u8)0x06)\r
212 #define RCC_MCO_PLLCLK_Div2              ((u8)0x07)\r
213 \r
214 #define IS_RCC_MCO(MCO) ((MCO == RCC_MCO_NoClock) || (MCO == RCC_MCO_HSI) || \\r
215                          (MCO == RCC_MCO_SYSCLK)  || (MCO == RCC_MCO_HSE) || \\r
216                          (MCO == RCC_MCO_PLLCLK_Div2))\r
217 \r
218 /* RCC Flag */\r
219 #define RCC_FLAG_HSIRDY                  ((u8)0x20)\r
220 #define RCC_FLAG_HSERDY                  ((u8)0x31)\r
221 #define RCC_FLAG_PLLRDY                  ((u8)0x39)\r
222 #define RCC_FLAG_LSERDY                  ((u8)0x41)\r
223 #define RCC_FLAG_LSIRDY                  ((u8)0x61)\r
224 #define RCC_FLAG_PINRST                  ((u8)0x7A)\r
225 #define RCC_FLAG_PORRST                  ((u8)0x7B)\r
226 #define RCC_FLAG_SFTRST                  ((u8)0x7C)\r
227 #define RCC_FLAG_IWDGRST                 ((u8)0x7D)\r
228 #define RCC_FLAG_WWDGRST                 ((u8)0x7E)\r
229 #define RCC_FLAG_LPWRRST                 ((u8)0x7F)\r
230 \r
231 #define IS_RCC_FLAG(FLAG) ((FLAG == RCC_FLAG_HSIRDY) || (FLAG == RCC_FLAG_HSERDY) || \\r
232                            (FLAG == RCC_FLAG_PLLRDY) || (FLAG == RCC_FLAG_LSERDY) || \\r
233                            (FLAG == RCC_FLAG_LSIRDY) || (FLAG == RCC_FLAG_PINRST) || \\r
234                            (FLAG == RCC_FLAG_PORRST) || (FLAG == RCC_FLAG_SFTRST) || \\r
235                            (FLAG == RCC_FLAG_IWDGRST)|| (FLAG == RCC_FLAG_WWDGRST)|| \\r
236                            (FLAG == RCC_FLAG_LPWRRST))\r
237 \r
238 #define IS_RCC_CALIBRATION_VALUE(VALUE) (VALUE <= 0x1F)\r
239 \r
240 /* Exported macro ------------------------------------------------------------*/\r
241 /* Exported functions ------------------------------------------------------- */\r
242 void RCC_DeInit(void);\r
243 void RCC_HSEConfig(u32 RCC_HSE);\r
244 void RCC_AdjustHSICalibrationValue(u8 HSICalibrationValue);\r
245 void RCC_HSICmd(FunctionalState NewState);\r
246 void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul);\r
247 void RCC_PLLCmd(FunctionalState NewState);\r
248 void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource);\r
249 u8 RCC_GetSYSCLKSource(void);\r
250 void RCC_HCLKConfig(u32 RCC_HCLK);\r
251 void RCC_PCLK1Config(u32 RCC_PCLK1);\r
252 void RCC_PCLK2Config(u32 RCC_PCLK2);\r
253 void RCC_ITConfig(u8 RCC_IT, FunctionalState NewState);\r
254 void RCC_USBCLKConfig(u32 RCC_USBCLKSource);\r
255 void RCC_ADCCLKConfig(u32 RCC_ADCCLK);\r
256 void RCC_LSEConfig(u32 RCC_LSE);\r
257 void RCC_LSICmd(FunctionalState NewState);\r
258 void RCC_RTCCLKConfig(u32 RCC_RTCCLKSource);\r
259 void RCC_RTCCLKCmd(FunctionalState NewState);\r
260 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);\r
261 void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph, FunctionalState NewState);\r
262 void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState);\r
263 void RCC_APB1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState);\r
264 void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState);\r
265 void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState);\r
266 void RCC_BackupResetCmd(FunctionalState NewState);\r
267 void RCC_ClockSecuritySystemCmd(FunctionalState NewState);\r
268 void RCC_MCOConfig(u8 RCC_MCO);\r
269 FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG);\r
270 void RCC_ClearFlag(void);\r
271 ITStatus RCC_GetITStatus(u8 RCC_IT);\r
272 void RCC_ClearITPendingBit(u8 RCC_IT);\r
273 \r
274 #endif /* __STM32F10x_RCC_H */\r
275 \r
276 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r