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,通常为PC13ERTC_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 BOARD2) 软件环境project\at_start_f4xx\examples\ertc\bpr_domain注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
软件设计
1) 配置流程
- 开启PWC时钟
- 使能电池供电域写保护
- 检查电池供电域数据是否正确,如果正确就跳过初始化,如果不正确就初始化ERTC并向电池供电域写上数据
2) 代码介绍
- main函数代码描述
实验效果
- 信息通过串口打印出来,在电脑上通过串口助手观看打印信息。
- 如果寄存器里数据正确打印bpr reg=>none reset。
- 如果寄存器里数据正确打印bpr reg=>reset。
- 主函数里每秒打印一次日历信息。
案例 使用日历以及闹钟功能
功能简介
演示日历功能、闹钟功能的使用。
资源准备
1) 硬件环境:对应产品型号的 AT-START BOARD2) 软件环境project\at_start_f4xx\examples\ertc\calendar注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如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) 软件环境project\at_start_f4xx\examples\ertc\lick_calibration注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
软件设计
1) 配置流程
- ERTC初始化
- 配置测量LICK频率定时器
- 根据测量到的频率重新配置ERTC分频
2) 代码介绍
- main函数代码描述
实验效果
- 信息通过串口打印出来,在电脑上通过串口助手观看打印信息。
- 通串口打印出当前测量出的LICK的频率以及DIV_A、DIV_B的值。
- 每秒钟打印一次日历。
案例 入侵检测
功能简介
演示入侵检测功能使用,PC13脚当检测到一个上升沿后将触发入侵检测,当入侵事件发生时,电池供电数据寄存器将会被清除。
资源准备
1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境project\at_start_f4xx\examples\ertc\tamper注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
软件设计
1) 配置流程
- ERTC初始化
- 初始化入侵检测
- 初始化电池供电寄存器
2) 代码介绍
- main函数代码描述
- 入侵检测中断处理函数代码描述
实验效果
- 信息通过串口打印出来,在电脑上通过串口助手观看打印信息。
- 当发生入侵事件时(PC13出现上升沿),在入侵中断函数里打印电池供电寄存器被清除的信息。
案例 时间戳
功能简介
演示时间戳功能使用,PC13脚当检测到一个上升沿后将触发时间戳,在时间戳中断里打印发生事件的时刻。
资源准备
1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境project\at_start_f4xx\examples\ertc\time_stamp注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
软件设计
1) 配置流程
- ERTC初始化
- 初始化时间戳
2) 代码介绍
- main函数代码描述
- 时间戳中断处理函数代码描述
实验效果
- 信息通过串口打印出来,在电脑上通过串口助手观看打印信息。
- 当发生时间戳事件时(PC13出现上升沿),在中断里打印当前保存的时间戳。
案例 周期唤醒定时器
功能简介
演示周期唤醒定时器功能使用。
资源准备
1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境project\at_start_f4xx\examples\ertc\wakeup_timer注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行 简单修改即可。
软件设计
1) 配置流程
- ERTC初始化
- 初始化周期唤醒定时器
2) 代码介绍
- main函数代码描述
- 周期唤醒中断处理函数代码描述
实验效果
- 信息通过串口打印出来,在电脑上通过串口助手观看打印信息。
- 每个5秒发生一次周期性唤醒事件,在中断里打印出信息。
- 每秒钟打印一次日历。
关于雅特力雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM Cortex-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM Cortex-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。
-
mcu
+关注
关注
146文章
16852浏览量
349807
发布评论请先 登录
相关推荐
评论