nRF54L15如何初始化GRTC

电子说

1.4w人已加入

描述

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 rn",app_syscounter = user_get_grtc_count());
		systemoff_count++;
		printf("systemoff_count = %drn",systemoff_count);
		if(systemoff_count == 30)
		{
				enter_system_off();
		}
	}

}

 

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分