1 /* ----------------------------------------------------------------------------
\r
2 * SAM Software Package License
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2014, Atmel Corporation
\r
6 * All rights reserved.
\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
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\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
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
33 * Interface for Real Time Clock calibration (RTC) .
\r
39 const RTC_PPMLookup PPM_Lookup[] =
\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
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
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
170 * \brief RTC calibration for Temperature or PPM drift
\r
172 extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr)
\r
175 uint32_t MR_Reg, Size;
\r
177 Size = sizeof(PPM_Lookup);
\r
180 for(i=0; i< Size; i++)
\r
182 if(PPM_Lookup[i].Tempr == CurrentTempr)
\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