]> git.sur5r.net Git - freertos/blob - Demo/Common/drivers/ST/STM32F10xFWLib/src/stm32f10x_systick.c
ST CM3 drivers.
[freertos] / Demo / Common / drivers / ST / STM32F10xFWLib / src / stm32f10x_systick.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_systick.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 09/29/2006\r
5 * Description        : This file provides all the SysTick 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_systick.h"\r
22 \r
23 /* Private typedef -----------------------------------------------------------*/\r
24 /* Private define ------------------------------------------------------------*/\r
25 /* ---------------------- SysTick registers bit mask -------------------- */\r
26 /* CTRL TICKINT Mask */\r
27 #define CTRL_TICKINT_Set      ((u32)0x00000002)\r
28 #define CTRL_TICKINT_Reset    ((u32)0xFFFFFFFD)\r
29 \r
30 /* SysTick Flag Mask */\r
31 #define FLAG_Mask             ((u8)0x1F)\r
32 \r
33 /* Private macro -------------------------------------------------------------*/\r
34 /* Private variables ---------------------------------------------------------*/\r
35 /* Private function prototypes -----------------------------------------------*/\r
36 /* Private functions ---------------------------------------------------------*/\r
37 \r
38 /*******************************************************************************\r
39 * Function Name  : SysTick_CLKSourceConfig\r
40 * Description    : Configures the SysTick clock source.\r
41 * Input          : - SysTick_CLKSource: specifies the SysTick clock source.\r
42 *                    This parameter can be one of the following values:\r
43 *                       - SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8\r
44 *                         selected as SysTick clock source.\r
45 *                       - SysTick_CLKSource_HCLK: AHB clock selected as\r
46 *                         SysTick clock source.\r
47 * Output         : None\r
48 * Return         : None\r
49 *******************************************************************************/\r
50 void SysTick_CLKSourceConfig(u32 SysTick_CLKSource)\r
51 {\r
52   /* Check the parameters */\r
53   assert(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));\r
54 \r
55   if (SysTick_CLKSource == SysTick_CLKSource_HCLK)\r
56   {\r
57     SysTick->CTRL |= SysTick_CLKSource_HCLK;\r
58   }\r
59   else\r
60   {\r
61     SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;\r
62   }\r
63 }\r
64 \r
65 /*******************************************************************************\r
66 * Function Name  : SysTick_SetReload\r
67 * Description    : Sets SysTick Reload value.\r
68 * Input          : - Reload: SysTick Reload new value.\r
69 *                    This parameter must be a number between 1 and 0xFFFFFF.\r
70 * Output         : None\r
71 * Return         : None\r
72 *******************************************************************************/\r
73 void SysTick_SetReload(u32 Reload)\r
74 {\r
75   /* Check the parameters */\r
76   assert(IS_SYSTICK_RELOAD(Reload));\r
77 \r
78   SysTick->LOAD = Reload;\r
79 }\r
80 \r
81 /*******************************************************************************\r
82 * Function Name  : SysTick_CounterCmd\r
83 * Description    : Enables or disables the SysTick counter.\r
84 * Input          : - SysTick_Counter: new state of the SysTick counter.\r
85 *                    This parameter can be one of the following values:\r
86 *                       - SysTick_Counter_Disable: Disable counter\r
87 *                       - SysTick_Counter_Enable: Enable counter\r
88 *                       - SysTick_Counter_Clear: Clear counter value to 0\r
89 * Output         : None\r
90 * Return         : None\r
91 *******************************************************************************/\r
92 void SysTick_CounterCmd(u32 SysTick_Counter)\r
93 {\r
94   /* Check the parameters */\r
95   assert(IS_SYSTICK_COUNTER(SysTick_Counter));\r
96 \r
97   if (SysTick_Counter == SysTick_Counter_Clear)\r
98   {\r
99     SysTick->VAL = SysTick_Counter_Clear;\r
100   }\r
101   else\r
102   {\r
103     if (SysTick_Counter == SysTick_Counter_Enable)\r
104     {\r
105       SysTick->CTRL |= SysTick_Counter_Enable;\r
106     }\r
107     else\r
108     {\r
109       SysTick->CTRL &= SysTick_Counter_Disable;\r
110     }\r
111   }\r
112 }\r
113 \r
114 /*******************************************************************************\r
115 * Function Name  : SysTick_ITConfig\r
116 * Description    : Enables or disables the SysTick Interrupt.\r
117 * Input          : - NewState: new state of the SysTick Interrupt.\r
118 *                    This parameter can be: ENABLE or DISABLE.\r
119 * Output         : None\r
120 * Return         : None\r
121 *******************************************************************************/\r
122 void SysTick_ITConfig(FunctionalState NewState)\r
123 {\r
124   /* Check the parameters */\r
125   assert(IS_FUNCTIONAL_STATE(NewState));\r
126 \r
127   if (NewState != DISABLE)\r
128   {\r
129     SysTick->CTRL |= CTRL_TICKINT_Set;\r
130   }\r
131   else\r
132   {\r
133     SysTick->CTRL &= CTRL_TICKINT_Reset;\r
134   }\r
135 }\r
136 \r
137 /*******************************************************************************\r
138 * Function Name  : SysTick_GetCounter\r
139 * Description    : Gets SysTick counter value.\r
140 * Input          : None\r
141 * Output         : None\r
142 * Return         : SysTick current value\r
143 *******************************************************************************/\r
144 u32 SysTick_GetCounter(void)\r
145 {\r
146   return(SysTick->VAL);\r
147 }\r
148 \r
149 /*******************************************************************************\r
150 * Function Name  : SysTick_GetFlagStatus\r
151 * Description    : Checks whether the specified SysTick flag is set or not.\r
152 * Input          : - SysTick_FLAG: specifies the flag to check.\r
153 *                    This parameter can be one of the following values:\r
154 *                       - SysTick_FLAG_COUNT\r
155 *                       - SysTick_FLAG_SKEW\r
156 *                       - SysTick_FLAG_NOREF\r
157 * Output         : None\r
158 * Return         : None\r
159 *******************************************************************************/\r
160 FlagStatus SysTick_GetFlagStatus(u8 SysTick_FLAG)\r
161 {\r
162   u32 tmp = 0;\r
163   u32 statusreg = 0;\r
164   FlagStatus bitstatus = RESET;\r
165 \r
166   /* Check the parameters */\r
167   assert(IS_SYSTICK_FLAG(SysTick_FLAG));\r
168 \r
169   /* Get the SysTick register index */\r
170   tmp = SysTick_FLAG >> 5;\r
171 \r
172   if (tmp == 1) /* The flag to check is in CTRL register */\r
173   {\r
174     statusreg = SysTick->CTRL;\r
175   }\r
176   else          /* The flag to check is in CALIB register */\r
177   {\r
178     statusreg = SysTick->CALIB;\r
179   }\r
180 \r
181   /* Get the flag position */\r
182   tmp = SysTick_FLAG & FLAG_Mask;\r
183 \r
184   if ((statusreg & ((u32)1 << tmp)) != (u32)RESET)\r
185   {\r
186     bitstatus = SET;\r
187   }\r
188   else\r
189   {\r
190     bitstatus = RESET;\r
191   }\r
192   return bitstatus;\r
193 }\r
194 \r
195 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r