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

雅特力AT32 OTGHS應(yīng)用筆記

雅特力AT32F402/F405入門使用指南

喜訊!雅特力榮獲21ic“技術(shù)先鋒成就獎(jiǎng)”

雅特力AT32 Workbench煥“芯”升級(jí)!引入Middleware助力開發(fā)高效提速

雅特力AT32F402/F405時(shí)鐘配置

雅特力發(fā)布高性能電機(jī)控制專用MCU
STM32轉(zhuǎn)AT32代碼轉(zhuǎn)換

AT32講堂088 | 雅特力AT32F402/F405時(shí)鐘配置

AT32講堂087 | 雅特力AT32 IDE快速入門指南

雅特力AT32 MCU的隨機(jī)數(shù)生成

AT32講堂085 | 雅特力AT32 MCU HICK時(shí)鐘校準(zhǔn)

雅特力電機(jī)應(yīng)用快速入門指南

雅特力亮相2024慕尼黑上海電子展
雅特力攜多款AT32 MCU新品與應(yīng)用方案亮相2024慕尼黑上海電子展

評(píng)論