RTC

简介

Nuclei RTC(实时时钟)提供自动唤醒功能来管理所有低功耗模式。

实时时钟是一个独立的定时器。RTC提供一组连续运行的计数器,配合适当的软件,可以提供时钟-日历功能。计数器值可以写入以设置系统的当前时间/日期。

RTC还包括一个具有中断能力的周期性可编程唤醒标志。

主要特性

RTC的主要特性如下:

  • 可编程预分频器:分频因子最高可达2^20

  • 64位可编程计数器,用于长期测量

  • 两个独立的时钟:

    • ICB时钟用于ICB接口

    • RTC时钟用于RTC核心

  • 两种独立的复位类型:

    • ICB接口由icb_rstn复位

    • RTC核心(预分频器、告警、计数器和分频器)由rtc_rstn复位

  • 三个专用的可屏蔽中断线:

    • 告警中断,用于生成软件可编程的告警中断

    • 秒中断,用于生成具有可编程周期长度的周期性中断信号

    • 溢出中断,用于检测内部可编程计数器滚回到零的情况

  • 数字校准电路(周期性计数器校正),在几秒钟的校准窗口内获得

功能描述

RTC由两个主要单元组成(参见RTC框图)。第一个单元(ICB接口)用于与ICB总线接口。该单元还包含一组32位寄存器,可从ICB总线以读或写模式访问。

另一个单元(RTC核心)由可编程计数器链组成,包含两个主要块。第一个块是RTC预分频器块,它生成RTC时基TR_CLK(TR_CLK由RTC_CLK分频器生成),可编程为最长1秒的周期。它包括一个20位可编程分频器(RTC预分频器)。每个TR_CLK周期,如果在RTC_CRH寄存器中启用,RTC会生成一个中断(秒中断)。第二个块是一个64位可编程计数器,可以初始化为当前系统时间。系统时间以TR_CLK速率递增,并与可编程日期(存储在RTC_ALR寄存器中)比较,以生成告警中断(如果在RTC_CRH控制寄存器中启用)。

注意:

  • SECOND_IRQ/OVERFLOW_IRQ/ALARM_IRQ接口是icb_clk域

  • SECOND_EVENT/OVERFLOW_EVENT/ALARM_EVENT接口是rtc_clk域

配置RTC寄存器

要写入RTC_PRL、RTC_CNT、RTC_ALR、RTC_CALR寄存器,外设必须进入配置模式。这通过设置RTC_CRL寄存器中的CNF位来完成。

配置程序:

  1. 设置CNF位进入配置模式

  2. 写入一个或多个RTC寄存器

  3. 清除CNF位退出配置模式

RTC标志置位

RTC秒标志(SECF)在RTC计数器更新之前的每个RTC核心时钟周期置位。

RTC告警和RTC告警标志(ALRF)在计数器达到存储在告警寄存器中增加1的RTC告警值(RTC_ALR + 1)之前的最后一个RTC核心时钟周期置位。

RTC溢出标志(OWF)在计数器达到0xFFFF_FFFF_FFFF_FFFF之前的最后一个RTC核心时钟周期置位。

RTC平滑数字校准

RTC频率可以数字校准,频率校正使用一系列小调整(添加或减去单个RTC_CLK脉冲)来执行。这些调整分布相当均匀,使得即使在短时间内观察,RTC也能得到良好的校准。

平滑数字校准在大约2^24个RTC_CLK脉冲的周期内执行,当输入频率为32768 Hz时为512秒。该周期由24位计数器win_cnt[23:0]维护,由RTC_CLK时钟。

平滑校准寄存器(RTC_CALR)指定在512秒周期内要屏蔽或添加的RTC_CLK时钟周期数:

  • 设置位RTC_CALR[31]为1会在512秒周期内屏蔽或添加确切的脉冲数

  • 设置RTC_CALR[30:15],这是RTC_CLK时钟周期数的整数部分(屏蔽或添加)

  • 设置RTC_CALR[12:0],这是RTC_CLK时钟周期数的小数部分(屏蔽或添加)

中断

RTC中断请求如下表所示:

表 7.1: RTC中断请求

中断事件

使能控制位

RTC_SECOND

RTC_CRH[0]

RTC_ALARM

RTC_CRH[1]

RTC_OVERFLOW

RTC_CRH[2]

中断映射如下图所示:

寄存器

寄存器描述

RTC寄存器

RTC中的寄存器和相应的偏移如下表所示:

表 8.1: RTC寄存器的偏移地址

偏移

寄存器名称

功能描述

0x0

RTC_CRH

RTC控制寄存器高位

0x4

RTC_CRL

RTC控制寄存器低位

0x8

RTC_PRL

RTC预分频器寄存器

0xC

RTC_DIV

RTC预分频器计数器寄存器

0x10

RTC_CNTH

RTC计数器寄存器高位

0x14

RTC_CNTL

RTC计数器寄存器低位

0x18

RTC_ALRH

RTC告警寄存器高位

0x1C

RTC_ALRL

RTC告警寄存器低位

0x20

RTC_CALR

RTC校准寄存器低位

0x24

RTC_VERSION

IP版本

RTC_CRH

地址偏移:0x0

表 8.2: RTC_CRH格式

字段

位

访问

复位值

描述

SECIE

0

RW

0x0

  • 秒中断使能

  • 1’b0:禁用秒中断

  • 1’b1:使能秒中断

ALRIE

1

RW

0x0

  • 告警中断使能

  • 1’b0:禁用告警中断

  • 1’b1:使能告警中断

OWIE

2

RW

0x0

  • 溢出中断使能

  • 1’b0:禁用溢出中断

  • 1’b1:使能溢出中断

CALIBRATION

3

RW

0x0

  • 校准使能

  • 1’b0:RTC 平滑数字校准禁用

  • 1’b1:RTC 平滑数字校准使能

Reserved

31:4

/

0x0

/

RTC_CRL

地址偏移:0x4

表 8.3: RTC_CRL格式

字段

位

访问

复位值

描述

SECF

0

W0C

0x0

  • 秒标志

  • 该位由硬件设置,当 32 位可编程预分频器溢出时递增 RTC 计数器

  • 若 RTC_CRH.SECIE=1 则生成中断;只能由软件清除;写 “1” 无效果

  • 1’b0:秒标志条件未满足

  • 1’b1:秒标志条件满足

ALRF

1

W0C

0x0

  • 告警标志

  • 64 位可编程计数器达到 RTC_ALRL/RTC_ALRH 设置的阈值时置位

  • 若 RTC_CRH.ALRIE=1 则生成中断;只能由软件清除;写 “1” 无效果

  • 1’b0:未检测到告警

  • 1’b1:检测到告警

OWF

2

W0C

0x0

  • 溢出标志

  • 64 位可编程计数器溢出时置位;若 RTC_CRH.OWIE=1 则生成中断

  • 只能由软件清除;写 “1” 无效果

  • 1’b0:未检测到溢出

  • 1’b1:发生 64 位可编程计数器溢出

Reserved

3

/

0x0

/

CNF

4

RW

0x0

  • 配置标志

  • 置位进入配置模式以允许写 RTC_CNT/RTC_ALR/RTC_PRL;清零后执行写

  • 1’b0:退出配置模式(开始更新 RTC 寄存器)

  • 1’b1:进入配置模式

RTOFF

5

RO

0x1

ICB 数据同步到 rtc 时钟域完成

Reserved

31:6

/

0x0

/

RTC_PRL

地址偏移:0x8

表 8.4: RTC_PRL格式

字段

位

访问

复位值

描述

PRL

19:0

RW

0x8000

  • 时钟预加载值(预分频器重载值高位)

  • fTR_CLK = fRTC_CLK/(PRL[19:0] + 1)

Reserved

31:20

/

0x0

/

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_DIV

地址偏移:0xC

表 8.5: RTC_DIV格式

字段

位

访问

复位值

描述

DIV

31:0

RO

0x0

RTC 预分频器计数值回读

RTC_CNTH

地址偏移:0x10

表 8.6: RTC_CNTH格式

字段

位

访问

复位值

描述

CNTH

31:0

RW

0x0

  • RTC 计数器高位

  • 读取返回计数器高位当前值;写入需进入配置模式

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_CNTL

地址偏移:0x14

表 8.7: RTC_CNTL格式

字段

位

访问

复位值

描述

CNTL

31:0

RW

0x0

  • RTC 计数器低位

  • 读取返回计数器低位当前值;写入需进入配置模式

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_ALRH

地址偏移:0x18

表 8.8: RTC_ALRH格式

字段

位

访问

复位值

描述

ALRH

31:0

RW

0x0

  • RTC 告警高位

  • 写入需进入配置模式

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_ALRL

地址偏移:0x1C

表 8.9: RTC_ALRL格式

字段

位

访问

复位值

描述

ALRL

31:0

RW

0x0

  • RTC 告警低位

  • 写入需进入配置模式

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_CALR

地址偏移:0x20

表 8.10: RTC_CALR格式

字段

位

访问

复位值

描述

CLK_CYCLE_STEP

12:0

RW

0x0

  • 基于时序窗口整数部分(2^24 周期)为每个指定数量的 RTCCLK 周期屏蔽或插入一个 rtc_clk 周期

Reserved

14:13

/

0x0

/

CLK_CYCLE_DELTA

30:15

RW

0x0

  • 基于时序窗口小数部分(2^24 周期)为每个指定数量的 RTCCLK 周期屏蔽或插入一个 rtc_clk 周期

SIGN_BIT

31

RW

0x0

  • 插入或屏蔽 rtc_clk 周期

  • 1’b0:在时序窗口中插入一个 rtc_clk 周期

  • 1’b1:在时序窗口中屏蔽一个 rtc_clk 周期

注意:此寄存器具有写保护机制,需要先设置04寄存器

RTC_VERSION

地址偏移:0x24

表 8.11: RTC_VERSION格式

字段

位

访问

复位值

描述

VERSION_NUM

31:0

RO

0x0001_0202

RTC 的 IP 版本