]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rtc_calib.c
Core kernel files:
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D4x_EK_IAR / AtmelFiles / libboard_sama5d4x-ek / source / rtc_calib.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2014, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /**\r
31  * \file\r
32  *\r
33  * Interface for Real Time Clock calibration (RTC) .\r
34  *\r
35  */\r
36 \r
37 #include "board.h"\r
38 \r
39 const RTC_PPMLookup PPM_Lookup[] =\r
40 {\r
41     {-40, -168 ,0, 1 ,22 },\r
42     {-39, -163 ,0, 1 ,23 },\r
43     {-38, -158 ,0, 1 ,24 },\r
44     {-37, -153 ,0, 1 ,25 },\r
45     {-36, -148 ,0, 1 ,25 },\r
46     {-35, -143 ,0, 1 ,26 },\r
47     {-34, -138 ,0, 1 ,27 },\r
48     {-33, -134 ,0, 1 ,28 },\r
49     {-32, -129 ,0, 1 ,29 },\r
50     {-31, -124 ,0, 1 ,31 },\r
51     {-30, -120 ,0, 1 ,32 },\r
52     {-29, -116 ,0, 1 ,33 },\r
53     {-28, -111 ,0, 1 ,34 },\r
54     {-27, -107 ,0, 1 ,36 },\r
55     {-26, -103 ,0, 1 ,37 },\r
56     {-25, -99,  0, 1 ,38 },\r
57     {-24, -95,  0, 1 ,40 },\r
58     {-23, -91,  0, 1 ,42 },\r
59     {-22, -87,  0, 1 ,44 },\r
60     {-21, -84,  0, 1 ,45 },\r
61     {-20, -80,  0, 1 ,48 },\r
62     {-19, -76,  0, 1 ,50 },\r
63     {-18, -73,  0, 1 ,53 },\r
64     {-17, -70,  0, 1 ,55 },\r
65     {-16, -66,  0, 1 ,58 },\r
66     {-15, -63,  0, 1 ,61 },\r
67     {-14, -60,  0, 1 ,64 },\r
68     {-13, -57,  0, 1 ,68 },\r
69     {-12, -54,  0, 1 ,71 },\r
70     {-11, -51,  0, 1 ,76 },\r
71     {-10, -48,  0, 1 ,80 },\r
72     {-9 ,-45 ,  0, 1 ,86 },\r
73     {-8 ,-43 ,  0, 1 ,90 },\r
74     {-7 ,-40 ,  0, 1 ,97 },\r
75     {-6 ,-37 ,  0, 1 ,105},\r
76     {-5 ,-35 ,  0, 1 ,111},\r
77     {-4 ,-33 ,  0, 1 ,117},\r
78     {-3 ,-30 ,  0, 0 ,6  },\r
79     {-2 ,-28 ,  0, 0 ,6  },\r
80     {-1 ,-26 ,  0, 0 ,7  },\r
81     {0 ,-24 ,   0, 0 ,7  },\r
82     {1 ,-22 ,   0, 0 ,8  },\r
83     {2 ,-20 ,   0, 0 ,9  },\r
84     {3 ,-18 ,   0, 0 ,10 },\r
85     {4 ,-17 ,   0, 0 ,10 },\r
86     {5 ,-15 ,   0, 0 ,12 },\r
87     {6 ,-13 ,   0, 0 ,14 },\r
88     {7 ,-12 ,   0, 0 ,15 },\r
89     {8 ,-11 ,   0, 0 ,17 },\r
90     {9 ,-9 ,    0, 0 ,21 },\r
91     {10 ,-8 ,   0, 0 ,23 },\r
92     {11 ,-7 ,   0, 0 ,27 },\r
93     {12 ,-6 ,   0, 0 ,32 },\r
94     {13 ,-5 ,   0, 0 ,38 },\r
95     {14 ,-4 ,   0, 0 ,48 },\r
96     {15 ,-3 ,   0, 0 ,64 },\r
97     {16 ,-2 ,   0, 0 ,97 },\r
98     {17 ,-2 ,   0, 0 ,97 },\r
99     {18 ,-1 ,   0, 0 ,127},\r
100     {19 ,0,     1, 0 ,0  },\r
101     {20 ,0,     1, 0 ,0  },\r
102     {21 ,0,     1, 0 ,0  },\r
103     {22 ,1,     1, 0 ,127},\r
104     {23 ,1,     1, 0 ,127},\r
105     {24 ,1,     1, 0 ,127},\r
106     {25 ,1,     1, 0 ,127},\r
107     {26 ,1,     1, 0 ,127},\r
108     {27 ,1,     1, 0 ,127},\r
109     {28 ,1,     1, 0 ,127},\r
110     {29 ,0,     1, 0 ,0  },\r
111     {30 ,0,     1, 0 ,0  },\r
112     {31 ,0,     1, 0 ,0  },\r
113     {32 ,-1,    0, 0 ,127},\r
114     {33 ,-2,    0, 0 ,97 },\r
115     {34 ,-2,    0, 0 ,97 },\r
116     {35 ,-3,    0, 0 ,64 },\r
117     {36 ,-4,    0, 0 ,48 },\r
118     {37 ,-5,    0, 0 ,38 },\r
119     {38 ,-6,    0, 0 ,32 },\r
120     {39 ,-7,    0, 0 ,27 },\r
121     {40 ,-8,    0, 0 ,23 },\r
122     {41 ,-9,    0, 0 ,21 },\r
123     {42 ,-11 ,  0, 0 ,17 },\r
124     {43 ,-12 ,  0, 0 ,15 },\r
125     {44 ,-13 ,  0, 0 ,14 },\r
126     {45 ,-15 ,  0, 0 ,12 },\r
127     {46 ,-17 ,  0, 0 ,10 },\r
128     {47 ,-18 ,  0, 0 ,10 },\r
129     {48 ,-20 ,  0, 0 ,9  },\r
130     {49 ,-22 ,  0, 0 ,8  },\r
131     {50 ,-24 ,  0, 0 ,7  },\r
132     {51 ,-26 ,  0, 0 ,7  },\r
133     {52 ,-28 ,  0, 0 ,6  },\r
134     {53 ,-30 ,  0, 0 ,6  },\r
135     {54 ,-33 ,  0, 1 ,117},\r
136     {55 ,-35 ,  0, 1 ,111},\r
137     {56 ,-37 ,  0, 1 ,105},\r
138     {57 ,-40 ,  0, 1 ,97 },\r
139     {58 ,-43 ,  0, 1 ,90 },\r
140     {59 ,-45 ,  0, 1 ,86 },\r
141     {60 ,-48 ,  0, 1 ,80 },\r
142     {61 ,-51 ,  0, 1 ,76 },\r
143     {62 ,-54 ,  0, 1 ,71 },\r
144     {63 ,-57 ,  0, 1 ,68 },\r
145     {64 ,-60 ,  0, 1 ,64 },\r
146     {65 ,-63 ,  0, 1 ,61 },\r
147     {66 ,-66 ,  0, 1 ,58 },\r
148     {67 ,-70 ,  0, 1 ,55 },\r
149     {68 ,-73 ,  0, 1 ,53 },\r
150     {69 ,-76 ,  0, 1 ,50 },\r
151     {70 ,-80 ,  0, 1 ,48 },\r
152     {71 ,-84 ,  0, 1 ,45 },\r
153     {72 ,-87 ,  0, 1 ,44 },\r
154     {73 ,-91 ,  0, 1 ,42 },\r
155     {74 ,-95 ,  0, 1 ,40 },\r
156     {75 ,-99 ,  0, 1 ,38 },\r
157     {76 ,-103 , 0, 1 ,37 },\r
158     {77 ,-107 , 0, 1 ,36 },\r
159     {78 ,-111 , 0, 1 ,34 },\r
160     {79 ,-116 , 0, 1 ,33 },\r
161     {80 ,-120 , 0, 1 ,32 },\r
162     {81 ,-124 , 0, 1 ,31 },\r
163     {82 ,-129 , 0, 1 ,29 },\r
164     {83 ,-134 , 0, 1 ,28 },\r
165     {84 ,-138 , 0, 1 ,27 },\r
166     {85 ,-143 , 0, 1 ,26 }\r
167 } ;    \r
168 \r
169 /**\r
170  * \brief RTC calibration for Temperature or PPM drift\r
171  */\r
172 extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr)\r
173 {\r
174   uint16_t i;\r
175   uint32_t MR_Reg, Size;\r
176   \r
177   Size = sizeof(PPM_Lookup);\r
178   \r
179   MR_Reg =0;\r
180   for(i=0; i< Size; i++)\r
181   {\r
182   if(PPM_Lookup[i].Tempr == CurrentTempr)\r
183       {\r
184           MR_Reg |= RTC_MR_CORRECTION(PPM_Lookup[i].CORRECTION);  \r
185           MR_Reg |= (PPM_Lookup[i].HIGHPPM << 15);\r
186           MR_Reg |= (PPM_Lookup[i].NEGPPM << 4);\r
187           pRtc->RTC_MR = MR_Reg;    // update the calibration value\r
188           break;\r
189       }\r
190   }\r
191   \r
192  \r
193   \r
194 }\r