39 #include <inc/hw_types.h>
40 #include <inc/hw_ccfg.h>
41 #include <inc/hw_fcfg1.h>
53 #undef OSCClockSourceSet
54 #define OSCClockSourceSet NOROM_OSCClockSourceSet
55 #undef OSCClockSourceGet
56 #define OSCClockSourceGet NOROM_OSCClockSourceGet
57 #undef OSCHF_GetStartupTime
58 #define OSCHF_GetStartupTime NOROM_OSCHF_GetStartupTime
59 #undef OSCHF_TurnOnXosc
60 #define OSCHF_TurnOnXosc NOROM_OSCHF_TurnOnXosc
61 #undef OSCHF_AttemptToSwitchToXosc
62 #define OSCHF_AttemptToSwitchToXosc NOROM_OSCHF_AttemptToSwitchToXosc
63 #undef OSCHF_SwitchToRcOscTurnOffXosc
64 #define OSCHF_SwitchToRcOscTurnOffXosc NOROM_OSCHF_SwitchToRcOscTurnOffXosc
65 #undef OSCHF_DebugGetCrystalAmplitude
66 #define OSCHF_DebugGetCrystalAmplitude NOROM_OSCHF_DebugGetCrystalAmplitude
67 #undef OSCHF_DebugGetExpectedAverageCrystalAmplitude
68 #define OSCHF_DebugGetExpectedAverageCrystalAmplitude NOROM_OSCHF_DebugGetExpectedAverageCrystalAmplitude
69 #undef OSC_HPOSCRelativeFrequencyOffsetGet
70 #define OSC_HPOSCRelativeFrequencyOffsetGet NOROM_OSC_HPOSCRelativeFrequencyOffsetGet
71 #undef OSC_HPOSCRelativeFrequencyOffsetToRFCoreFormatConvert
72 #define OSC_HPOSCRelativeFrequencyOffsetToRFCoreFormatConvert NOROM_OSC_HPOSCRelativeFrequencyOffsetToRFCoreFormatConvert
81 #define RTC_CV_TO_MS(x) (( 1000 * ( x )) >> 16 )
82 #define RTC_CV_TO_US(x) (( 1000000 * ( x )) >> 16 )
117 if(ui32SrcClk & OSC_SRC_CLK_HF)
131 if(ui32SrcClk & OSC_SRC_CLK_MF)
142 if(ui32SrcClk & OSC_SRC_CLK_LF)
162 uint32_t ui32ClockSource;
173 if(ui32SrcClk == OSC_SRC_CLK_LF)
185 return (ui32ClockSource);
196 uint32_t deltaTimeSinceXoscOnInMs ;
197 int32_t deltaTempSinceXoscOn ;
198 uint32_t newStartupTimeInUs ;
203 if ( deltaTempSinceXoscOn < 0 ) {
204 deltaTempSinceXoscOn = -deltaTempSinceXoscOn;
207 if ( (( timeUntilWakeupInMs + deltaTimeSinceXoscOnInMs ) > 3000 ) ||
208 ( deltaTempSinceXoscOn > 5 ) ||
212 newStartupTimeInUs = 2000;
221 newStartupTimeInUs += ( newStartupTimeInUs >> 2 );
227 if ( newStartupTimeInUs < 200 ) {
228 newStartupTimeInUs = 200;
230 if ( newStartupTimeInUs > 4000 ) {
231 newStartupTimeInUs = 4000;
233 return ( newStartupTimeInUs );
258 uint32_t startupTimeInUs;
259 uint32_t prevLimmit25InUs;
274 prevLimmit25InUs -= ( prevLimmit25InUs >> 2 );
276 if ( prevLimmit25InUs > startupTimeInUs ) {
322 >> (32 - FCFG1_FREQ_OFFSET_HPOSC_COMP_P0_W));
324 >> (32 - FCFG1_FREQ_OFFSET_HPOSC_COMP_P1_W));
326 >> (32 - FCFG1_FREQ_OFFSET_HPOSC_COMP_P2_W));
329 >> (32 - FCFG1_MISC_CONF_2_HPOSC_COMP_P3_W));
342 int32_t tempDelta = (tempDegC - 27);
343 int32_t tempDeltaX2 = tempDelta * tempDelta;
344 int32_t d = paramP0 + ((tempDelta*paramP1)>>3) + ((tempDeltaX2*paramP2)>>10) + ((tempDeltaX2*tempDelta*paramP3)>>18);
389 int32_t rfCoreFreqOffset = -HPOSC_RelFreqOffset + (( HPOSC_RelFreqOffset * HPOSC_RelFreqOffset ) >> 22 );
391 return ( rfCoreFreqOffset );
402 uint32_t oscCfgRegCopy ;
428 return ( ampValue * 15 );
439 uint32_t ampCompTh1 ;
440 uint32_t highThreshold ;
441 uint32_t lowThreshold ;
449 return ((( highThreshold + lowThreshold ) * 15 ) >> 1 );
static void OSCHfSourceSwitch(void)
Switch the high frequency clock.
uint32_t OSCHF_DebugGetCrystalAmplitude(void)
Get crystal amplitude (assuming crystal is running).
uint32_t OSCHF_DebugGetExpectedAverageCrystalAmplitude(void)
Get the expected average crystal amplitude.
uint32_t timeXoscStable_CV
int32_t AONBatMonTemperatureGetDegC(void)
Get the current temperature measurement as a signed value in Deg Celsius.
uint32_t OSCClockSourceGet(uint32_t ui32SrcClk)
Get the source clock settings.
void DDI16BitfieldWrite(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Mask, uint32_t ui32Shift, uint16_t ui32Data)
Write a bitfield via the DDI using 16-bit maskable write.
uint32_t OSCHF_GetStartupTime(uint32_t timeUntilWakeupInMs)
Returns maximum startup time (in microseconds) of XOSC_HF.
bool OSCHF_AttemptToSwitchToXosc(void)
Switch to XOSC_HF if XOSC_HF is ready.
static bool OSCHfSourceReady(void)
Check if the HF clock source is ready to be switched.
uint32_t previousStartupTimeInUs
uint16_t DDI16BitfieldRead(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Mask, uint32_t ui32Shift)
Read a bitfield via the DDI using 16-bit read.
static OscHfGlobals_t oscHfGlobals
int32_t OSC_HPOSCRelativeFrequencyOffsetGet(int32_t tempDegC)
Calculate the temperature dependent relative frequency offset of HPOSC.
void OSCHF_SwitchToRcOscTurnOffXosc(void)
Switch to RCOSC_HF and turn off XOSC_HF.
#define FACTOR_SEC_TO_COMP_VAL_FORMAT
uint32_t AONRTCCurrentCompareValueGet(void)
Get the current value of the RTC counter in a format that matches RTC compare values.
void OSCClockSourceSet(uint32_t ui32SrcClk, uint32_t ui32Osc)
Configure the oscillator input to the a source clock.
void OSCHF_TurnOnXosc(void)
Turns on XOSC_HF (but without switching to XOSC_HF).
int16_t OSC_HPOSCRelativeFrequencyOffsetToRFCoreFormatConvert(int32_t HPOSC_RelFreqOffset)
Converts the relative frequency offset of HPOSC to the RF Core parameter format.