ERTC接口简介及功能说明

电子说

1.3w人已加入

描述

ERTC接口简介

ERTC计数逻辑位于电池供电域,只要电池供电域有电,ERTC便会一直运行,不受系统复位以及VDD掉电影响,ERTC主要具有以下功能:

― 日历功能:年、月、日、时、分、秒

― 闹钟功能:闹钟A、闹钟B

― 周期性唤醒功能

― 入侵检测功能

― 校准功能:精密校准、粗略校准

图1. ERTC框图

接口

ERTC功能

各型号ERTC功能差异

各型号ERTC基本功能相同,只是各个型号之间,可能去掉了一些更高级的功能,所有保留的功能程序兼容。

表1. 各型号ERTC差异

接口

√:表示支持该功能,且功能相同。

×:表示不支持该功能。

寄存器访问

寄存器写保护

上电复位后ERTC寄存器处于写保护状态,需要先解除写保护,才能写配置ERTC寄存器。

需要注意的是ERTC_STS[14:8]、ERTC_TAMP和ERTC_BPRx寄存器不受写保护。

解锁步骤:

1) 使能PWC接口时钟

接口

2) 解锁电池供电域写保护

接口

3) 依次向ERTC_WP寄存器写入0xCA,0x53,解锁写保护

若向ERTC_WP寄存器写入错误的值,将重新激活写保护

接口

4) 配置ERTC寄存器

下表列举了ERTC寄存器受写保护状态,以及写入的条件:

表2. ERTC寄存器

接口

寄存器复位

ERTC寄存器处于电池供电域,可以CRM_BPDC的BPDRST进行电池供电域复位,也可以由提供的库函数对每个寄存器写默认值进行复位。

ERTC复位相关函数:

电池供电域复位

接口

将ERTC所有寄存器恢复成默认值

接口

时钟设置

时钟源选择

ERTC时钟源经过选择后输入到分频器A和分频器B,最终得到1Hz的时钟用来更新日历。

图2. ERTC时钟结构

接口

ERTC的时钟源共有3种可以选择:

― LEXT:外部低速晶振,通常为32.768kHz

― LICK:内部低速晶振,通常典型值为40kHz范围(30~60kHz),详情请见各型号的datasheet

― HEXT_DIV:外部高速晶振分频后得到的时钟,不同的型号下,分频值不一样,请见表3

表3. 各型号HEXT的预分频值

接口

表4. 各时钟源优缺点对比

接口

ERTC时钟源设置相关函数:

选择对应时钟使能

接口

选择ERTC时钟

接口

使能ERTC时钟

接口

预分频器设置

通过预分频器A和预分频器B将获得1Hz时钟,计算公式如下:

接口

推荐在应用中将预分频器A设置成最大值(127)这样可以最大程度降低功耗。

表5. 分频设置举例

接口

设置ERTC预分频器

接口

ERTC时钟初始化举例:

接口

日历

ERTC日历格式如下图所示,包含有年、月、日、星期、时、分、秒、亚秒。

图3. 日历格式

接口

时间格式设置

时间格式可以选择24小时或者12小时格式,如果为24小时格式时,AM/PM字段无意义,在初始化日历之前,应该首先选择时间格式。

时间格式设置函数:

接口

例如设置日历格式为24小时模式

接口

日历初始化

通过配置ERTC_DATE和ERTC_TIME寄存器可以设置日历时间:

日历值设置函数:

接口

例如设置时间为2020-05-01 1200星期六

接口

日历读取

通过读取ERTC_DATE、ERTC_TIME和ERTC_SBS寄存器可以读取日历时间,日历读取有两种模式分别为同步读取(DREN=0)和异步读取(DREN=1)。

― 同步读取:ERTC每两个ERTC_CLK周期,将日历值同步到影子寄存器ERTC_DATE、ERTC_TIME和ERTC_SBS,同步完成后UPDF将置1。读取低阶寄存器时会将高阶寄存器值锁定,直到读取ERTC_DATE寄存器,这保证读取的ERTC_SBS、ERTC_TIME、ERTC_DATE寄存器值来自同一时刻。

例如读取ERTC_SBS,会将ERTC_TIME、ERTC_DATE寄存器值锁定。

― 异步读取:ERTC直接读取电池供电域的ERTC时钟和日历值,这样避免了由于同步时间带来的误差。异步读取时,UPDF标志将由硬件清0。为保证异步读取时钟和日历值来自同一时刻,软件必须连续两次读取时钟和日历值,并比较两次结果是否一致,如果不一致应该再读,直到两次结果一致。

在大多数应用下,都推荐使用同步读取模式,因为这样可以简化程序。

等待同步函数(等待UPDF置1)

接口

读取模式设置函数

接口

例如设置读取模式为同步读取

接口

日历读取函数:

接口

结构体ertc_time_type里面参数含义如下:

― year:年

― month:月

― day:日

― hour:时

― min:分

― sec:秒

― week:星期几

― ampm:上午/下午(只有在12小时制时,数据有效)

亚秒读取

亚秒值为预分频器DIV_B的计数值,预分频器DIV_B是一个递减计数器,例如当DIV_B=255时,1个亚秒值代表的时间为1/(255+1)秒。

亚秒读取函数:

接口

闹钟

ERTC包含两个完全相同的闹钟A、闹钟B,闹钟值由ERTC_ALASBS/ERTC_ALA(ERTC_ALBSBS/ERTC_ALB)设定,开启闹钟后,当设定的闹钟值匹配日历值时ALAF/ALBF置1,发生闹钟事件。通过MASKx位,可选择性的屏蔽日历字段,被屏蔽的字段不参与闹钟匹配。

图4. 日闹钟匹配

接口

因为闹钟A和闹钟B完全一样,所以后面的举例都用闹钟A举例

闹钟格式选择:

― ERTC_ALA的WKSEL=0时:日期、时、分、秒、亚秒

― ERTC_ALA的WKSEL=1时:星期、时、分、秒、亚秒

闹钟的各个字段日期/星期、时、分、秒、亚秒均可通过MASK位屏蔽,使闹钟的产生更加的灵活

― MASK4=1:闹钟和日/星期无关

― MASK3=1:闹钟和小时无关

― MASK2=1:闹钟和分钟无关

― MASK1=1:闹钟和秒钟无关

例如在WKSEL=0时,将闹钟设置为15号1210

表6. 屏蔽设置举例

接口

通过设置ERTC_ALASBS的SBSMSK可以对亚秒进行屏蔽:

― SBSMSK=0:不匹配亚秒,闹钟与亚秒无关;

― SBSMSK=1:只匹配SBS[0];

― SBSMSK=2:只匹配SBS[1:0];

― SBSMSK=3:只匹配SBS[2:0];

― ...

― SBSMSK=14:只匹配SBS[13:0];

― SBSMSK=15:匹配SBS[14:0]。

―例如在DIV_A=127,DIV_B=255(亚秒)时,只考虑亚秒的触发闹钟

表7. 亚秒屏蔽设置举例

接口

闹钟相关函数

日期/星期、时、分、秒屏蔽

接口

选择日期或者星期格式

接口

设置闹钟值:日期/星期、时、分、秒、AM/PM

接口

设置闹钟亚秒值以及屏蔽

接口

闹钟中断使能

接口

获取当前配置的闹钟值

接口

获取当前配置的闹钟亚秒值

接口

周期性自动唤醒

周期性唤醒功能用于周期性自动唤醒低功耗模式,唤醒周期由VAL[15:0]设定。当唤醒计数器值由VAL值递减至0时,WATF标志置1,产生唤醒事件,同时唤醒计数器值重载VAL值。

可以根据需要选择不同的时钟源,通过寄存器WATCLK[2:0]配置

― 000:ERTC_CLK/16;

― 001:ERTC_CLK/8;

― 010:ERTC_CLK/4;

― 011:ERTC_CLK/2;

― 10x:1Hz;

― 11x:1Hz,唤醒计数值增加216,唤醒时间=WAT+216+1。

图5. 唤醒定时器时钟选择

接口

当WATCLK[2:0]=11x时,如果日历时钟为1Hz,可获得最长的唤醒时间=65535+216+1=131072秒。

如果日历时钟调整为<1Hz(增大预分频器DIV_B的值),还可以获得更长的唤醒时间。

周期自动唤醒相关函数

唤醒计数器时钟源选择

接口

设置唤醒计数器值

接口

获取唤醒计数器值

接口

唤醒定时器使能

接口

入侵检测

ERTC提供了两组入侵检测TAMP1和TAMP2,当在发生入侵事件时,将自动清除ERTC电池供电数据寄存器(ERTC_BPRx)的值,也支持发生入侵事件时产生事件戳。

图6. 入侵检测

接口

入侵检测1引脚可以选择

― ERTC_MUX1:引脚1,通常为PC13

― ERTC_MUX2:引脚2,通常为PA0

入侵检测2引脚为固定ERTC_MUX2(通常为PA0)

入侵检测模式分为边沿检测和电平检测

― 边沿检测:当检测到了有效的边沿触发入侵检测,分为上升沿触发、下降沿触发

― 电平检测:当有效电平长度达到了设定的时间,触发发入侵检测,分为高电平触发、低电平触发。

其中边沿检测比较简单,只需要配置有效边沿并使能就行了,电平检测需要配置的参数会比较多,需要配置以下参数:

采样频率

通过配置TPFREQ寄存器,可以配置的入侵检测频率为

― ERTC_CLK/32768;

― ERTC_CLK/16384;

― ERTC_CLK/8192;

― ERTC_CLK/4096;

― ERTC_CLK/2048;

― ERTC_CLK/1024;

― ERTC_CLK/512;

― ERTC_CLK/256。

例如当ERTC_CLK=32768Hz时,配置检测频率为ERTC_CLK/256时,此时入侵检测频率为32768/256=128Hz

入侵上拉

通过TPPU配置可以打开或者关闭入侵上拉功能,当使能了入侵上拉电阻时,可以通过TPPR设置在入侵检测前的上拉预充电时间,时间可配置为如下:

― 1个ERTC_CLK;

― 2个ERTC_CLK;

― 4个ERTC_CLK;

― 8个ERTC_CLK。

图7. 预充电时间为4个ERTC CLK示意图

接口

入侵滤波

通过TPFLT设置入侵检测的滤波时间,可以配置下面4种模式

― 无滤波,当1次采样有效,判定入侵事件发生;

― 连续2次采样有效,判定入侵事件发生;

― 连续4次采样有效,判定入侵事件发生;

― 连续8次采样有效,判定入侵事件发生。

入侵检测相关函数

入侵检测1引脚选择

接口

入侵检测上拉使能配置

接口

上拉预充电时间设置

接口

滤波时间设置

接口

入侵检测频率设置

接口

入侵检测有效边沿设置

接口

发生入侵事件时,保存时间戳

接口

入侵检测使能

接口

时间戳

时间戳功能用于在发生时间戳事件时(入侵引脚检测到有效边沿),将当前的日历值保存到时间戳寄存器中。

图8. 时间戳检测

接口

时间戳使用

― 单独使用:可以选择引脚进行检测

ERTC_MUX1:引脚1,通常为PC13

ERTC_MUX2:引脚2,通常为PA0

― 在发生入侵事件时保存时间戳,在这种模式下,需要先将入侵检测功能正确配置好

时间戳在单独使用时可以配置为上升沿检测或者下降沿检测,在入侵检测触发时,取决于入侵检测的配置

时间戳溢出

当发生时间戳时,TSF位置1,此时若再次发生时间戳事件,TSOF标志位将置1,但时间戳寄存器并不会更新,仍保留第一次触发的值。

时间戳相关函数

时间戳引脚选择

接口

检测边沿设置

接口

时间戳使能

接口

获得时间戳时间

接口

获得时间戳亚秒

接口

参考时钟检测

为保证日历长时间运行的精确性,ERTC提供了时钟同步功能(低功耗模式不可用),用精度更高的参考时钟(一般用50Hz或者60Hz的市电)校准更新日历的1Hz时钟。

图9. 参考时钟检测

接口

参考时钟检测功能开启后,在每次更新日历值的前7个ck_a周期检测参考时钟边沿,若检测到边沿,将使用此边沿更新日历值(更新秒钟),后续采用3个ck_a周期检测参考时钟边沿。每一次检测到参考时钟边沿时,都会将分频器A的值进行重载,这会使得内部1Hz的日历时钟与参考时钟边沿刚好对齐,当内部1Hz时钟出现微小偏移时,利用更精确的参考时钟,将1Hz时钟微调至与参考时钟边沿对齐。当没有检测到参考时钟边沿时,ERTC会利用原来的时钟源更新日历。

需要注意的是,使能参考时钟功能后,需要将DIVA、DIVB设置为复位值(0x7F、0xFF),并且时钟同步功能不能与粗校准功能同时开启。

参考时钟检测使能函数

接口

校准

ERTC提供了两种校准方法:粗略校准和精密校准。但两种校准方法不能同时使用。

粗略校准

粗略数字校准通过增加或减少ck_a周期值来实现提前或推迟更新日历值的功能。

图10. 粗略校准

接口

正校准时(CALDIR=0):在64分钟的前2xCALVAL分钟时间内,每分钟(约15360个ck_a周期)插入2个ck_a周期,相当于提前更新日历。

负校准时(CALDIR=1):在64分钟前的2xCALVAL分钟时间内,每分钟(约15360个ck_a周期)忽略1个ck_a周期,相当于推迟更新日历。

注:粗略数字校准至少要将DIVA值设置为6。

精密校准

区别于粗略数字校准,精密校准的校准效果更好且校准更加均匀。开启精密校准校准功能后,将均匀增加或减少ERTC_CLK来达到校准的目的。

图11. 精密校准

接口

当ERTC_CLK为32.768kHz时,精密校准周期约为220个ERTC_CLK(32秒)。DEC[8:0]值指定了220个ERTC_CLK中忽略的脉冲数,最多可忽略511个脉冲;将ADD置1,可在220个ERTC_CLK中插入512个脉冲。两者搭配使用,可在220个ERTC_CLK周期进行-511~+512的调整。

有效校准频率FSCAL:

接口

当分频器A值小于3时,会按照ADD等于0校准。此时应降低分频器B值来实现每秒增加8个ERTC_CLK,也就是32秒增加256个ERTC_CLK搭配DEC[8:0]位,可在220个ERTC_CLK周期进行-255~+256的调整。此时有效校准频率FSCAL:

接口

精密数字校准的校准周期还可选择8秒或16秒(由CAL8和CAL16配置),8秒校准周期的优先级更高,同时使能8秒和16秒校准周期,将优先选择8秒校准周期。

校准相关函数

精密校准配置并使能

接口

粗略校准配置

接口

粗略校准使能

接口

事件输出功能

ERTC提供了一组复用功能输出,可以输出以下事件:

― 校准输出:512Hz、1Hz

― 事件输出:闹钟A、闹钟B、唤醒事件

图12. 事件输出

接口

通常ERTC MUX1引脚为PC13

当输出模式为事件输出时(闹钟A、闹钟B、唤醒事件),可以通过OUTTYPE选择输出类型为开漏或是推挽,通过OUTP配置输出极性。

事件输出相关函数

事件输出设置(闹钟A、闹钟B、唤醒事件)

接口

校准输出选择(512Hz、1Hz)

接口

校准输出使能

接口

电池供电数据寄存器

ERTC一共提供了20个32位电池供电数据寄存器,可以在只由电池供电下保存数据,不会被系统复位所复位,只能通过电池供电域复位或入侵事件进行复位

相关函数

写电池供电数据寄存器

接口

读电池供电数据寄存器

接口

中断

当发生闹钟A、闹钟B、周期性唤醒事件时,ERTC可产生中断。要使能ERTC中断可按以下操作配置:

― 将ERTC对应中断的EXINT线配置为中断模式并使能,有效沿选择上升沿。

― 使能ERTC中断对应的NVIC通道。

― 使能对应的ERTC中断控制位。

下表说明了ERTC时钟源、事件以及中断对唤醒低功耗模式的影响:

表8. ERTC唤醒低功耗模式

接口

表9. 中断控制

接口

表10. 各型号中断对应EXINT线

接口

表11. 各型号中断对应中断向量号

接口

表12. 中断向量对应中断函数

接口

中断、事件相关函数

事件中断使能

接口

获取相应中断是否使能

接口

标志获取

接口

标志清除

接口

中断配置示例:以AT32F435的闹钟A为例

接口

案例 读写电池供电数据寄存器

功能简介

对电池供电数据寄存器(ERTC_BPRx)进行读写访问。

资源准备

1) 硬件环境:

对应产品型号的AT-START BOARD

2) 软件环境

projectat_start_f4xxexamplesertcpr_domain

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考

AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

1) 配置流程

开启PWC时钟

使能电池供电域写保护

检查电池供电域数据是否正确,如果正确就跳过初始化,如果不正确就初始化ERTC并向电池供电域写上数据

2) 代码介绍

main函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

如果寄存器里数据正确打印bpr reg=>none reset。

如果寄存器里数据正确打印bpr reg=>reset。

主函数里每秒打印一次日历信息。

案例 使用日历以及闹钟功能

功能简介

演示日历功能、闹钟功能的使用。

资源准备

1) 硬件环境:对应产品型号的 AT-START BOARD2) 软件环境projectat_start_f4xxexamplesertccalendar注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

1) 配置流程

开启PWC时钟

使能电池供电域写保护

检查日历是否已经初始化,如果正确就跳过初始化,如果不正确就初始化日历以及闹钟

主函数里每秒打印一次日历信息

在21-05-01 1210时刻发生闹钟。

2) 代码介绍

main函数代码描述

接口

ERTC初始化ertc_config函数代码描述

接口

闹钟中断函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

主函数里每秒打印一次日历信息。

在21-05-01 1210时刻发生闹钟。

案例 使用LICK时钟并校准

功能简介

使用LICK时钟作为ERTC时钟,并通过定时器测量出LICK时钟频率,通过得到的频率值,调整ERTC分频,达到在一定范围内校准时间的效果

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境projectat_start_f4xxexamplesertclick_calibration注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

1) 配置流程

ERTC初始化

配置测量LICK频率定时器

根据测量到的频率重新配置ERTC分频

2) 代码介绍

main函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

通串口打印出当前测量出的LICK的频率以及DIV_A、DIV_B的值。

每秒钟打印一次日历。

案例 入侵检测

功能简介

演示入侵检测功能使用,PC13脚当检测到一个上升沿后将触发入侵检测,当入侵事件发生时,电池供电数据寄存器将会被清除。

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境projectat_start_f4xxexamplesertc amper注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

1) 配置流程

ERTC初始化

初始化入侵检测

初始化电池供电寄存器

2) 代码介绍

main函数代码描述

接口

入侵检测中断处理函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

当发生入侵事件时(PC13出现上升沿),在入侵中断函数里打印电池供电寄存器被清除的信息。

案例 时间戳

功能简介

演示时间戳功能使用,PC13脚当检测到一个上升沿后将触发时间戳,在时间戳中断里打印发生事件的时刻。

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境projectat_start_f4xxexamplesertc ime_stamp注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

1) 配置流程

ERTC初始化

初始化时间戳

2) 代码介绍

main函数代码描述

接口

时间戳中断处理函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

当发生时间戳事件时(PC13出现上升沿),在中断里打印当前保存的时间戳。

案例 周期唤醒定时器

功能简介

演示周期唤醒定时器功能使用。

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境projectat_start_f4xxexamplesertcwakeup_timer注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行 简单修改即可。

软件设计

1) 配置流程

ERTC初始化

初始化周期唤醒定时器

2) 代码介绍

main函数代码描述

接口

周期唤醒中断处理函数代码描述

接口

实验效果

信息通过串口打印出来,在电脑上通过串口助手观看打印信息。

每个5秒发生一次周期性唤醒事件,在中断里打印出信息。

每秒钟打印一次日历。

审核编辑:汤梓红

 

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

全部0条评论

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

×
20
完善资料,
赚取积分