查看: 109|回复: 0

如何使能MCXN947的RTC Subsecond counter的功能

[复制链接]

该用户从未签到

1

主题

1

帖子

0

注册会员

Rank: 2

积分
76
最后登录
2025-10-23
发表于 2025-10-16 15:38:53 | 显示全部楼层 |阅读模式
本帖最后由 eefocus_3965619 于 2025-10-16 15:44 编辑

1.  概述

在嵌入式系统中,精确的时间管理对于事件调度、数据采集和低功耗唤醒等功能至关重要。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

2. 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。



3. 使能 Subsecond Counter 的关键步骤
3.1 使能 RTC 时钟输出:

  1. IRTC_GetDefaultConfig(&irtcConfig);
  2. irtcConfig.disableClockOutput = false;
复制代码
这一步确保 RTC 模块可以输出时钟信号。

3.2 配置 RTC 时钟输出频率:

  1. RTC->CTRL &= (uint16_t)(~RTC_CTRL_CLKOUT_MASK);
  2. RTC->CTRL |= RTC_CTRL_CLKOUT((uint16_t)kIRTC_ClkoutCoarse1Hz);
复制代码
根据数据手册, 选择粗略的 1Hz 时钟作为 RTC 的输出源。

3.3 使能 Subsecond Counter:

  1. IRTC_EnableSubsecondCounter(RTC, true);
复制代码
手动启用 Subsecond Counter 功能。

4. 完整代码示例及测试结果

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

  1. int main(void)
  2. {
  3.     irtc_config_t irtcConfig;

  4.     BOARD_InitHardware(); // 初始化板级硬件

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

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

  7.     if (IRTC_Init(RTC, &irtcConfig) == kStatus_Fail)
  8.     {
  9.         return 1;
  10.     }

  11.     PRINTF("RTC Example START:\r\n");

  12. <blockquote>RTC->CTRL &= (uint16_t)(~RTC_CTRL_CLKOUT_MASK);
复制代码


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

每秒内 subSecond_cnt 的值从 0 开始递增,最大值接近 16834,与 lp_osc 的默认频率一致。每过一秒,计数器会自动回滚为 0,重新开始计数。

Snipaste_2025-10-16_15-37-26.png

5. 结语

通过正确配置 RTC 时钟输出并手动启用 Subsecond Counter,MCXN947 的 IRTC 模块可以提供亚秒级的时间精度,非常适合用于低功耗唤醒、精确时间戳记录等应用场景。本文结合官方手册和实际测试结果,提供了完整的使能流程和代码参考,帮助开发者快速实现该功能。


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-10-24 06:30 , Processed in 0.085650 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表