您好!
第522页的数据表指出:
可以读取 RTC 值
首先读取 HIBRTCC 寄存器、再读取 HIBRTCSS 寄存器的 RTCSSC 域、然后
然后再次读取 HIBRTCC 寄存器。 如果 HIBRTCC 寄存器两次读取的数值一样、则读取有效。
为什么会这样呢? 当 hibrtcc 变为+1时、亚秒寄存器会发生什么情况?
我编写了两个可以互换使用的函数:
uint32_t get_rtc_posix_sub(void) {
return (HibernateRTCGet() << 15) | (HWREG(HIB_RTCSS) & HIB_RTCSS_RTCSSC_M);
}
// notice: this recursive variant does it as stated in datasheet.
uint32_t get_rtc_posix_sub_formal(void) {
uint32_t posixTime = HibernateRTCGet();
uint32_t subseconds = (HWREG(HIB_RTCSS) & HIB_RTCSS_RTCSSC_M);
if(posixTime==HiberNateRTCGet()) {
return (posixTime << 15) | (HWREG(HIB_RTCSS) & HIB_RTCSS_RTCSSC_M);
} else {
return get_rtc_posix_sub_formal();
}
}
基本而言、在正常运行 RTC 之后、我只需要能够对位置时间+ 15位亚秒的内容进行时间戳记。 由于提供的 RTC 没有日历、因此计数范围为9到3600 x 24
因此、由于它不会超过17位、我将秒计数器移动15位、并将次秒计数器放置到该15位的空白处、以获得第二个+次秒时间戳。
非常感谢您提出任何想法。 之前是否有 类似目的的工作示例?
此致、
C.