]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/ARM7_STR71x_IAR/Library/wdg.c
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / ARM7_STR71x_IAR / Library / wdg.c
1 /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************\r
2 * File Name          : WDG.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 10/24/2003\r
5 * Description        : This file provides all the WDG software functions\r
6 ********************************************************************************\r
7 * History:\r
8 *  30/11/2004 : V2.0\r
9 *  14/07/2004 : V1.3\r
10 *  01/01/2004 : V1.2\r
11 *******************************************************************************\r
12  THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH\r
13  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, INDIRECT\r
15  OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT\r
16  OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION\r
17  CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18 *******************************************************************************/\r
19 \r
20 #include "wdg.h"\r
21 \r
22 #ifndef abs\r
23         #define abs(x) ((x)>0 ? (x) : -(x))\r
24 #endif\r
25 \r
26 /*******************************************************************************\r
27 * Function Name  : FindFactors\r
28 * Description    : Search for the best (a,b) values that fit n = a*b\r
29 *                  with the following constraints: 1<=a<=256, 1<=b<=65536\r
30 * Input 1        : n: the number to decompose\r
31 * Input/Output 2 : a: a pointer to the first factor\r
32 * Input/Output 3 : b: a pointer to the second factor\r
33 * Return         : None\r
34 *******************************************************************************/\r
35 static void FindFactors(unsigned long n, unsigned int *a, unsigned long *b)\r
36 {\r
37         unsigned long b0;\r
38         unsigned int a0;\r
39         long err, err_min=n;\r
40 \r
41         *a = a0 = ((n-1)/65536ul) + 1;\r
42         *b = b0 = n / *a;\r
43 \r
44         for (; *a <= 256; (*a)++)\r
45         {\r
46                 *b = n / *a;\r
47                 err = (long)*a * (long)*b - (long)n;\r
48                 if (abs(err) > (*a / 2))\r
49                 {\r
50                         (*b)++;\r
51                         err = (long)*a * (long)*b - (long)n;\r
52                 }\r
53                 if (abs(err) < abs(err_min))\r
54                 {\r
55                         err_min = err;\r
56                         a0 = *a;\r
57                         b0 = *b;\r
58                         if (err == 0) break;\r
59                 }\r
60         }\r
61 \r
62         *a = a0;\r
63         *b = b0;\r
64 }\r
65 \r
66 /*******************************************************************************\r
67 * Function Name  : WDG_PeriodValueConfig\r
68 * Description    : Set the prescaler and counter reload value\r
69 * Input          : Amount of time (us) needed\r
70 * Return         : None\r
71 *******************************************************************************/\r
72 void WDG_PeriodValueConfig ( u32 Time )\r
73 {\r
74         unsigned int a;\r
75         unsigned long n, b;\r
76 \r
77         n = Time * (RCCU_FrequencyValue(RCCU_PCLK) / 1000000);\r
78         FindFactors(n, &a, &b);\r
79     WDG->PR = a - 1;\r
80     WDG->VR = b - 1;\r
81 }\r
82 \r
83 /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/\r