[フレーム]

新闻中心

EEPW首页 > 嵌入式系统> 设计应用> 瑞萨RA0单片机连载之九⸺RTC

瑞萨RA0单片机连载之九⸺RTC

作者:lulugl 时间:2025年06月27日 来源:EEPW

    • 扫码加入
      和技术大咖面对面交流
      海量资料库查询
收藏
[フレーム]


本文引用地址:https://www.eepw.com.cn/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)



[フレーム]
关键词: 202506 瑞萨 RA0单片机

评论


相关推荐

[フレーム]

技术专区

关闭
[フレーム]

AltStyle によって変換されたページ (->オリジナル) /