概述

实时时钟(RTC)是一个独立的二进制编码十进制(BCD)计时/计数器。它能以年、月、日、时、分、秒为单位,精确提供当前日期和时间信息。 实时时钟使用内部 OSC 作为时钟源,只要供电电压处于工作范围内,无论设备处于运行模式、低功耗模式,RTC 都可以持续工作。

功能特性

  • 具备秒、分钟、小时(支持 12 小时或 24 小时制)、天数和年份的时间管理功能

  • 支持夏令时补偿功能

  • 提供数字校准功能,以补偿固定方向的偏差

  • 提供一个带有中断功能的可编程闹钟,闹钟可通过任意时间字段的组合进行触发

  • 可屏蔽的中断/事件类型包括:

    • 闹钟

    • 日期阈值

    • 周期唤醒定时器

  • 寄存器写保护机制

  • 支持低功耗唤醒

  • 误差小于 2 秒/天

低功耗工作状态

  • 在 sleep 以及 deepsleep 的情况下,系统会定期的唤醒 XTAL 模块(系统不唤醒)来校准 RTC 的时钟源,以确保 RTC 精度在低功耗的精度。

  • RTC 可以在 sleep 以及 deepsleep 的情况下通过闹钟中断和唤醒定时器中断唤醒系统。

供电

  • 实现简单的 RTC 辅助计时器,在 RTC 电路断电后,辅助计时器会基于原 RTC 时间信息继续计时。当 RTC 再次上电后需要 SW 将辅助计时器内容重新加载到 RTC 电路。

  • RTC 辅助计时器可以独立由 VDH_RTC 供电。

  • RTC 辅助计时器因时钟无法校准,无法实现 RTC 电路同等的精度。

  • VDH_RTC 并未在所有芯片中都有出 Pin。具体参看芯片 Datasheet。

年份寄存器的处理

在 RTC 寄存器中会存储以下时间信息:

  • 年份(从 1900 年开始)

  • 日期(一年中的第几天)

实时时钟内部没有闰年的判定,因此不能实现 day 到 year 的自动进位,需要 SW 处理。SW 可以根据闰年信息,设定 day 的阈值,当 day 到达阈值后会触发中断。

应用示例

SDK 提供了两类功能示例,帮助开发者了解和使用 RTC 功能:

  • mbed 示例

    • 路径:{SDK}\component\example\peripheral\mbed\RTC\{demo}

    • 展示如何在 mbed 环境中实现 RTC 控制

  • raw 示例

    • 路径:{SDK}\component\example\peripheral\raw\RTC\{demo}

    • 展示如何在无抽象层的情况下直接控制 RTC

以下是对 raw 示例功能的简要说明:

  • raw_rtc 演示如何设置和获取 RTC 时间;

  • raw_rtc_alarm 演示如何使用 RTC 闹钟中断。

备注

要了解示例支持的芯片,请查看示例路径下的 README.md 文件。

API 参考

要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_rtc.h