久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 瑞薩RA0單片機連載之九?RTC

瑞薩RA0單片機連載之九?RTC

作者:lulugl 時間:2025-06-27 來源:EEPW 收藏


本文引用地址:http://cqxgywz.com/article/202506/471810.htm

RA0E1的RTC(Real Time Clock) 外設, 實質是一個掉電后還繼續運行的定時器。RA0E1 的實時時鐘(RTC)有兩種計數模式:日歷計數模式、二進制計數模式,可以通過寄存器的設置來切換模式。對于日歷計數模式,RTC 具有從2000 年到2099 年的100年日歷,并自動調整閏年的日期。對于二進制計數模式,RTC計數秒,并保留信息作為串行值。二進制計數模式可用于公歷(西歷)以外的日歷。

本篇主要介紹如何使用RASC配置RTC,并使用RTC中斷來更新時間,在OLED中顯示實時時間。

1.打開RASC配置工具,新增一個stack:

1751028808450069.png

2.在g_rtc屬性中,配置他為g_rtc0,開啟中斷,并設置中斷函數為rtc_callback,中斷級別為Priority3

1751028841453625.png

3.保存配置并重新生成代碼。

4.添加drv_rtc.c/h

在drv_rtc.c中添加代碼如下:

image.png

image.png

本函數為初始化RTC,先定義一個Settime 結構體,將需要初始化的年月日時分秒以及星期添calendarTimeSet來設置時間。

使用periodicIrqRateSet 設置一個1 秒的中斷。

view plaincopy to clipboardprint?

1. void rtc_callback(rtc_callback_args_t * p_args)

2. {

3.    if(RTC_EVENT_PERIODIC_IRQ == p_args->event)

4.     {

5.     /* 若是周期中斷,獲取日期*/

6.     gRtcPeriodFlag = true;

7.         g_rtc0.p_api->calendarTimeGet(g_rtc0.p_ctrl, (rtc_time_t*)&gCurTime);

8.     }

9. }

在回調函數中,更新獲取時間標志,并把當前時間讀取到gCurTime中。

同時我們開放一個RTCDrvGetTime函數,用于返回時間。

view plaincopy to clipboardprint?

1. int RTCDrvGetTime(rtc_time_t *time)

2. {

3.     if(RTCDrvWaitPeriodInt())

4.     {

5.         *time = gCurTime;

6.         return true;

7.     }

8.     return false;

9. }

1   測試

在主函數中,先初始化RTC,然后在大循環中獲取時間,并更新到OLED屏上:

1751028934594806.png

2   總結

的RASC可以方便的配置外設,本實驗采用面向對象的編程思想來驅動RTC,實現了1秒的中斷,在回調中獲取當時間,并實時更新到OLED屏上。

實驗現象:

1751028981172151.png

(本文來源于《EEPW》



關鍵詞: 202506 瑞薩 RA0單片機

評論


相關推薦

技術專區

關閉