工具/软件:
CC2340R5:32kHz RC 振荡器 (LFOSC) 的准确性 — 蓝牙论坛- Bluetooth︎ — TI E2E 支持论坛
继续讨论链接文章的主题、我使用了外部振荡器 48M 计时器读取 RTC TIME8U 的值。 无论校准时间是 1 秒还是 5 分钟、它都非常接近理想值。 这对我来说很奇怪。 根据 TI FAE 给出的测试报告、内部 32.768K 的 ppm 误差如下所示 


根据这些数据、32.768K 的平均 ppm 误差将下降约为–100ppm。 但是、我使用 48M 计时器进行校准。 无论 I 测试多少次、每秒误差值最多有 2 个计数。 因为它是 TIME8U 的值、每秒转换后约为 16us、这与数据不一致。 校准方法如下所示:
/* ----Calibration RTC Timer Initial ---- */
hTimer_RTC = NULL;
LGPTimerLPF3_Params LGPparams_RTC;
LGPTimerLPF3_Params_init(&LGPparams_RTC);
LGPparams_RTC.hwiCallbackFxn = Calibration_RTCTimerCallback;
LGPparams_RTC.prescalerDiv = 48 - 1;
uint32_t counterTarget_RTC;
hTimer_RTC = LGPTimerLPF3_open(CONFIG_LGPTIMER_1, &LGPparams_RTC);
if(hTimer == NULL)
{
// while(1){}
}
counterTarget_RTC = 1000 - 1; // 8ms with a system clock of 48MHz
LGPTimerLPF3_setInitialCounterTarget(hTimer_RTC, counterTarget_RTC, true);
g_tRTC.uiRTC_Calibration_Count = 0;
g_tRTC.uiRTC_Calibration_8us_old = HWREG(RTC_BASE + RTC_O_TIME8U);
LGPTimerLPF3_enableInterrupt(hTimer_RTC, LGPTimerLPF3_INT_TGT);
LGPTimerLPF3_start(hTimer_RTC, LGPTimerLPF3_CTL_MODE_UP_PER);void Calibration_RTCTimerCallback(LGPTimerLPF3_Handle lgptHandle, LGPTimerLPF3_IntMask interruptMask)
{
g_tRTC.uiRTC_Calibration_Count++;
if(g_tRTC.uiRTC_Calibration_Count >= 1000)
{
g_tRTC.uiRTC_Calibration_8us = HWREG(RTC_BASE + RTC_O_TIME8U);
LGPTimerLPF3_disableInterrupt (hTimer_RTC, LGPTimerLPF3_INT_TGT);
LGPTimerLPF3_stop(hTimer_RTC);
if(g_tRTC.uiRTC_Calibration_8us < g_tRTC.uiRTC_Calibration_8us_old)
g_tRTC.iRTC_Calibration_8us_diff = (g_tRTC.uiRTC_Calibration_8us + 0xFFFFFFFF) + g_tRTC.uiRTC_Calibration_8us_old;
else
g_tRTC.iRTC_Calibration_8us_diff = g_tRTC.uiRTC_Calibration_8us - g_tRTC.uiRTC_Calibration_8us_old;
g_tRTC.dRTC_Calibration_perSecond = ((double)g_tRTC.iRTC_Calibration_8us_diff - 125000) * 0.000008;
}
}我还确保工程设置中的 syscfg 已正确设置为 LF RCOSC 
1.我怀疑当 48M 计时器运行时, RTC 也使用 48M 振荡器运行,导致校准值与数据值之间的差异很大。 换句话说、RTC 实际上等于 48M、因此 RTC 和 48M 的理论值几乎相同
2.是否有办法确保使用 48M 计时器时,RTC 时钟源肯定使用内部 32.768K 振荡器?