RTC接口簡介
RTC計數(shù)邏輯位于電池供電域,內(nèi)部為一個32位遞增計數(shù)器,只要電池供電域有電,RTC便會一直運(yùn)行,不受系統(tǒng)復(fù)位以及VDD掉電影響,RTC主要具有以下功能:
― 日歷功能:32位計數(shù)器,通過轉(zhuǎn)換得到年、月、日、時、分、秒
― 鬧鐘功能
― 入侵檢測功能
― 校準(zhǔn)功能
圖1. RTC框圖
RTC功能
寄存器訪問
寄存器寫保護(hù)
上電復(fù)位后RTC寄存器處于寫保護(hù)狀態(tài),需要先解除寫保護(hù),才能寫配置RTC寄存器。
解鎖步驟:
使能PWC接口時鐘
使能BPR接口時鐘
解鎖電池供電域?qū)懕Wo(hù)
RTC寄存器同步
由于RTC由電池供電域的計數(shù)邏輯和APB1接口的寄存器組成,寄存器的讀寫存在同步邏輯。
― 寄存器寫:需要等待上一次的RTC寄存器配置完成后(CFGF=1),才能進(jìn)行新的寫操作。
― 寄存器讀:當(dāng)寄存器值從電池供電域更新到APB1接口時UPDF標(biāo)志置1。 當(dāng)在系統(tǒng)復(fù)位、電源復(fù)位、從待機(jī)、深度睡眠模式喚醒后,有可能寄存器還未完全同步,所以需要先軟件將UPDF標(biāo)志清除,然后等待UPDF標(biāo)志置1,以讀取正確的值。
RTC同步相關(guān)函數(shù)
等待上一次RTC寄存器配置完成(寫寄存器之前使用)
等待RTC寄存器更新完成(讀取寄存器之前使用)
RTC寄存器寫
寫RTC_DIV、RTC_TA、RTC_CNT寄存器需要先進(jìn)入配置模式(CFGEN=1),然后才能對寄存器進(jìn)行寫操作,當(dāng)退出配置模式(CFGEN=0)時,就會將寄存器值實際寫到電池供電域,這個過程至少需要3個RTCCLK周期。
下表列舉了RTC寄存器受寫保護(hù)狀態(tài),以及寫入的條件:
表1. RTC寄存器
寄存器復(fù)位
RTC寄存器處于電池供電域,可以CRM_BPDC的BPDRST進(jìn)行電池供電域復(fù)位,也可以由提供的庫函數(shù)對每個寄存器寫默認(rèn)值進(jìn)行復(fù)位。
RTC復(fù)位相關(guān)函數(shù)
電池供電域復(fù)位
或者
兩個函數(shù)功能一樣,只是bpr_reset()封裝了前一個函數(shù)。
時鐘設(shè)置
時鐘源選擇
RTC時鐘源經(jīng)過選擇后輸入到分頻器,最終得到1Hz的時鐘用來更新日歷。
圖2. RTC時鐘結(jié)構(gòu)
RTC的時鐘源共有3種可以選擇:
― LEXT:外部低速晶振,通常為32.768kHz
― LICK:內(nèi)部低速晶振,通常典型值為40kHz范圍(30~60kHz),詳情請見各型號的datasheet
― HEXT_DIV:外部高速晶振分頻后得到的時鐘,不同型號分頻值請見下表
表2. 各型號HEXT的預(yù)分頻值
表3. 各時鐘源優(yōu)缺點(diǎn)對比
RTC時鐘源設(shè)置相關(guān)函數(shù)
選擇對應(yīng)時鐘使能
選擇RTC時鐘
使能RTC時鐘
預(yù)分頻器設(shè)置
RTC_CLK通過20位預(yù)分頻器后獲得1Hz時鐘,計算公式如下:
表4. 分頻設(shè)置舉例
RTC分頻設(shè)置相關(guān)函數(shù)
設(shè)置RTC預(yù)分頻器
獲取RTC預(yù)分頻器值
RTC時鐘初始化舉例:
日歷
RTC內(nèi)部是一個32位的計數(shù)器,通常使用中該計數(shù)器1秒增加1,也就是該計數(shù)器相當(dāng)于秒鐘,然后根據(jù)當(dāng)前的秒鐘值,通過轉(zhuǎn)換得到年、月、日、星期、時、分、秒,實現(xiàn)日歷的功能,修改計數(shù)器的值便可修改時間和日期。
根據(jù)使用需要還可以產(chǎn)生秒中斷:若秒中斷使能(TSIEN=1),每隔一秒產(chǎn)生一個秒中斷。
圖3. 日歷轉(zhuǎn)換
計數(shù)相關(guān)函數(shù)
設(shè)置RTC計數(shù)值
獲取RTC計數(shù)值
秒鐘轉(zhuǎn)換成日歷
先規(guī)定一個起始時間,例如1970-1-1 0000對應(yīng)計數(shù)器為0,現(xiàn)在比如計數(shù)值為200000,那么換算成時間為:
― 天數(shù):200000 / 86400 = 2
― 小時:(200000 % 86400) / 3600= 7
― 分鐘:(200000 % 3600) / 60= 33
― 秒鐘:200000 % 60 = 20
所以現(xiàn)在的時間對應(yīng)為1970-1-3 0720,對應(yīng)日歷轉(zhuǎn)換成秒鐘也是相同的思路。
在BSP的例程projectat_start_f403aexamples tccalendar中,我們提供了秒鐘與日歷的相互轉(zhuǎn)換函數(shù)。
設(shè)置日歷值(日歷轉(zhuǎn)換成秒鐘)
結(jié)構(gòu)體calendar_type里面參數(shù)含義如下:
― year:年
― month:月
― day:日
― hour:時
― min:分
― sec:秒
― week:星期幾
讀取日歷值(秒鐘轉(zhuǎn)換成日歷)
鬧鐘
RTC鬧鐘是一個32位的值,當(dāng)鬧鐘值和計數(shù)值相等時產(chǎn)生鬧鐘事件(TAF置1),當(dāng)中斷使能時,會產(chǎn)生中斷。
圖4. 鬧鐘匹配
鬧鐘相關(guān)函數(shù)
鬧鐘值設(shè)置函數(shù)
中斷使能函數(shù)
標(biāo)志獲取函數(shù)
標(biāo)志清除函數(shù)
計數(shù)值溢出
由于計數(shù)值為32位,所以存在溢出問題,當(dāng)計數(shù)值為0xFFFFFFFF溢出到0x00000000時,產(chǎn)生溢出事件,OVFF標(biāo)志置1當(dāng)鬧鐘使能后,由于溢出后,秒與日歷的相轉(zhuǎn)換關(guān)系便不正確,所以用戶需妥善處理溢出事件。
0xFFFFFFFF所能代表的最大時間為136年,例程起始時間為1975,所以能夠到2106年不溢出。
圖5. 計數(shù)值溢出示例(分頻值為4)
中斷
當(dāng)發(fā)生鬧鐘、秒、溢出事件時,RTC可產(chǎn)生中斷。 鬧鐘中斷有兩種配置模式:
― 不配置EXINT線使用RTC_IRQn中斷向量,此種方式不能喚醒DEEPSLEEP和STANDBY模式;
― 配置EXINT線使用RTCAlarm_IRQn中斷向量,此種方式可以喚醒DEEPSLEEP和STANDBY模式。
要使能RTC鬧鐘(不需要喚醒低功耗模式)、秒、溢出中斷可按以下操作配置:
― 使能RTC中斷對應(yīng)的NVIC通道。
― 使能對應(yīng)的RTC中斷控制位。
要使能RTC鬧鐘(需要喚醒低功耗模式)中斷可按以下操作配置:
― EXINT線17配置為中斷模式并使能,有效沿選擇上升沿。
― 使能RTC中斷對應(yīng)的NVIC通道。
― 使能對應(yīng)的RTC中斷控制位。
下表說明了RTC時鐘源、事件以及中斷對喚醒低功耗模式的影響:
表5. RTC喚醒低功耗模式
表6. 中斷控制
表7. 事件對應(yīng)中斷向量
中斷、事件相關(guān)函數(shù)
中斷使能函數(shù)
標(biāo)志獲取函數(shù)
標(biāo)志清除函數(shù)
中斷配置示例1:以AT32F403A的鬧鐘為例,使用RTCAlarm_IRQn中斷向量
中斷處理函數(shù)
中斷配置示例2:以AT32F403A的鬧鐘為例,使用RTC_IRQn中斷向量
中斷處理函數(shù)
電池供電域功能
電池供電數(shù)據(jù)寄存器
電池供電域一共提供了42個16位電池供電數(shù)據(jù)寄存器,可以在只由電池供電下保存數(shù)據(jù),不會被系統(tǒng)復(fù)位所復(fù)位,只能通過電池供電域復(fù)位或入侵事件進(jìn)行復(fù)位。 在寫電池供電數(shù)據(jù)寄存器時,需要先解除讀保護(hù),解鎖方式同2.1章節(jié)相同。
電池供電域數(shù)據(jù)操作相關(guān)函數(shù)
寫電池供電數(shù)據(jù)寄存器
讀電池供電數(shù)據(jù)寄存器
電池供電域復(fù)位
RTC校準(zhǔn)
電池供電域還提供了RTC校準(zhǔn)功能,通過RTC_CALVAL寄存器進(jìn)行配置。
圖6. RTC校準(zhǔn)
當(dāng)RTC_CLK為32.768kHz時,校準(zhǔn)周期為2^20^個RTC_CLK約32秒。 CALVAL[7:0]值指定了2^20^個RTC_CLK中忽略的脈沖數(shù),最多可忽略127個脈沖,這可以將時鐘調(diào)慢,調(diào)慢范圍為0~121ppm。
可以選擇將校準(zhǔn)前或校準(zhǔn)后的RTC時鐘64分頻后輸出到PC13腳。
校準(zhǔn)設(shè)置相關(guān)函數(shù)
校準(zhǔn)值設(shè)置函數(shù)
校準(zhǔn)時鐘輸出設(shè)置函數(shù)
入侵檢測
電池供電域提供了1組入侵檢測TAMPER,當(dāng)在發(fā)生入侵事件時,TPEF標(biāo)志位置1,同時將自動清除電池供電數(shù)據(jù)寄存器(RTC_BPRx)的值; 若已使能入侵中斷,將產(chǎn)生入侵中斷,同時TPIF標(biāo)志位置1。 入侵檢測引腳固定為PC13。
圖7. 入侵檢測
入侵檢測模式分為高電平檢測和低電平檢測。
入侵檢測相關(guān)函數(shù)
入侵檢測有效電平設(shè)置
入侵檢測使能
入侵檢測標(biāo)志獲取
入侵檢測標(biāo)準(zhǔn)清除
入侵檢測中斷使能
事件輸出功能
電池供電域提供了一組復(fù)用功能輸出,在PC13腳可以輸出以下事件:
― 校準(zhǔn)輸出:校準(zhǔn)前64分頻輸出、校準(zhǔn)后64分頻輸出。
― 事件輸出:鬧鐘事件、秒事件
圖8. 事件輸出
當(dāng)輸出模式為事件輸出時(鬧鐘事件、秒事件),可以通過OUTM選擇輸出類型為脈沖輸出(輸出脈沖的寬度為一個RTC時鐘的周期)或者是翻轉(zhuǎn)輸出(每來一次鬧鐘或秒輸出事件,相對應(yīng)管腳翻轉(zhuǎn)一次)。
事件輸出相關(guān)函數(shù)
事件輸出設(shè)置并使能
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8691瀏覽量
151908 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2261瀏覽量
94979 -
RTC
+關(guān)注
關(guān)注
2文章
542瀏覽量
67019 -
雅特力
+關(guān)注
關(guān)注
0文章
168瀏覽量
8140 -
AT32
+關(guān)注
關(guān)注
1文章
118瀏覽量
2164
原文標(biāo)題:AT32講堂052 | 雅特力AT32 RTC入門指南
文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論