61 #include "../inc/hw_types.h" 62 #include "../inc/hw_memmap.h" 63 #include "../inc/hw_ckmd.h" 64 #include "../inc/hw_fcfg.h" 85 #define CKMD_LFOSC_MID_TEMP_COEFFICIENT_RANGE_MIN (INT16_MIN) 86 #define CKMD_LFOSC_MID_TEMP_COEFFICIENT_RANGE_MAX (70) 90 #define CKMD_WATCHDOG_UNLOCK 0x1ACCE551 105 HWREG(CKMD_BASE + CKMD_O_HFXTCTL) |= CKMD_HFXTCTL_HPBUFEN;
115 HWREG(CKMD_BASE + CKMD_O_HFXTCTL) &= ~CKMD_HFXTCTL_HPBUFEN;
140 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~(CKMD_HFXTINIT_Q1CAP_M | CKMD_HFXTINIT_Q2CAP_M);
141 tmp |= (q1CapTrim << CKMD_HFXTINIT_Q1CAP_S) & CKMD_HFXTINIT_Q1CAP_M;
142 tmp |= (q2CapTrim << CKMD_HFXTINIT_Q2CAP_S) & CKMD_HFXTINIT_Q2CAP_M;
143 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
167 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_Q1CAP_M;
168 tmp |= (q1Cap << CKMD_HFXTINIT_Q1CAP_S) & CKMD_HFXTINIT_Q1CAP_M;
169 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
193 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_Q2CAP_M;
194 tmp |= (q2Cap << CKMD_HFXTINIT_Q2CAP_S) & CKMD_HFXTINIT_Q2CAP_M;
195 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
219 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_IREF_M;
220 tmp |= (iref << CKMD_HFXTINIT_IREF_S) & CKMD_HFXTINIT_IREF_M;
221 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
245 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_IDAC_M;
246 tmp |= (idac << CKMD_HFXTINIT_IDAC_S) & CKMD_HFXTINIT_IDAC_M;
247 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
271 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_AMPTHR_M;
272 tmp |= (amplitudeThreshold << CKMD_HFXTINIT_AMPTHR_S) & CKMD_HFXTINIT_AMPTHR_M;
273 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
289 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_Q1CAP_M) >> CKMD_HFXTINIT_Q1CAP_S;
305 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_Q2CAP_M) >> CKMD_HFXTINIT_Q2CAP_S;
321 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_IREF_M) >> CKMD_HFXTINIT_IREF_S;
337 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_IDAC_M) >> CKMD_HFXTINIT_IDAC_S;
353 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_AMPTHR_M) >> CKMD_HFXTINIT_AMPTHR_S;
378 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~(CKMD_HFXTTARG_Q1CAP_M | CKMD_HFXTTARG_Q2CAP_M);
379 tmp |= (q1CapTrim << CKMD_HFXTTARG_Q1CAP_S) & CKMD_HFXTTARG_Q1CAP_M;
380 tmp |= (q2CapTrim << CKMD_HFXTTARG_Q2CAP_S) & CKMD_HFXTTARG_Q2CAP_M;
381 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
403 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_Q1CAP_M;
404 tmp |= (q1Cap << CKMD_HFXTTARG_Q1CAP_S) & CKMD_HFXTTARG_Q1CAP_M;
405 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
427 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_Q2CAP_M;
428 tmp |= (q2Cap << CKMD_HFXTTARG_Q2CAP_S) & CKMD_HFXTTARG_Q2CAP_M;
429 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
451 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_IREF_M;
452 tmp |= (iref << CKMD_HFXTTARG_IREF_S) & CKMD_HFXTTARG_IREF_M;
453 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
475 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_IDAC_M;
476 tmp |= (idac << CKMD_HFXTTARG_IDAC_S) & CKMD_HFXTTARG_IDAC_M;
477 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
499 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_AMPTHR_M;
500 tmp |= (amplitudeThreshold << CKMD_HFXTTARG_AMPTHR_S) & CKMD_HFXTTARG_AMPTHR_M;
501 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
517 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_Q1CAP_M) >> CKMD_HFXTTARG_Q1CAP_S;
533 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_Q2CAP_M) >> CKMD_HFXTTARG_Q2CAP_S;
549 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_IREF_M) >> CKMD_HFXTTARG_IREF_S;
565 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_IDAC_M) >> CKMD_HFXTTARG_IDAC_S;
581 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_AMPTHR_M) >> CKMD_HFXTTARG_AMPTHR_S;
596 if (fcfg->appTrims.revision >= 0x5)
598 ppmRtn = fcfg->appTrims.cc23x0r5.misc0.lfoscPpmRtn;
622 uint8_t ppmTempMid = 20;
623 if (fcfg->appTrims.revision >= 0x5)
625 ppmTempMid = fcfg->appTrims.cc23x0r5.misc0.lfoscPpmTempMid;
629 return ppmTempMid * 13;
650 uint8_t ppmTempExt = 20;
651 if (fcfg->appTrims.revision >= 0x5)
653 ppmTempExt = fcfg->appTrims.cc23x0r5.misc0.lfoscPpmTempExt;
657 return ppmTempExt * 35;
674 while (HWREG(CKMD_BASE + CKMD_O_WDTLOCK) == 1) {}
684 HWREG(CKMD_BASE + CKMD_O_WDTLOCK) = 0x0;
699 HWREG(CKMD_BASE + CKMD_O_WDTCNT) = value;
714 HWREG(CKMD_BASE + CKMD_O_WDTTEST) = stopWhenCpuIsHalted ? CKMD_WDTTEST_STALLEN_EN : CKMD_WDTTEST_STALLEN_DIS;
__STATIC_INLINE void CKMDSetTargetQ1CapTrim(uint32_t q1Cap)
Sets target HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:401
__STATIC_INLINE void CKMDSetTargetIrefTrim(uint32_t iref)
Sets target HFXT IREF ramp trim.
Definition: ckmd.h:449
__STATIC_INLINE uint32_t CKMDGetTargetAmplitudeThresholdTrim(void)
Gets target HFXT amplitude threshold ramp trim.
Definition: ckmd.h:579
__STATIC_INLINE uint_least16_t CKMDGetLfoscMidTempCoefficientPpmPerC(void)
Gets the the worst-case LFOSC temperature coefficient in the "middle" temperature range...
Definition: ckmd.h:618
__STATIC_INLINE void CKMDSetTargetIdacTrim(uint32_t idac)
Sets target HFXT IDAC ramp trim.
Definition: ckmd.h:473
__STATIC_INLINE uint32_t CKMDGetTargetIdacTrim(void)
Gets target HFXT IDAC ramp trim.
Definition: ckmd.h:563
__STATIC_INLINE void CKMDSetInitialCapTrim(uint32_t q1CapTrim, uint32_t q2CapTrim)
Sets initial HFXT capacitor ramp trims.
Definition: ckmd.h:138
__STATIC_INLINE void CKMDSetInitialQ1CapTrim(uint32_t q1Cap)
Sets initial HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:165
__STATIC_INLINE void CKMDSetInitialAmplitudeThresholdTrim(uint32_t amplitudeThreshold)
Sets initial HFXT amplitude threshold ramp trim.
Definition: ckmd.h:269
__STATIC_INLINE void CKMDEnableHighPerformanceClockBuffer(void)
Enable high performance clock buffer.
Definition: ckmd.h:103
__STATIC_INLINE void CKMDSetWatchdogDebugConfig(bool stopWhenCpuIsHalted)
Configure if the Watchdog should stop when the CPU is halted by a debugger.
Definition: ckmd.h:712
__STATIC_INLINE void CKMDSetInitialQ2CapTrim(uint32_t q2Cap)
Sets initial HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:191
__STATIC_INLINE uint32_t CKMDGetTargetQ2CapTrim(void)
Gets target HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:531
__STATIC_INLINE uint32_t CKMDGetInitialQ1CapTrim(void)
Gets initial HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:287
__STATIC_INLINE uint32_t CKMDGetInitialIdacTrim(void)
Gets initial HFXT IDAC ramp trim.
Definition: ckmd.h:335
__STATIC_INLINE void CKMDUnlockWatchdog(void)
Unlock write access to the Watchdog.
Definition: ckmd.h:668
#define CKMD_WATCHDOG_UNLOCK
Watchdog unlocking value.
Definition: ckmd.h:90
__STATIC_INLINE uint_least16_t CKMDGetLfoscExtTempCoefficientPpmPerC(void)
Gets the the worst-case LFOSC temperature coefficient in the "extended" temperature range...
Definition: ckmd.h:646
__STATIC_INLINE void CKMDSetTargetAmplitudeThresholdTrim(uint32_t amplitudeThreshold)
Sets target HFXT amplitude threshold ramp trim.
Definition: ckmd.h:497
__STATIC_INLINE uint32_t CKMDGetTargetQ1CapTrim(void)
Gets target HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:515
__STATIC_INLINE void CKMDLockWatchdog(void)
Lock write access to the Watchdog.
Definition: ckmd.h:682
__STATIC_INLINE void CKMDSetWatchdogCounter(uint32_t value)
Set watchdog counter value.
Definition: ckmd.h:697
__STATIC_INLINE void CKMDSetTargetCapTrim(uint32_t q1CapTrim, uint32_t q2CapTrim)
Sets target HFXT capacitor ramp trims.
Definition: ckmd.h:376
__STATIC_INLINE uint32_t CKMDGetInitialIrefTrim(void)
Gets initial HFXT IREF ramp trim.
Definition: ckmd.h:319
__STATIC_INLINE void CKMDDisableHighPerformanceClockBuffer(void)
Disable high performance clock buffer.
Definition: ckmd.h:113
__STATIC_INLINE void CKMDSetInitialIrefTrim(uint32_t iref)
Sets initial HFXT IREF ramp trim.
Definition: ckmd.h:217
#define __STATIC_INLINE
Definition: cmsis_gcc.h:47
__STATIC_INLINE uint32_t CKMDGetInitialAmplitudeThresholdTrim(void)
Gets initial HFXT amplitude threshold ramp trim.
Definition: ckmd.h:351
__STATIC_INLINE void CKMDSetTargetQ2CapTrim(uint32_t q2Cap)
Sets target HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:425
__STATIC_INLINE void CKMDSetInitialIdacTrim(uint32_t idac)
Sets initial HFXT IDAC ramp trim.
Definition: ckmd.h:243
__STATIC_INLINE uint32_t CKMDGetTargetIrefTrim(void)
Gets target HFXT IREF ramp trim.
Definition: ckmd.h:547
__STATIC_INLINE uint_least16_t CKMDGetLfoscRtnPpm(void)
Gets the worst-case LFOSC frequency jump due to RTN.
Definition: ckmd.h:591
__STATIC_INLINE uint32_t CKMDGetInitialQ2CapTrim(void)
Gets initial HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:303