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位来完成。
配置程序:
设置CNF位进入配置模式
写入一个或多个RTC寄存器
清除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中断请求如下表所示:
中断事件 |
使能控制位 |
|---|---|
RTC_SECOND |
RTC_CRH[0] |
RTC_ALARM |
RTC_CRH[1] |
RTC_OVERFLOW |
RTC_CRH[2] |
中断映射如下图所示:
寄存器
寄存器描述
RTC寄存器
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
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
SECIE |
0 |
RW |
0x0 |
|
ALRIE |
1 |
RW |
0x0 |
|
OWIE |
2 |
RW |
0x0 |
|
CALIBRATION |
3 |
RW |
0x0 |
|
Reserved |
31:4 |
/ |
0x0 |
/ |
RTC_CRL
地址偏移:0x4
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
SECF |
0 |
W0C |
0x0 |
|
ALRF |
1 |
W0C |
0x0 |
|
OWF |
2 |
W0C |
0x0 |
|
Reserved |
3 |
/ |
0x0 |
/ |
CNF |
4 |
RW |
0x0 |
|
RTOFF |
5 |
RO |
0x1 |
ICB 数据同步到 rtc 时钟域完成 |
Reserved |
31:6 |
/ |
0x0 |
/ |
RTC_PRL
地址偏移:0x8
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
PRL |
19:0 |
RW |
0x8000 |
|
Reserved |
31:20 |
/ |
0x0 |
/ |
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_DIV
地址偏移:0xC
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
DIV |
31:0 |
RO |
0x0 |
RTC 预分频器计数值回读 |
RTC_CNTH
地址偏移:0x10
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CNTH |
31:0 |
RW |
0x0 |
|
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_CNTL
地址偏移:0x14
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CNTL |
31:0 |
RW |
0x0 |
|
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_ALRH
地址偏移:0x18
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
ALRH |
31:0 |
RW |
0x0 |
|
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_ALRL
地址偏移:0x1C
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
ALRL |
31:0 |
RW |
0x0 |
|
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_CALR
地址偏移:0x20
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CLK_CYCLE_STEP |
12:0 |
RW |
0x0 |
|
Reserved |
14:13 |
/ |
0x0 |
/ |
CLK_CYCLE_DELTA |
30:15 |
RW |
0x0 |
|
SIGN_BIT |
31 |
RW |
0x0 |
|
注意:此寄存器具有写保护机制,需要先设置04寄存器
RTC_VERSION
地址偏移:0x24
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
VERSION_NUM |
31:0 |
RO |
0x0001_0202 |
RTC 的 IP 版本 |