1 /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
\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
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
23 #define abs(x) ((x)>0 ? (x) : -(x))
\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
34 *******************************************************************************/
\r
35 static void FindFactors(unsigned long n, unsigned int *a, unsigned long *b)
\r
39 long err, err_min=n;
\r
41 *a = a0 = ((n-1)/65536ul) + 1;
\r
44 for (; *a <= 256; (*a)++)
\r
47 err = (long)*a * (long)*b - (long)n;
\r
48 if (abs(err) > (*a / 2))
\r
51 err = (long)*a * (long)*b - (long)n;
\r
53 if (abs(err) < abs(err_min))
\r
58 if (err == 0) break;
\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
71 *******************************************************************************/
\r
72 void WDG_PeriodValueConfig ( u32 Time )
\r
77 n = Time * (RCCU_FrequencyValue(RCCU_PCLK) / 1000000);
\r
78 FindFactors(n, &a, &b);
\r
83 /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/
\r