首頁 資訊 > 創(chuàng)新 > 正文

【世界獨家】【愛普特 APT32F110 ev board 試用測評】之四:RTC測試

APT32 單片機RTC功能強大, 在所有低功耗模式下均可獨立運行,并支持系統(tǒng)喚醒。實時時鐘計數(shù)器(RTC)為一個獨立的 BCD 編碼計數(shù)器,提供實時的日歷和時間信息,包括星期,年、月、日和小時、分鐘、秒。支持可編程的鬧鐘中斷。RTC 具有產(chǎn)生周期性的中斷事件的能力。RTC 一旦初始化成功并開始工作,任何復(fù)位信號均不能影響其工作,除非重新上電。

RTC 的基本特性:

1) 支持萬年歷功能,自動閏年判定。計時器包括小時、分鐘、秒和微秒,BCD 格式計數(shù)。


(資料圖片)

2) 二十四小時或者十二小時制可選,支持星期判斷。

3) 支持多個時鐘源,包括外部晶振、內(nèi)部低速振蕩器和內(nèi)部主振蕩器。

4) 支持低功耗喚醒功能

5) 兩個可編程鬧鐘。

6) 支持周期事件觸發(fā)。

RTC 的系統(tǒng)框圖:

由于 RTC 工作時鐘與 APB 總線時鐘(PCLK)為異步時鐘,對 RTC 的讀寫操作均需要通過兩個異步時鐘同步

后進行。任何對 RTC 控制器的操作不會立即產(chǎn)生作用,可以通過對 CR[UPD_BSY]控制位進行查詢,以獲得更新狀

態(tài)。UPD_BSY 控制位在寫請求發(fā)生時,會立即置位,直到更新結(jié)束后才會自動清除。在 RTC 未初始化前,對寄存

器的更新值都保存在緩沖中,所以只需要在初始化時,查詢 UPD_BSY 即可。當 RTC 已經(jīng)初始化完成后(RTC 已經(jīng)

開始工作),任何對寄存器的修改,例如 CR 和 ALRAR,都需要查詢 UPD_BSY,以保證更新成功。

對 RTC 的初始化,包括如下操作。

1) 設(shè)置保護寄存器關(guān)閉

2) 設(shè)置 TIMR、DATR、ALRAR、ALRBR

3) 設(shè)置 CCR,包括時鐘選擇和分頻選擇

4) 使能 RTC 時鐘(設(shè)置 CCR[CLKEN]),等待 RTC 工作時鐘穩(wěn)定(通過 CCR[RTCCK_ST]控制位查詢)。

5) 設(shè)置 CR 寄存器,以設(shè)置時間格式或鬧鐘使能等配置。同時清除 INIT 位,啟動初始化。

6) 回讀 INIT 狀態(tài)位,確認 RTC 工作

void rtc_set_time_demo(void)

{

csi_rtc_config_t tRtcConfig;

csi_rtc_time_t tRtcTime,tRtcTimeRdbk;

uint32_t wSec = 0;

csi_pin_set_mux(PA03, PA03_OSC_XI);//設(shè)置PA0.3為SXIN,如果使用外部主晶振作為RTC時鐘源,必須先對管腳進行配置

csi_pin_set_mux(PA04, PA04_OSC_XO);? ? ? ? ?//設(shè)置PA0.4為SXOUT,如果使用外部主晶振作為RTC時鐘源,必須先對管腳進行配置

csi_pin_set_mux(PA01,PA01_OSC_SXI);? ? ? ? ?//設(shè)置PA0.1為XIN,如果使用外部副晶振作為RTC時鐘源,必須先對管腳進行配置

csi_pin_set_mux(PA02,PA02_OSC_SXO);? ? ? ? ?//設(shè)置PA0.2為XOUT,如果使用外部副晶振作為RTC時鐘源,必須先對管腳進行配置

tRtcConfig.byClkSrc = RTC_CLKSRC_ESOSC;//外部副晶振作為RTC時鐘源

tRtcConfig.byFmt = RTC_24FMT;//選擇時間模式

csi_rtc_init(RTC, &tRtcConfig);//初始化設(shè)置

tRtcTime.iYear = 22;

tRtcTime.iMon? = 2;

tRtcTime.iMday = 14;

//tRtcTime.iWday = 1;? ? ? ? ? ? ? ? ? ? ? ?//星期1-7

tRtcTime.iPm? ?= RTC_AM;// AM or PM

tRtcTime.iHour = 9;//如果是12小時制,回讀到的hour范圍為1->12;如果是24小時制,回讀到的hour范圍是0->23

tRtcTime.iHour = 9;//如果是12小時制,回讀到的hour范圍為1->12;如果是24小時制,回讀到的hour范圍是0->23

tRtcTime.iMin? = 50;

tRtcTime.iSec? = 59;

csi_rtc_set_time(RTC, &tRtcTime);//設(shè)置時間

csi_rtc_start(RTC);//RTC開始計時

csi_rtc_change_fmt(RTC, RTC_12FMT);//修改時間模式為12小時制

tRtcTime.iYear = 22;

tRtcTime.iMon? = 2;

tRtcTime.iMday = 14;

//tRtcTime.iWday = 1;? ? ? ? ? ? ? ? ? ? ? ?//星期1-7

tRtcTime.iPm? ?= RTC_AM;// AM or PM

tRtcTime.iHour = 11;

tRtcTime.iHour = 9;

tRtcTime.iMin? = 59;

tRtcTime.iSec? = 56;

csi_rtc_set_time(RTC, &tRtcTime);//修改時間以后需要重新start rtc

csi_rtc_start(RTC);

csi_rtc_get_time(RTC,? &tRtcTimeRdbk);//回讀當前時間

my_printf("12FMT: %d:%d:%d\n", tRtcTimeRdbk.iHour, tRtcTimeRdbk.iMin, tRtcTimeRdbk.iSec);

csi_rtc_change_fmt(RTC, RTC_24FMT);//修改時間模式為24小時制

csi_rtc_get_time(RTC,? &tRtcTimeRdbk);//回讀當前時間

my_printf("24FMT: %d:%d:%d\n", tRtcTimeRdbk.iHour, tRtcTimeRdbk.iMin, tRtcTimeRdbk.iSec);

csi_rtc_change_fmt(RTC, RTC_12FMT);//修改時間模式為12小時制

while(1)

{

csi_rtc_get_time(RTC,? &tRtcTimeRdbk);

if(wSec != tRtcTimeRdbk.iSec )?

{

wSec = tRtcTimeRdbk.iSec;

my_printf("%d:%d:%d pm= %d\n", tRtcTimeRdbk.iHour, tRtcTimeRdbk.iMin, tRtcTimeRdbk.iSec, tRtcTimeRdbk.iPm);

}

}

}

經(jīng)過2小時測試,RTC精度穩(wěn)定可好

關(guān)鍵詞: 時間模式 當前時間 開始工作 時間格式 實時時鐘

最近更新

關(guān)于本站 管理團隊 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2018 創(chuàng)投網(wǎng) - www.mallikadua.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號-3