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秒發生一次周期性喚醒事件,在中斷里打印出信息。
每秒鐘打印一次日歷。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
16992瀏覽量
350313 -
寄存器
+關注
關注
31文章
5317瀏覽量
120008 -
接口
+關注
關注
33文章
8497瀏覽量
150835
原文標題:AT32講堂022 | AT32 MCU ERTC的基本功能
文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論