blob: 94af4cc42664dcd0356a125b40a0489c83169998 [file] [log] [blame]
/* ----------------------------------------------------------------------------
* SAM Software Package License
* ----------------------------------------------------------------------------
* Copyright (c) 2014, Atmel Corporation
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
*
* Atmel's name may not be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ----------------------------------------------------------------------------
*/
/**
* \file
*
* Interface for Real Time Clock calibration (RTC) .
*
*/
#include "board.h"
const RTC_PPMLookup PPM_Lookup[] =
{
{-40, -168 ,0, 1 ,22 },
{-39, -163 ,0, 1 ,23 },
{-38, -158 ,0, 1 ,24 },
{-37, -153 ,0, 1 ,25 },
{-36, -148 ,0, 1 ,25 },
{-35, -143 ,0, 1 ,26 },
{-34, -138 ,0, 1 ,27 },
{-33, -134 ,0, 1 ,28 },
{-32, -129 ,0, 1 ,29 },
{-31, -124 ,0, 1 ,31 },
{-30, -120 ,0, 1 ,32 },
{-29, -116 ,0, 1 ,33 },
{-28, -111 ,0, 1 ,34 },
{-27, -107 ,0, 1 ,36 },
{-26, -103 ,0, 1 ,37 },
{-25, -99, 0, 1 ,38 },
{-24, -95, 0, 1 ,40 },
{-23, -91, 0, 1 ,42 },
{-22, -87, 0, 1 ,44 },
{-21, -84, 0, 1 ,45 },
{-20, -80, 0, 1 ,48 },
{-19, -76, 0, 1 ,50 },
{-18, -73, 0, 1 ,53 },
{-17, -70, 0, 1 ,55 },
{-16, -66, 0, 1 ,58 },
{-15, -63, 0, 1 ,61 },
{-14, -60, 0, 1 ,64 },
{-13, -57, 0, 1 ,68 },
{-12, -54, 0, 1 ,71 },
{-11, -51, 0, 1 ,76 },
{-10, -48, 0, 1 ,80 },
{-9 ,-45 , 0, 1 ,86 },
{-8 ,-43 , 0, 1 ,90 },
{-7 ,-40 , 0, 1 ,97 },
{-6 ,-37 , 0, 1 ,105},
{-5 ,-35 , 0, 1 ,111},
{-4 ,-33 , 0, 1 ,117},
{-3 ,-30 , 0, 0 ,6 },
{-2 ,-28 , 0, 0 ,6 },
{-1 ,-26 , 0, 0 ,7 },
{0 ,-24 , 0, 0 ,7 },
{1 ,-22 , 0, 0 ,8 },
{2 ,-20 , 0, 0 ,9 },
{3 ,-18 , 0, 0 ,10 },
{4 ,-17 , 0, 0 ,10 },
{5 ,-15 , 0, 0 ,12 },
{6 ,-13 , 0, 0 ,14 },
{7 ,-12 , 0, 0 ,15 },
{8 ,-11 , 0, 0 ,17 },
{9 ,-9 , 0, 0 ,21 },
{10 ,-8 , 0, 0 ,23 },
{11 ,-7 , 0, 0 ,27 },
{12 ,-6 , 0, 0 ,32 },
{13 ,-5 , 0, 0 ,38 },
{14 ,-4 , 0, 0 ,48 },
{15 ,-3 , 0, 0 ,64 },
{16 ,-2 , 0, 0 ,97 },
{17 ,-2 , 0, 0 ,97 },
{18 ,-1 , 0, 0 ,127},
{19 ,0, 1, 0 ,0 },
{20 ,0, 1, 0 ,0 },
{21 ,0, 1, 0 ,0 },
{22 ,1, 1, 0 ,127},
{23 ,1, 1, 0 ,127},
{24 ,1, 1, 0 ,127},
{25 ,1, 1, 0 ,127},
{26 ,1, 1, 0 ,127},
{27 ,1, 1, 0 ,127},
{28 ,1, 1, 0 ,127},
{29 ,0, 1, 0 ,0 },
{30 ,0, 1, 0 ,0 },
{31 ,0, 1, 0 ,0 },
{32 ,-1, 0, 0 ,127},
{33 ,-2, 0, 0 ,97 },
{34 ,-2, 0, 0 ,97 },
{35 ,-3, 0, 0 ,64 },
{36 ,-4, 0, 0 ,48 },
{37 ,-5, 0, 0 ,38 },
{38 ,-6, 0, 0 ,32 },
{39 ,-7, 0, 0 ,27 },
{40 ,-8, 0, 0 ,23 },
{41 ,-9, 0, 0 ,21 },
{42 ,-11 , 0, 0 ,17 },
{43 ,-12 , 0, 0 ,15 },
{44 ,-13 , 0, 0 ,14 },
{45 ,-15 , 0, 0 ,12 },
{46 ,-17 , 0, 0 ,10 },
{47 ,-18 , 0, 0 ,10 },
{48 ,-20 , 0, 0 ,9 },
{49 ,-22 , 0, 0 ,8 },
{50 ,-24 , 0, 0 ,7 },
{51 ,-26 , 0, 0 ,7 },
{52 ,-28 , 0, 0 ,6 },
{53 ,-30 , 0, 0 ,6 },
{54 ,-33 , 0, 1 ,117},
{55 ,-35 , 0, 1 ,111},
{56 ,-37 , 0, 1 ,105},
{57 ,-40 , 0, 1 ,97 },
{58 ,-43 , 0, 1 ,90 },
{59 ,-45 , 0, 1 ,86 },
{60 ,-48 , 0, 1 ,80 },
{61 ,-51 , 0, 1 ,76 },
{62 ,-54 , 0, 1 ,71 },
{63 ,-57 , 0, 1 ,68 },
{64 ,-60 , 0, 1 ,64 },
{65 ,-63 , 0, 1 ,61 },
{66 ,-66 , 0, 1 ,58 },
{67 ,-70 , 0, 1 ,55 },
{68 ,-73 , 0, 1 ,53 },
{69 ,-76 , 0, 1 ,50 },
{70 ,-80 , 0, 1 ,48 },
{71 ,-84 , 0, 1 ,45 },
{72 ,-87 , 0, 1 ,44 },
{73 ,-91 , 0, 1 ,42 },
{74 ,-95 , 0, 1 ,40 },
{75 ,-99 , 0, 1 ,38 },
{76 ,-103 , 0, 1 ,37 },
{77 ,-107 , 0, 1 ,36 },
{78 ,-111 , 0, 1 ,34 },
{79 ,-116 , 0, 1 ,33 },
{80 ,-120 , 0, 1 ,32 },
{81 ,-124 , 0, 1 ,31 },
{82 ,-129 , 0, 1 ,29 },
{83 ,-134 , 0, 1 ,28 },
{84 ,-138 , 0, 1 ,27 },
{85 ,-143 , 0, 1 ,26 }
} ;
/**
* \brief RTC calibration for Temperature or PPM drift
*/
extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr)
{
uint16_t i;
uint32_t MR_Reg, Size;
Size = sizeof(PPM_Lookup);
MR_Reg =0;
for(i=0; i< Size; i++)
{
if(PPM_Lookup[i].Tempr == CurrentTempr)
{
MR_Reg |= RTC_MR_CORRECTION(PPM_Lookup[i].CORRECTION);
MR_Reg |= (PPM_Lookup[i].HIGHPPM << 15);
MR_Reg |= (PPM_Lookup[i].NEGPPM << 4);
pRtc->RTC_MR = MR_Reg; // update the calibration value
break;
}
}
}