Nordic 的RTC(Real-time counter)的介绍

发布于:2025-05-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

概述

1 RTC(Real-time counter)介绍

1.1 框架结构

1.2 时钟源

1.3 分辨率与溢出和precaler

2 寄存器功能介绍

2.1 计数寄存器

2.2 事件控制功能

2.3  比较功能

 2.4 读取COUNTER寄存器


概述

本文主要介绍Nordic 的RTC(Real-time counter),实时计数器(RTC)模块是一种低功耗定时器,运行在低频时钟源(LFCLK)上,具有24位计数器、12位预分频器、捕获/比较寄存器和tick事件生成器。RTC的分辨率为30.517µs,能够在高频时钟(HFCLK)关闭时运行,且在使用前需显式启动LFCLK。RTC的时钟源包括多种内部和外部振荡器,时钟分布自动化以降低功耗。RTC的计数寄存器在预分频器为0时递增,支持TICK事件和溢出事件,默认情况下这些事件是关闭的。事件控制功能允许单独禁用事件以优化功耗,比较功能通过比较寄存器实现,读取计数器寄存器时需暂停CPU以确保安全采样。RTC模块支持低功耗“无TICK”RTOS实现,允许在CPU关闭电源时仍保持调度活动。

1 RTC(Real-time counter)介绍

1.1 框架结构

实时计数器(RTC)模块在低频时钟源 (LFCLK)上提供一个通用的低功耗定时器。

RTC模块具有一个24位COUNTER,一个12位(1/X)预分频器,捕获/比较寄存器和一个tick 事件生成器,用于低功耗,无tick RTOS实现。

1.2 时钟源

RTC将从LFCLK运行。因此COUNTER分辨率为30.517µs。根据源,RTC能够运行,而 HFCLK是关闭的,PCLK16M不可用。软件必须在使用RTC之前显式启动LFCLK.

MCU的时钟控制:
时钟控制系统可以从一系列内部或外部高、低 频率振荡器中获取系统时钟,并根据模块的个别要求将其分配给模块。时钟 分布是自动化的,并按模块独立分组,以限制时钟树中未使用的 分支的当前消耗。

下面列出了CLOCK的主要特性:

1) 64MHz 片上振荡器

2) 64MHz晶体振荡器,使用外部32MHz晶体

3) 32.768 kHz +/-250 ppm RC振荡器

4) 32.768 kHz晶体振荡器,采用外部32.768 kHz晶体

5) 64MHz振荡器合成的32.768 kHz振荡器

6)固件(FW)覆盖振荡器活动控制低延迟启动

7) 自动振荡器和时钟控制,超低功耗分配

1.3 分辨率与溢出和precaler

计数器增量频率:

当RTC停止时,PRESCALER寄存器被读/写。一旦RTC启动,PRESCALER寄存器是只读的 。RTC启动时写入precaler寄存器没有效果。在START, CLEAR和TRIGOVRFLW上重新启动precaler,也就是说,在这些任务上,precaler的值被锁存到一个内部寄存器(<<PRESC>>)。

示例:

1) 期望计数器频率100hz (10ms计数器周期) 

  10009.576µs计数器周期

2) 期望计数器频率8hz (125 ms计数器周期)

 RTC分辨率与溢出:

2 寄存器功能介绍

2.1 计数寄存器

当内部precaler寄存器(<<PRESC>>)为0x00时,LFCLK上的COUNTER递增。<<PRESC>>从PRESCALER寄存器中重新加载。如果启用,TICK事件发生在COUNTER的每个 增量上。默认情况下,TICK事件是关闭的。

时序图- COUNTER_PRESCALER_0

时序图- COUNTER_PRESCALER_1

 Overflow 特性

TRIGOVRFLW任务将COUNTER值设置为0xFFFFF0,以允许SW测试溢出条件。当COUNTER从0xFFFFFF溢出到0时发生OVRFLW。

重要:默认情况下,OVRFLW事件是关闭的

TICK事件

TICK事件支持低功耗“无TICK”RTOS实现,因为它可选地为RTOS提供常规 中断源,而无需使用ARM®SysTick功能。

使用RTC TICK事件而不是SysTick允许CPU在关闭电源的同时仍然保持 RTOS调度活动。

重要:默认情况下,TICK事件是禁用的。

2.2 事件控制功能

为了优化RTC功耗,可以单独禁用RTC中的事件,以防止在触发这些事件时请求PCLK16M 和HFCLK。这是使用EVTEN寄存器进行管理的。

例如,如果应用程序不需要TICK事件,则应该禁用此事件,因为它 频繁发生,并且如果HFCLK可能长时间断电 ,则可能会增加功耗。

2.3  比较功能

1)寄存器列表

CC[0]

 CC[1]

CC[2]

 CC[3]

 2)时序图

当设置比较寄存器时,应该注意RTC比较事件的以下行为:

-- 2-1) 如果在设置CLEAR任务时CC寄存器值为0,则不会触发COMPARE事件。

-- 2-2)   如果设置START任务时CC寄存器为N且COUNTER值为N,则不会触发
比较事件。

-- 2.3)当CC寄存器为N且COUNTER值从N-1转换为N时,会发生COMPARE

 2.4 读取COUNTER寄存器

为了读取COUNTER寄存器,对内部的<<COUNTER>>值进行采样。

为了确保<<COUNTER>>被安全采样(考虑到在 a读取期间可能发生LFCLK转换),CPU和核心内存总线通过降低核心ready信号暂停三个周期。读取占用CPU 2个周期,导致COUNTER寄存器读取占用固定的5个 PCLK16M时钟周期。

时序图- COUNTER_READ:


网站公告

今日签到

点亮在社区的每一天
去签到