]> git.sur5r.net Git - freertos/blob - Demo/ARM7_STR75x_GCC/STLibrary/src/75x_tb.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / ARM7_STR75x_GCC / STLibrary / src / 75x_tb.c
1 /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************\r
2 * File Name          : 75x_tb.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 03/10/2006\r
5 * Description        : This file provides all the TB software functions.\r
6 ********************************************************************************\r
7 * History:\r
8 * 07/17/2006 : V1.0\r
9 * 03/10/2006 : V0.1\r
10 ********************************************************************************\r
11 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
13 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
14 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
15 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
16 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17 *******************************************************************************/\r
18 \r
19 /* Includes ------------------------------------------------------------------*/\r
20 #include "75x_tb.h"\r
21 #include "75x_mrcc.h"\r
22 \r
23 /* Private typedef -----------------------------------------------------------*/\r
24 /* Private define ------------------------------------------------------------*/\r
25 /* Private macro -------------------------------------------------------------*/\r
26 /* Private variables ---------------------------------------------------------*/\r
27 #define TB_IT_Enable_Mask   0x7FFF\r
28 #define TB_IT_Clear_Mask    0x7FFF\r
29 #define TB_IC_Enable        0x0004\r
30 #define TB_ICPolarity_Set   0x0008\r
31 #define TB_ICPolarity_Reset 0xFFF7\r
32 #define TB_UFS_Reset        0xFFFE\r
33 #define TB_UFS_Set          0x0001\r
34 \r
35 /* TB debug state */\r
36 #define TB_DBGC_Set    0x0400\r
37 #define TB_DBGC_Reset  0xFB7F\r
38 \r
39 /* TB counter state */\r
40 #define TB_COUNTER_Reset  0x0002\r
41 #define TB_COUNTER_Start  0x0004\r
42 #define TB_COUNTER_Stop   0xFFFB\r
43 \r
44 #define TB_SMS_EXTCLK_Set   0x0008\r
45 #define TB_SMS_RESETCLK_Set 0x0000\r
46 \r
47 /* TB Slave Mode Enable Set/Reset value */\r
48 #define TB_SME_Reset  0x731B\r
49 #define TB_SME_Set    0x0004\r
50 \r
51 /* TB Trigger Selection value */\r
52 #define TB_TS_IC1_Set  0x0200\r
53 \r
54 /* TB SCR Masks bit */\r
55 #define TB_SlaveModeSelection_Mask        0x7307\r
56 #define TB_TriggerSelection_Mask          0x701F\r
57 \r
58 /* Reset Register Masks */\r
59 #define TB_Prescaler_Reset_Mask   0x0000\r
60 #define TB_CounterMode_Mask       0xFF8F\r
61 #define TB_AutoReload_Reset_Mask  0xFFFF\r
62 \r
63 /* Private function prototypes -----------------------------------------------*/\r
64 /* Private functions ---------------------------------------------------------*/\r
65 \r
66  /******************************************************************************\r
67 * Function Name  : TB_DeInit\r
68 * Description    : Deinitializes the TB peripheral registers to their default\r
69 *                  reset values.\r
70 * Input          : None\r
71 * Output         : None\r
72 * Return         : None\r
73 *******************************************************************************/\r
74 void TB_DeInit(void)\r
75 {\r
76  /* Enters and exits the TB peripheral to and from reset */\r
77  MRCC_PeripheralSWResetConfig(MRCC_Peripheral_TB,ENABLE);\r
78  MRCC_PeripheralSWResetConfig(MRCC_Peripheral_TB,DISABLE);\r
79 }\r
80 \r
81 /*******************************************************************************\r
82 * Function Name  : TB_Init\r
83 * Description    : Initializes TB  peripheral according to the specified\r
84 *                  parameters in the TB_InitStruct.\r
85 * Input          : TB_InitStruct: pointer to a TB_InitTypeDef structure that\r
86 *                  contains the configuration information for the TB peripheral.\r
87 * Output         : None\r
88 * Return         : None\r
89 *******************************************************************************/\r
90 void TB_Init(TB_InitTypeDef* TB_InitStruct)\r
91 {\r
92   /* Set the TB prescaler value */\r
93   TB->PSC = TB_InitStruct->TB_Prescaler;\r
94 \r
95   /* Set the TB period value */\r
96   TB->ARR = TB_InitStruct->TB_AutoReload;\r
97 \r
98   /* Set the corresponding counter mode */\r
99   TB->CR = (TB->CR & TB_CounterMode_Mask) | TB_InitStruct->TB_CounterMode;\r
100 \r
101   /* Set the corresponding clock source */\r
102   if(TB_InitStruct->TB_ClockSource == TB_ClockSource_CKRTC)\r
103   {  \r
104     TB->SCR &= TB_SME_Reset & TB_SlaveModeSelection_Mask & TB_TriggerSelection_Mask;\r
105     TB->SCR |= TB_SMS_EXTCLK_Set | TB_SME_Set | TB_TS_IC1_Set;\r
106   }\r
107   else\r
108   {\r
109     TB->SCR &= TB_SME_Reset & TB_SlaveModeSelection_Mask & TB_TriggerSelection_Mask;\r
110   }\r
111 \r
112   if(TB_InitStruct->TB_Mode == TB_Mode_IC)\r
113   {\r
114     /* Set the corresponding value in TB SCR register */\r
115     TB->SCR &= TB_SME_Reset & TB_SlaveModeSelection_Mask & TB_TriggerSelection_Mask;\r
116     TB->SCR |= TB_SMS_RESETCLK_Set | TB_SME_Set | TB_TS_IC1_Set;\r
117 \r
118     /* Set the IC1 enable bit */\r
119     TB->IMCR |= TB_IC_Enable;\r
120 \r
121     /* Set the input signal polarity */\r
122     if (TB_InitStruct->TB_ICAPolarity == TB_ICAPolarity_Falling)\r
123     {\r
124       TB->IMCR |= TB_ICPolarity_Set;\r
125     }\r
126     else\r
127     {\r
128       TB->IMCR &= TB_ICPolarity_Reset;\r
129     }\r
130   }\r
131 }\r
132 \r
133 /*******************************************************************************\r
134 * Function Name  : TB_StructInit\r
135 * Description    : Fills each TB_InitStruct member with its default value\r
136 * Input          : TB_InitStruct : pointer to a TB_InitTypeDef structure which\r
137 *                  will be initialized.\r
138 * Output         : None\r
139 * Return         : None\r
140 *******************************************************************************/\r
141 void TB_StructInit(TB_InitTypeDef *TB_InitStruct)\r
142 {\r
143   TB_InitStruct->TB_Mode = TB_Mode_Timing;\r
144   TB_InitStruct->TB_ClockSource = TB_ClockSource_CKTIM;\r
145   TB_InitStruct->TB_CounterMode = TB_CounterMode_Up;\r
146   TB_InitStruct->TB_ICAPolarity = TB_ICAPolarity_Rising;\r
147   TB_InitStruct->TB_Prescaler = TB_Prescaler_Reset_Mask;\r
148   TB_InitStruct->TB_AutoReload = TB_AutoReload_Reset_Mask;\r
149 }\r
150 \r
151 /*******************************************************************************\r
152 * Function Name  : TB_Cmd\r
153 * Description    : Enables or disables the TB peripheral.\r
154 * Input          : Newstate: new state of the TB peripheral. This parameter can\r
155 *                  be: ENABLE or DISABLE.\r
156 * Output         : None\r
157 * Return         : None\r
158 *******************************************************************************/\r
159 void TB_Cmd(FunctionalState Newstate)\r
160 {\r
161   if(Newstate == ENABLE)\r
162   {\r
163     TB->CR |= TB_COUNTER_Start;\r
164   }\r
165   else\r
166   {\r
167     TB->CR &= TB_COUNTER_Stop;\r
168   }\r
169 }\r
170 \r
171 /*******************************************************************************\r
172 * Function Name  : TB_ITConfig\r
173 * Description    : Enables or disables the specified TB interrupt.\r
174 * Input          : - TB_IT: specifies the TB interrupt sources to be enabled or\r
175 *                    disabled.\r
176 *                    This parameter can be any combination of the following values:\r
177 *                         - TB_IT_Update: TB Update interrupt\r
178 *                         - TB_IT_GlobalUpdate: TB Global Update interrupt\r
179 *                         - TB_IT_IC: TB Input Capture interrupt\r
180 *                  - Newstate:  new state of the specified TB interrupts.\r
181 *                    This parameter can be: ENABLE or DISABLE.\r
182 * Output         : None\r
183 * Return         : None\r
184 *******************************************************************************/\r
185 void TB_ITConfig(u16 TB_IT, FunctionalState Newstate)\r
186 {\r
187   u16 TB_IT_Enable = 0;\r
188 \r
189   TB_IT_Enable = TB_IT & TB_IT_Enable_Mask;\r
190 \r
191   if(Newstate == ENABLE)\r
192   {\r
193    /* Update interrupt global source: overflow/undeflow, counter reset operation\r
194    or slave mode controller in reset mode */\r
195    if ((TB_IT & TB_IT_GlobalUpdate) == TB_IT_GlobalUpdate)\r
196    {\r
197      TB->CR &= TB_UFS_Reset;\r
198     }\r
199    /* Update interrupt source: counter overflow/underflow */\r
200    else if ((TB_IT & TB_IT_Update) == TB_IT_Update)\r
201    {\r
202     TB->CR |= TB_UFS_Set;\r
203    }\r
204    /* Select and enable the interrupts requests */\r
205    TB->RSR |= TB_IT_Enable;\r
206    TB->RER |= TB_IT_Enable;\r
207   }\r
208   /* Disable the interrupts requests */\r
209   else\r
210   {\r
211    TB->RSR &= ~TB_IT_Enable;\r
212    TB->RER &= ~TB_IT_Enable;\r
213   }\r
214 }\r
215 \r
216 /*******************************************************************************\r
217 * Function Name  : TB_SetPrescaler\r
218 * Description    : Sets the TB Prescaler value.\r
219 * Input          : Prescaler: specifies the TB Prescaler value.\r
220 * Output         : None\r
221 * Return         : None\r
222 *******************************************************************************/\r
223 void TB_SetPrescaler(u16 Prescaler)\r
224 {\r
225   /* Sets the prescaler value */\r
226   TB->PSC = Prescaler;\r
227 }\r
228 \r
229 /*******************************************************************************\r
230 * Function Name  : TB_ResetCounter\r
231 * Description    : Re-intializes the counter and generates an update of the\r
232 *                  registers.\r
233 * Input          : None\r
234 * Output         : None\r
235 * Return         : None\r
236 *******************************************************************************/\r
237 void TB_ResetCounter(void)\r
238 {\r
239   /* Re-intializes TB counter */\r
240   TB->CR |= TB_COUNTER_Reset;\r
241 }\r
242 \r
243 /*******************************************************************************\r
244 * Function Name  : TB_DebugCmd\r
245 * Description    : Enables or disables TB peripheral Debug control.\r
246 * Input          : Newstate: new state of the TB Debug control.\r
247 *                  This parameter can be: ENABLE or DISABLE.\r
248 * Output         : None\r
249 * Return         : None\r
250 *******************************************************************************/\r
251 void TB_DebugCmd(FunctionalState Newstate)\r
252 {\r
253   if(Newstate == ENABLE)\r
254   {\r
255     TB->CR |= TB_DBGC_Set;\r
256   }\r
257   else\r
258   {\r
259     TB->CR &= TB_DBGC_Reset;\r
260   }\r
261 }\r
262 \r
263 /*******************************************************************************\r
264 * Function Name  : TB_CounterModeConfig\r
265 * Description    : Configures the TB Counter Mode.\r
266 * Input          : TB_CounterMode: specifies the TB counter mode to be used.\r
267 *                  This parameter can be one of the following values:\r
268 *                         - TB_CounterMode_Up: TB Up Counting Mode\r
269 *                         - TB_CounterMode_Down: TB Down Counting Mode\r
270 *                         - TB_CounterMode_CenterAligned: TB Center Aligned Mode\r
271 * Output         : None\r
272 * Return         : None\r
273 *******************************************************************************/\r
274 void TB_CounterModeConfig(u16 TB_CounterMode)\r
275 {\r
276   /* Counter mode configuration */\r
277   TB->CR &= TB_CounterMode_Mask;\r
278   TB->CR |= TB_CounterMode;\r
279 }\r
280 \r
281 /*******************************************************************************\r
282 * Function Name  : TB_SLaveModeConfig\r
283 * Description    : Configures the TB slave Mode.\r
284 * Input          : TB_SMSMode: specifies the TB slave mode to be used.\r
285 *                  This parameter can be one of the following values:\r
286 *                         - TB_SMSMode_Trigger: The counter starts at a rising \r
287 *                           edge of the trigger \r
288 *                         - TB_SMSMode_Gated: The counter clock is enabled when \r
289 *                           trigger signal is high\r
290 *                         - TB_SMSMode_External: The rising edge of selected trigger\r
291 *                           clocks the counter\r
292 *                         - TB_SMSMode_Reset: The rising edge of the selected \r
293 *                           trigger signal resets the counter\r
294 * Output         : None\r
295 * Return         : None\r
296 *******************************************************************************/\r
297 void TB_SLaveModeConfig(u16 TB_SMSMode)\r
298 {\r
299   TB->SCR &= TB_SME_Reset & TB_SlaveModeSelection_Mask & TB_TriggerSelection_Mask;\r
300   TB->SCR |= TB_SME_Set | TB_SMSMode | TB_TS_IC1_Set; \r
301 }\r
302 /*******************************************************************************\r
303 * Function Name  : TB_GetCounter\r
304 * Description    : Gets the TB Counter value.\r
305 * Input          : None\r
306 * Output         : None\r
307 * Return         : The TB counter register value.\r
308 *******************************************************************************/\r
309 u16 TB_GetCounter(void)\r
310 {\r
311   return TB->CNT;\r
312 }\r
313 \r
314 /*******************************************************************************\r
315 * Function Name  : TB_GetICAP1\r
316 * Description    : Gets the TB Input capture value.\r
317 * Input          : None\r
318 * Output         : None\r
319 * Return         : The TB ICR1 register value.\r
320 *******************************************************************************/\r
321 u16 TB_GetICAP1(void)\r
322 {\r
323   return TB->ICR1;\r
324 }\r
325 \r
326 /*******************************************************************************\r
327 * Function Name  : TB_SetCounter\r
328 * Description    : Sets the TB Counter value.\r
329 * Input          : Counter: specifies the TB Counter value.\r
330 * Output         : None\r
331 * Return         : None\r
332 *******************************************************************************/\r
333 void TB_SetCounter(u16 Counter)\r
334 {\r
335   TB->CNT = Counter;\r
336 }\r
337 \r
338 /*******************************************************************************\r
339 * Function Name  : TB_GetFlagStatus\r
340 * Description    : Checks whether the specified TB flag is set or not.\r
341 * Input          : TB_FLAG: specifies the flag to check.\r
342 *                  This parameter can be one of the following values:\r
343 *                         - TB_FLAG_IC: TB Input Capture flag\r
344 *                         - TB_FLAG_Update: TB update flag\r
345 * Output         : None\r
346 * Return         : The new state of the TB_FLAG (SET or RESET).\r
347 *******************************************************************************/\r
348 FlagStatus TB_GetFlagStatus(u16 TB_FLAG)\r
349 {\r
350   if((TB->ISR & TB_FLAG) != RESET )\r
351   {\r
352    return SET;\r
353   }\r
354   else\r
355   {\r
356    return RESET;\r
357   }\r
358 }\r
359 \r
360 /*******************************************************************************\r
361 * Function Name  : TB_ClearFlag\r
362 * Description    : Clears the TB\92s pending flags.\r
363 * Input          : TB_FLAG: specifies the flag to clear.\r
364 *                  This parameter can be any combination of the following values:\r
365 *                         - TB_FLAG_IC: TB Input Capture flag\r
366 *                         - TB_FLAG_Update: TB update flag\r
367 * Output         : None\r
368 * Return         : None\r
369 *******************************************************************************/\r
370 void TB_ClearFlag(u16 TB_FLAG)\r
371 {\r
372   /* Clears the flags */\r
373   TB->ISR &= ~TB_FLAG;\r
374 }\r
375 \r
376 /*******************************************************************************\r
377 * Function Name  : TB_GetITStatus\r
378 * Description    : Checks whether the specified TB interrupt has occurred or not.\r
379 * Input          : TB_IT: specifies the interrupt to check.\r
380 *                  This parameter can be one of the following values:\r
381 *                       - TB_IT_Update: TB Update interrupt\r
382 *                       - TB_IT_GlobalUpdate: TB Global Update interrupt\r
383 *                       - TB_IT_IC: TB Input Capture interrupt\r
384 * Output         : None\r
385 * Return         : The new state of the TB_IT (SET or RESET).\r
386 *******************************************************************************/\r
387 ITStatus TB_GetITStatus(u16 TB_IT)\r
388 {\r
389   u16 TB_IT_Check = 0;\r
390 \r
391   /* Calculates the pending bits to be checked */\r
392   TB_IT_Check = TB_IT & TB_IT_Clear_Mask;\r
393   \r
394   if((TB->ISR & TB_IT_Check) != RESET )\r
395   {\r
396    return SET;\r
397   }\r
398   else\r
399   {\r
400    return RESET;\r
401   }\r
402 }\r
403 \r
404 /*******************************************************************************\r
405 * Function Name  : TB_ClearITPendingBit\r
406 * Description    : Clears the TB's interrupt pending bits.\r
407 * Input          : TB_IT: specifies the interrupt pending bit to clear.\r
408 *                  This parameter can be any combination of the following values:\r
409 *                         - TB_IT_Update: TB Update interrupt\r
410 *                         - TB_IT_GlobalUpdate: TB Global Update interrupt\r
411 *                         - TB_IT_IC: TB Input Capture interrupt\r
412 * Output         : None\r
413 * Return         : None\r
414 *******************************************************************************/\r
415 void TB_ClearITPendingBit(u16 TB_IT)\r
416 {\r
417   u16 TB_IT_Clear = 0;\r
418 \r
419   /* Calculates the pending bits to be cleared */\r
420   TB_IT_Clear = TB_IT & TB_IT_Clear_Mask;\r
421 \r
422   /* Clears the pending bits */\r
423   TB->ISR &= ~TB_IT_Clear;\r
424 }\r
425 /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/\r