一、 概述
本文将对 SemiDrive E3 系列 MCU 的 RTC 模块进行简要介绍,具体内容包括 RTC 模块的特性、RTC 模块的功能描述、编程模型以及 RTC 驱动代码介绍等方面。
二、 E3 RTC 模块的特性
E3 系列 MCU RTC 模块主要包括以下特性:
- 支持 48 位低功耗实时时钟计数;
- 支持向上计数和向下计数两种模式;
- 支持生成唤醒/报警中断;
- 支持生成 PMU 唤醒请求;
- 支持生成周期性中断;
- 支持晶振时钟的数字校准;
- 支持 128 位状态保持寄存器;
三、 E3 RTC 模块的功能描述
3.1 RTC 计数器
RTC 计数器是一个 48 位的时钟频率为 32.768K 的计数器,当计数器禁用时可以对计数器的值进行初始化,一旦使能后,计数器的值将会以 32.768K 的频率增加,不论是禁用还是使能 CPU 都可以读取该计数器的值。正常情况下,RTC 计数器在使能后会一直保持计数,当计数器被禁用或者计数器溢出时,RTC 模块会通知系统 RTC没有正常工作。由于 32.768K 的晶振会有精度误差,当 RTC 计数器计数时间变久了以后会出现漂移,因此该模块内部设计有自动校准功能用来补偿晶振精度误差所造成的计数漂移。
3.2 唤醒定时器
唤醒定时器跟 RTC 计数器一样也是 48 位的,用户可以通过软件对该寄存器进行设置。当唤醒功能使能后,每个时钟周期 RTC 计数器的值都会跟唤醒定时器的值进行比较,当 RTC 计数器的值跟唤醒定时器的值一样时,RTC 模块将会生成中断或者唤醒请求,唤醒请求将发送给内部的 PMU 模块用来唤醒处于 RTC 模式下的 MCU。
3.3 周期性中断
当周期性中断的功能使能后,RTC 模块将生成周期性的中断请求,该中断请求的频率通过 32.768 KHZ 的频率进行分频,可以通过寄存器进行设置。该功能给多核的系统提供了同步时钟的方法,如果要使用这个中断需要在中断控制器中配置该中断源为上升沿触发。该中断将会周期性触发并且 CPU 无需访问 RTC 模块的任何寄存器。
四、 E3 RTC 编程模型
RTC 模块的软件编程必须遵照以下的流程:
- 功能寄存器配置
软件配置除了 SEC_RTC_CTRL 和 RTC_REGISTER_CROSS_CLOCK 以外的所有寄存器。
- 更新 32K 时钟域
软件向 RTC_CROSS_CLOCK 寄存器中的 REGISTER_CROSS_CLOCK_EN 位写 1,然后轮询该位直到其变为 0。
- 使能 RTC
软件配置 SEC_RTC_CTRL 寄存器的 SECURE_ENABLE 位和 PRIVILEGE_ENABLE 位,然后同时向 SEC_RTC_CTRL 寄存器的RTC_LOCAL_ENABLE 位和 RTC_REMOMTE_ENABLE 位写 1。
五、 E3 RTC 驱动代码介绍
以下以 E3210 的 RTC 工程代码为例进行简要说明:
图 5.1 Main函数
图 5.2 RTC 时间设置函数
时间的参数通过以下结构体进行设置:
图 5.3 时间参数结构体
图 5.4 RTC 报警测试函数
图 5.5 RTC 报警中断回调函数
以下为该代码执行后的串口打印信息:
图 5.6 RTC 示例工程串口打印信息
六、 参考文献
1.《E3400_E3600_MCU_Technical_Reference_Manual_Rev00.05》,2022.09
评论