如何正确启用恩智浦MCXN947芯片中RTC模块的亚秒计数器功能

描述

概  述

在嵌入式系统设计中,时间管理是一个基础却至关重要的环节。无论是任务调度、数据采集,还是低功耗场景下的精准唤醒,对时间精度的要求都在不断提升。

MCXN947芯片内置的RTC(Real-Time Clock)模块,除了提供标准的秒级计时功能外,还支持Subsecond Counter(亚秒计数器),使系统能够在1秒粒度基础上进一步提升时间分辨率,实现更精细的时间控制。

本文将基于官方参考手册,详细介绍如何正确启用该功能,并结合实际测试结果,梳理完整的配置流程与关键注意点,帮助开发者快速上手并稳定应用这一特性。

硬件环境:

开发板:FRDM-MCXN947

软件环境:

IDE:MCUXpresso IDE v25.06.0

SDK:SDK Builder | MCUXpresso SDK Builder (nxp.com)

基础工程: frdmmcxn947_irtc_cm33_core0

一、Subsecond Counter简介

根据MCXN947的参考手册第56.3.2节:

Subsecond Counter是一个独立的计数器,用于在1秒RTC计数器的基础上提供更精细的时间分辨率。

它不会参与报警、唤醒或中断的生成。

在RTC被复位或1Hz主计数器被禁用时,Subsecond Counter会被禁用。

必须在使能RTC后,手动写入SUBSECOND_CTRL[SUB_SECOND_CNT_EN]=1来启用该计数器。

启用后,计数器会等待下一个1秒周期开始,然后以lp_osc时钟频率开始计数,并在每秒开始时回滚为0。

值得注意的是,当调用IRTC_GetDefaultConfig(&irtcConfig); 时,默认情况下lp_osc的时钟频率为16KHz,这意味着Subsecond Counter每秒可以提供最多16834个计数单位的时间分辨率。

二、使能关键步骤

2.1 使能RTC时钟输出:

irtcConfig.disableClockOutput=false;

这一步确保RTC模块可以输出1Hz时钟信号。

2.2 配置RTC时钟输出频率

 

 
RTC->CTRL &= (uint16_t)(~RTC_CTRL_CLKOUT_MASK);
 
RTC->CTRL |= RTC_CTRL_CLKOUT((uint16_t)kIRTC_ClkoutCoarse1Hz);

 

选择粗略的1Hz时钟作为RTC的输出源。

2.3 使能Subsecond Counter

IRTC_EnableSubsecondCounter(RTC, true);

手动启用Subsecond Counter功能。

三、完整代码示例

以下是一个完整的代码示例,展示如何初始化IRTC并读取Subsecond Counter的值:

 

int main(void)
{
 
irtc_config_t irtcConfig;
//初始化板级硬件
BOARD_InitHardware();


//获取默认配置(lp_osc 默认频率为16KHz)
IRTC_GetDefaultConfig(&irtcConfig); 


//使能RTC时钟输出
irtcConfig.disableClockOutput = false; 


if (IRTC_Init(RTC, &irtcConfig) == kStatus_Fail)
{
return 1;
}
PRINTF("RTC Example START:
");
//配置 1Hz时钟输出
IRTC_ConfigClockOut(RTC, kIRTC_ClkoutCoarse1Hz); 


//启用 Subsecond Counter
IRTC_EnableSubsecondCounter(RTC, true); 


//等待计数器启动
SDK_DelayAtLeastUs(1000000, CLOCK_GetFreq(kCLOCK_CoreSysClk));  


while(1)
{
//读取计数器值
uint32_t subSecond_cnt = IRTC_GetSubsecondCount(RTC); 


PRINTF("subSecond Counter is %u.
", subSecond_cnt);
//延时
SDK_DelayAtLeastUs(100000, 150000000); 


 100ms
}
}

 

四、测试结果

在实际运行中,每秒内subSecond_cnt的值从0开始递增,最大值接近16000,与lp_osc的默认频率一致。每过一秒,计数器会自动回滚为0,重新开始计数。以下是部分输出示例:

计数器

这验证了Subsecond Counter的工作机制和精度,适用于需要亚秒级时间戳的应用场景。

五、结 语

通过合理配置RTC时钟输出,并手动启用Subsecond Counter,MCXN947的IRTC模块即可提供稳定可靠的亚秒级时间精度。这一能力在低功耗唤醒、精确时间戳记录以及高精度事件控制等场景中具有非常实际的应用价值。

本文结合官方资料与实测验证,总结了一套清晰可复用的配置方法及代码思路,希望能够帮助开发者在项目中高效实现高精度时间管理。如在实际应用中有更多拓展或优化空间,也欢迎进一步交流与探讨。

TIC: Harry Zhang      

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

全部0条评论

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

×
20
完善资料,
赚取积分