|
Nordic的nRF54L15最新的外设GRTC
全局RTC,可以在深度休眠唤醒设备,甚至通过获取计数值可以用来做万年历
GRTC 的最大亮点在于其跨电源模式的持续可用性。无论是系统处于全速运行状态(使用 16MHz 高频时钟),还是进入低功耗休眠甚至完全关机模式(自动切换至 32.768kHz 时钟),GRTC 都能保持计时功能。这种无缝切换机制确保了系统在各种工作状态下都能维持精确的时间基准。
超高精度与超长计时范围
凭借 52 位的计数器宽度和 1 微秒的分辨率,GRTC 创造了令人惊叹的计时能力。理论上,它可以连续运行 142 年才会发生计数器溢出,这一特性使其特别适合需要长期数据记录或事件追踪的应用场景。
功耗优化设计
在低功耗模式下使用 32.768kHz 时钟不仅保证了计时的基本精度,还显著降低了能耗。这种双时钟源的智能切换机制,完美平衡了高精度计时与超低功耗的需求,为电池供电的物联网设备提供了理想的时间管理解决方案
一、prj.conf添加宏
CONFIG_POWEROFF=y
二、初始化函数:
uint64_t user_get_grtc_count(){ uint32_t syscounterl_value, syscounterh_value, syscounterh; uint64_t syscounter; uint8_t m = 1; do { syscounterl_value = NRF_GRTC- >SYSCOUNTER[m].SYSCOUNTERL; syscounterh = NRF_GRTC- >SYSCOUNTER[m].SYSCOUNTERH; syscounterh_value = ((syscounterh & GRTC_SYSCOUNTER_SYSCOUNTERH_VALUE_Msk) > > GRTC_SYSCOUNTER_SYSCOUNTERH_VALUE_Pos); if (((syscounterh & GRTC_SYSCOUNTER_SYSCOUNTERH_OVERFLOW_Msk) > > GRTC_SYSCOUNTER_SYSCOUNTERH_OVERFLOW_Pos) == GRTC_SYSCOUNTER_SYSCOUNTERH_OVERFLOW_Overflow) { syscounterh = syscounterh_value - 1; } } while (((syscounterh & GRTC_SYSCOUNTER_SYSCOUNTERH_BUSY_Msk) > > GRTC_SYSCOUNTER_SYSCOUNTERH_BUSY_Pos) != GRTC_SYSCOUNTER_SYSCOUNTERH_BUSY_Ready); return syscounter = (syscounterh_value < < 32) + syscounterl_value;}//30s 获取计数值然后定时休眠和唤醒void test(void){ int systemoff_count = 0; for (;;) { dk_set_led(RUN_STATUS_LED, (++blink_status) % 2); k_sleep(K_MSEC(RUN_LED_BLINK_INTERVAL)); printk("time us = %lld \r\n",app_syscounter = user_get_grtc_count()); systemoff_count++; printf("systemoff_count = %d\r\n",systemoff_count); if(systemoff_count == 30) { enter_system_off(); } }}
|
|