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) 94 #define CKMD_CAN_CLOCK_SOURCE_CLKAF CKMD_CANCLKSEL_SRC_CLKAF 95 #define CKMD_CAN_CLOCK_SOURCE_CLKHF CKMD_CANCLKSEL_SRC_CLKHF 97 #define CKMD_CAN_CLOCK_SOURCE_NONE CKMD_CANCLKSEL_SRC_DIS 106 #define CKMD_AFCLK_SOURCE_CLKAF CKMD_AFCLKSEL_SRC_CLKAF 107 #define CKMD_AFCLK_SOURCE_CLKHF CKMD_AFCLKSEL_SRC_CLKHF 109 #define CKMD_AFCLK_SOURCE_CLKREF CKMD_AFCLKSEL_SRC_CLKREF 111 #define CKMD_AFCLK_SOURCE_NONE CKMD_AFCLKSEL_SRC_DIS 116 #define CKMD_WATCHDOG_UNLOCK 0x1ACCE551 156 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~(CKMD_HFXTINIT_Q1CAP_M | CKMD_HFXTINIT_Q2CAP_M);
157 tmp |= (q1CapTrim << CKMD_HFXTINIT_Q1CAP_S) & CKMD_HFXTINIT_Q1CAP_M;
158 tmp |= (q2CapTrim << CKMD_HFXTINIT_Q2CAP_S) & CKMD_HFXTINIT_Q2CAP_M;
159 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
183 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_Q1CAP_M;
184 tmp |= (q1Cap << CKMD_HFXTINIT_Q1CAP_S) & CKMD_HFXTINIT_Q1CAP_M;
185 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
209 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_Q2CAP_M;
210 tmp |= (q2Cap << CKMD_HFXTINIT_Q2CAP_S) & CKMD_HFXTINIT_Q2CAP_M;
211 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
235 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_IREF_M;
236 tmp |= (iref << CKMD_HFXTINIT_IREF_S) & CKMD_HFXTINIT_IREF_M;
237 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
261 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_IDAC_M;
262 tmp |= (idac << CKMD_HFXTINIT_IDAC_S) & CKMD_HFXTINIT_IDAC_M;
263 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
287 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & ~CKMD_HFXTINIT_AMPTHR_M;
288 tmp |= (amplitudeThreshold << CKMD_HFXTINIT_AMPTHR_S) & CKMD_HFXTINIT_AMPTHR_M;
289 HWREG(CKMD_BASE + CKMD_O_HFXTINIT) = tmp;
305 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_Q1CAP_M) >> CKMD_HFXTINIT_Q1CAP_S;
321 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_Q2CAP_M) >> CKMD_HFXTINIT_Q2CAP_S;
337 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_IREF_M) >> CKMD_HFXTINIT_IREF_S;
353 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_IDAC_M) >> CKMD_HFXTINIT_IDAC_S;
369 return (HWREG(CKMD_BASE + CKMD_O_HFXTINIT) & CKMD_HFXTINIT_AMPTHR_M) >> CKMD_HFXTINIT_AMPTHR_S;
394 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~(CKMD_HFXTTARG_Q1CAP_M | CKMD_HFXTTARG_Q2CAP_M);
395 tmp |= (q1CapTrim << CKMD_HFXTTARG_Q1CAP_S) & CKMD_HFXTTARG_Q1CAP_M;
396 tmp |= (q2CapTrim << CKMD_HFXTTARG_Q2CAP_S) & CKMD_HFXTTARG_Q2CAP_M;
397 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
419 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_Q1CAP_M;
420 tmp |= (q1Cap << CKMD_HFXTTARG_Q1CAP_S) & CKMD_HFXTTARG_Q1CAP_M;
421 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
443 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_Q2CAP_M;
444 tmp |= (q2Cap << CKMD_HFXTTARG_Q2CAP_S) & CKMD_HFXTTARG_Q2CAP_M;
445 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
467 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_IREF_M;
468 tmp |= (iref << CKMD_HFXTTARG_IREF_S) & CKMD_HFXTTARG_IREF_M;
469 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
491 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_IDAC_M;
492 tmp |= (idac << CKMD_HFXTTARG_IDAC_S) & CKMD_HFXTTARG_IDAC_M;
493 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
515 uint32_t tmp = HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & ~CKMD_HFXTTARG_AMPTHR_M;
516 tmp |= (amplitudeThreshold << CKMD_HFXTTARG_AMPTHR_S) & CKMD_HFXTTARG_AMPTHR_M;
517 HWREG(CKMD_BASE + CKMD_O_HFXTTARG) = tmp;
533 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_Q1CAP_M) >> CKMD_HFXTTARG_Q1CAP_S;
549 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_Q2CAP_M) >> CKMD_HFXTTARG_Q2CAP_S;
565 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_IREF_M) >> CKMD_HFXTTARG_IREF_S;
581 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_IDAC_M) >> CKMD_HFXTTARG_IDAC_S;
597 return (HWREG(CKMD_BASE + CKMD_O_HFXTTARG) & CKMD_HFXTTARG_AMPTHR_M) >> CKMD_HFXTTARG_AMPTHR_S;
607 HWREG(CKMD_BASE + CKMD_O_HFXTCTL) |= CKMD_HFXTCTL_HPBUFEN;
617 HWREG(CKMD_BASE + CKMD_O_HFXTCTL) &= ~CKMD_HFXTCTL_HPBUFEN;
632 if (fcfg->appTrims.revision >= 0x5)
634 ppmRtn = fcfg->appTrims.cc27xx.misc0.lfoscPpmRtn;
658 uint8_t ppmTempMid = 20;
659 if (fcfg->appTrims.revision >= 0x5)
661 ppmTempMid = fcfg->appTrims.cc27xx.misc0.lfoscPpmTempMid;
665 return ppmTempMid * 20;
686 uint8_t ppmTempExt = 20;
687 if (fcfg->appTrims.revision >= 0x5)
689 ppmTempExt = fcfg->appTrims.cc27xx.misc0.lfoscPpmTempExt;
693 return ppmTempExt * 20;
710 while (HWREG(CKMD_BASE + CKMD_O_LOCK) == 1) {}
720 HWREG(CKMD_BASE + CKMD_O_LOCK) = 0x0;
735 HWREG(CKMD_BASE + CKMD_O_CNT) = value;
750 HWREG(CKMD_BASE + CKMD_O_TEST) = stopWhenCpuIsHalted ? CKMD_TEST_STALLEN_EN : CKMD_TEST_STALLEN_DIS;
765 HWREG(CKMD_BASE + CKMD_O_CANCLKSEL) = source & CKMD_CANCLKSEL_SRC_M;
781 HWREG(CKMD_BASE + CKMD_O_AFCLKSEL) = source & CKMD_AFCLKSEL_SRC_M;
795 #define CKMDEnableHighPerformanceClockBuffer CKMDEnableHighPerformanceClockBuffer_veneer 798 #define CKMDDisableHighPerformanceClockBuffer CKMDDisableHighPerformanceClockBuffer_veneer 801 #define CKMDGetLfoscRtnPpm CKMDGetLfoscRtnPpm_veneer 804 #define CKMDGetLfoscMidTempCoefficientPpmPerC CKMDGetLfoscMidTempCoefficientPpmPerC_veneer 807 #define CKMDGetLfoscExtTempCoefficientPpmPerC CKMDGetLfoscExtTempCoefficientPpmPerC_veneer 810 #define CKMDUnlockWatchdog CKMDUnlockWatchdog_veneer 813 #define CKMDLockWatchdog CKMDLockWatchdog_veneer 816 #define CKMDSetWatchdogCounter CKMDSetWatchdogCounter_veneer 819 #define CKMDSetWatchdogDebugConfig CKMDSetWatchdogDebugConfig_veneer 822 #define CKMDSelectCanClock CKMDSelectCanClock_veneer 825 #define CKMDSelectAfclk CKMDSelectAfclk_veneer __STATIC_INLINE void CKMDSetTargetQ1CapTrim(uint32_t q1Cap)
Sets target HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:417
__STATIC_INLINE void CKMDSetTargetIrefTrim(uint32_t iref)
Sets target HFXT IREF ramp trim.
Definition: ckmd.h:465
__tz_c_veneer void CKMDLockWatchdog_veneer(void)
Definition: ckmd_veneers.c:70
__STATIC_INLINE uint32_t CKMDGetTargetAmplitudeThresholdTrim(void)
Gets target HFXT amplitude threshold ramp trim.
Definition: ckmd.h:595
__STATIC_INLINE uint_least16_t CKMDGetLfoscMidTempCoefficientPpmPerC(void)
Gets the the worst-case LFOSC temperature coefficient in the "middle" temperature range...
Definition: ckmd.h:654
__tz_c_veneer void CKMDDisableHighPerformanceClockBuffer_veneer(void)
Definition: ckmd_veneers.c:45
__STATIC_INLINE void CKMDSetTargetIdacTrim(uint32_t idac)
Sets target HFXT IDAC ramp trim.
Definition: ckmd.h:489
__tz_c_veneer void CKMDSetWatchdogDebugConfig_veneer(bool stopWhenCpuIsHalted)
Definition: ckmd_veneers.c:80
__STATIC_INLINE uint32_t CKMDGetTargetIdacTrim(void)
Gets target HFXT IDAC ramp trim.
Definition: ckmd.h:579
__STATIC_INLINE void CKMDSetInitialCapTrim(uint32_t q1CapTrim, uint32_t q2CapTrim)
Sets initial HFXT capacitor ramp trims.
Definition: ckmd.h:154
__STATIC_INLINE void CKMDSetInitialQ1CapTrim(uint32_t q1Cap)
Sets initial HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:181
__STATIC_INLINE void CKMDSetInitialAmplitudeThresholdTrim(uint32_t amplitudeThreshold)
Sets initial HFXT amplitude threshold ramp trim.
Definition: ckmd.h:285
__STATIC_INLINE void CKMDEnableHighPerformanceClockBuffer(void)
Enable high performance clock buffer.
Definition: ckmd.h:605
__STATIC_INLINE void CKMDSetWatchdogDebugConfig(bool stopWhenCpuIsHalted)
Configure if the Watchdog should stop when the CPU is halted by a debugger.
Definition: ckmd.h:748
__tz_c_veneer uint_least16_t CKMDGetLfoscExtTempCoefficientPpmPerC_veneer(void)
Definition: ckmd_veneers.c:60
__STATIC_INLINE void CKMDSetInitialQ2CapTrim(uint32_t q2Cap)
Sets initial HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:207
__tz_c_veneer void CKMDUnlockWatchdog_veneer(void)
Definition: ckmd_veneers.c:65
__STATIC_INLINE uint32_t CKMDGetTargetQ2CapTrim(void)
Gets target HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:547
__tz_c_veneer uint_least16_t CKMDGetLfoscRtnPpm_veneer(void)
Definition: ckmd_veneers.c:50
__STATIC_INLINE uint32_t CKMDGetInitialQ1CapTrim(void)
Gets initial HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:303
__STATIC_INLINE uint32_t CKMDGetInitialIdacTrim(void)
Gets initial HFXT IDAC ramp trim.
Definition: ckmd.h:351
__STATIC_INLINE void CKMDUnlockWatchdog(void)
Unlock write access to the Watchdog.
Definition: ckmd.h:704
#define CKMD_WATCHDOG_UNLOCK
Watchdog unlocking value.
Definition: ckmd.h:116
__STATIC_INLINE uint_least16_t CKMDGetLfoscExtTempCoefficientPpmPerC(void)
Gets the the worst-case LFOSC temperature coefficient in the "extended" temperature range...
Definition: ckmd.h:682
__STATIC_INLINE void CKMDSetTargetAmplitudeThresholdTrim(uint32_t amplitudeThreshold)
Sets target HFXT amplitude threshold ramp trim.
Definition: ckmd.h:513
__tz_c_veneer void CKMDSelectCanClock_veneer(uint32_t source)
Definition: ckmd_veneers.c:85
__tz_c_veneer void CKMDSetWatchdogCounter_veneer(uint32_t value)
Definition: ckmd_veneers.c:75
__STATIC_INLINE uint32_t CKMDGetTargetQ1CapTrim(void)
Gets target HFXT Q1 capacitor ramp trim.
Definition: ckmd.h:531
__tz_c_veneer uint_least16_t CKMDGetLfoscMidTempCoefficientPpmPerC_veneer(void)
Definition: ckmd_veneers.c:55
__STATIC_INLINE void CKMDLockWatchdog(void)
Lock write access to the Watchdog.
Definition: ckmd.h:718
__STATIC_INLINE void CKMDSetWatchdogCounter(uint32_t value)
Set watchdog counter value.
Definition: ckmd.h:733
__STATIC_INLINE void CKMDSetTargetCapTrim(uint32_t q1CapTrim, uint32_t q2CapTrim)
Sets target HFXT capacitor ramp trims.
Definition: ckmd.h:392
__tz_c_veneer void CKMDEnableHighPerformanceClockBuffer_veneer(void)
Definition: ckmd_veneers.c:40
__tz_c_veneer void CKMDSelectAfclk_veneer(uint32_t source)
Definition: ckmd_veneers.c:90
__STATIC_INLINE uint32_t CKMDGetInitialIrefTrim(void)
Gets initial HFXT IREF ramp trim.
Definition: ckmd.h:335
__STATIC_INLINE void CKMDDisableHighPerformanceClockBuffer(void)
Disable high performance clock buffer.
Definition: ckmd.h:615
__STATIC_INLINE void CKMDSetInitialIrefTrim(uint32_t iref)
Sets initial HFXT IREF ramp trim.
Definition: ckmd.h:233
#define __STATIC_INLINE
Definition: cmsis_gcc.h:47
__STATIC_INLINE uint32_t CKMDGetInitialAmplitudeThresholdTrim(void)
Gets initial HFXT amplitude threshold ramp trim.
Definition: ckmd.h:367
__STATIC_INLINE void CKMDSetTargetQ2CapTrim(uint32_t q2Cap)
Sets target HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:441
__STATIC_INLINE void CKMDSetInitialIdacTrim(uint32_t idac)
Sets initial HFXT IDAC ramp trim.
Definition: ckmd.h:259
__STATIC_INLINE void CKMDSelectAfclk(uint32_t source)
Selects the clock source for AFCLK.
Definition: ckmd.h:779
__STATIC_INLINE void CKMDSelectCanClock(uint32_t source)
Selects the clock source for the CAN peripheral.
Definition: ckmd.h:763
__STATIC_INLINE uint32_t CKMDGetTargetIrefTrim(void)
Gets target HFXT IREF ramp trim.
Definition: ckmd.h:563
__STATIC_INLINE uint_least16_t CKMDGetLfoscRtnPpm(void)
Gets the worst-case LFOSC frequency jump due to RTN.
Definition: ckmd.h:627
__STATIC_INLINE uint32_t CKMDGetInitialQ2CapTrim(void)
Gets initial HFXT Q2 capacitor ramp trim.
Definition: ckmd.h:319