[IMX] 08.RTC 时钟

代码链接:GitHub - maoxiaoxian/imx


目录

[1.IMX 的 SNVS 模块](#1.IMX 的 SNVS 模块)

[2.SNVS 模块的寄存器](#2.SNVS 模块的寄存器)

[2.1.命令寄存器 - SNVS_HPCOMR](#2.1.命令寄存器 - SNVS_HPCOMR)

[2.2.低功耗控制寄存器 - SNVS_LPCR](#2.2.低功耗控制寄存器 - SNVS_LPCR)

[2.3.HP 模式的计数寄存器 MSB - SNVS_HPRTCMR](#2.3.HP 模式的计数寄存器 MSB - SNVS_HPRTCMR)

[2.4.HP 模式的计数寄存器 LSB - SNVS_HPRTCLR](#2.4.HP 模式的计数寄存器 LSB - SNVS_HPRTCLR)

[2.5.LP 模式的计数值 - SNVS_SRTCMR & SNVS_SRTCLR](#2.5.LP 模式的计数值 - SNVS_SRTCMR & SNVS_SRTCLR)


实时时钟 (Run Time Clock, RTC) 用于提供年、月、日及时间信息,并且系统断电后时钟仍会继续运行

RTC 可以通过专用的实时时钟芯片实现,但大多数 MCU 或 MPU 内部自带实时时钟模块,比如 I.MX6U 内部的 SNVS (Secure Non-Volatile Storage) 模块就提供了 RTC 功能

1.IMX 的 SNVS 模块

I.MX6U 的 SNVS 模块提供实时时钟的功能,该模块包含一个实时计数器 RTC 和一个单调计数器

SNVS 中的外设在芯片掉电后由电池供电继续运行,I.MX6U-ALPHA 开发板上有一个纽扣电池,该纽扣电池在主电源关闭后为 SNVS 供电,如下图所示:

纽扣电池在开发板掉电后继续给 SNVS 模块供电,因此实时计数器 RTC 会一直运行,时间信息不会丢失

在有纽扣电池作为后备电源的情况下,不管系统主电源是否断电,SNVS 都会正常运行

SNVS 模块包含两部分:

  • SNVS_HP:高功耗 SNVS,由系统电源供电,系统主电源断电后 SNVS_HP 也会断电;

  • SNVS_LP:低功耗 SNVS,由系统电源和外部备用电源供电,系统主电源断电后,后备电源 (纽扣电池) 继续为 SNVS_LP 供电,且 SNVS_LP 和芯片复位隔离,因此 SNVS_LP 相关寄存器的值会一直保存;

SNVS 模块的结构如下图所示:

图中各标号部分的作用如下:

  1. VDD_HIGH_IN 为系统/芯片的主电源,该电源会同时给 SNVS_HP 和 SNVS_LP 供电;

  2. VDD_SNVS_IN 为纽扣电池,该电源只会给 SNVS_LP 供电,保证 SNVS_LP 在系统主电源 VDD_HIGH_IN 掉电后继续运行;

  3. SNVS_HP 部分,此部分包含一个 SRTC (Secure Real Time Clock);

  4. SNVS_LP 部分,此部分包含一个 SRTC;

SNVS_HP 和 SNVS_LP 内部都有一个 SRTC,但 SNVS_HP 在系统掉电后会关闭,所以本章实验使用 SNVS_LP 内部的 SRTC

SRTC 的本质是一个定时器,需要外部提供一个 32.768KHz 的时钟源,I.MX6U-ALPHA 核心板上的 32.768KHz 晶振为 SNVS 的时钟源

SNVS 模块的寄存器 SNVS_LPSRTCMR 和 SNVS_LPSRTCLR 保存秒数,直接读取这两个寄存器的值可以得知其运行了多长时间,一般以 1970 年 1 月 1 日为起点,加上经过的秒数得到现在的时间和日期,SRTC 带有闹钟功能,可以在寄存器 SNVS_LPAR 中写入闹钟的时间值,当时钟值和闹钟值匹配时会产生闹钟中断

2.SNVS 模块的寄存器

2.1.命令寄存器 - SNVS_HPCOMR

SNVS_HPCOMR 寄存器控制 SNVS 模块的寄存器访问权限和模块复位功能,其结构如下:

  • NPSWA_EN:控制非特权软件的访问权限,该位置 1 后,允许非特权软件访问所有 SNVS 寄存器,包括只允许特权软件读/写访问的寄存器:

    • 0:仅特权软件可以访问特权寄存器;

    • 1:非特权软件可以访问特权寄存器;

  • LP_SWR_DIS:LP 软件复位控制,该位置 1 后禁止 LP 软件执行复位,仅系统复位才能清除该位:

    • 0:允许 LP 软件执行复位;

    • 1:禁止 LP 软件执行复位;

  • LP_SWR:LP 软件复位请求,将该位置 1 后,复位 SNVS_LP 部分,当 LP_SWR_DIS 置 1 时无法设置该位(无法复位 SNVS_LP),该位会在复位完成后自动恢复为 0:

    • 0:不执行任何操作;

    • 1:复位 SNVS_LP;

2.2.低功耗控制寄存器 - SNVS_LPCR

SNVS_LPCR 寄存器控制低功耗部分的功能,其结构如下所示:

  • PK_OVERRIDE[23]:PMIC ON 请求覆盖,向该位写 1 覆盖 IOMUX 中 PMIC I/O 引脚的功能复用;

  • PK_EN[22]:PMIC ON 使能,该位置 1 关闭 PMIC I/O 引脚的上拉/下拉电阻;

  • ON_TIME[21:20]:SoC 上电前,当 BTN 信号有效后,PMIC 上电的延迟时间:

    • 00:500 ms off->on 延迟;

    • 01:50 ms off->on 延迟;

    • 10:100 ms off->on 延迟;

    • 11:0 ms off->on 延迟;

  • DEBOUNCE[19:18]:配置 BTN 输入信号的消抖时间:

    • 00:50 ms;

    • 01:100 ms;

    • 10:500 ms;

    • 11:0 ms;

  • BTN_PRESS_TIME[17:16]:PMIC 逻辑按钮的按下超时时间:

    • 00:5 s;

    • 01:10 s;

    • 10:15 s;

    • 11:禁止长按电源键;

  • PWR_GLITCH_EN[7]:默认情况下,检查电源故障时不会检查 pmic_en_b 信号,该位置 1 后会检查该信号:

    • 0:禁用;

    • 1:启用;

  • TOP[6]:关闭系统电源,该位置 1 向电源管理 IC 发送信号,关闭系统电源,电源关闭的同时会将该位置 0,该位仅当 Dumb PMIC 使能时有效:

    • 0:打开系统电源;

    • 1:关闭系统电源;

  • DP_EN[5]:Dumb PMIC 使能,该位置 1 后允许软件控制系统电源,该位置 0 时,PMIC 自动控制系统电源:

    • 0:使能 Smart PMIC;

    • 1:使能 Dumb PMIC;

  • MC_ENV[2]:单调计数器启用和有效,该位置 1 后,允许单调计数器递增 (通过向 LPSMCMR 或 LPSMCLR 写值),当 MC_SL 或 MC_HL 位置 1 时禁止修改该位:

    • 0:单调计数器禁用且无效;

    • 1:单调计数器使能且有效;

2.3.HP 模式的计数寄存器 MSB - SNVS_HPRTCMR

该寄存器保存计数值的高 32 位:

2.4.HP 模式的计数寄存器 LSB - SNVS_HPRTCLR

该寄存器保存计数值的低 32 位:

2.5.LP 模式的计数值 - SNVS_SRTCMR & SNVS_SRTCLR

  • SNVS_SRTCMR 寄存器的 0~14 位保存计数值的高 15 位;

  • SNVS_SRTCLR 寄存器的 15~31 位保存计数值的低 17 位;

注意:修改这两个寄存器前需要先关闭 SRTC

相关推荐
我在人间贩卖青春1 分钟前
网络软件相关命令
linux·软件管理
CIb0la9 分钟前
Complete Bug Bounty tool List for free
linux·运维·bug
ytadpole12 分钟前
若依验证码渲染失效问题
java·linux·后端
上78将15 分钟前
什么是Stream流
linux·开发语言·python
EVERSPIN21 分钟前
国产32位MCU语音识别方案
单片机·嵌入式硬件·语音识别·32位mcu
似水流年 光阴已逝22 分钟前
Linux系统“No space left on device”错误:从根因到修复的全攻略
linux·运维·服务器
Koma_zhe22 分钟前
【Puter开源个人云平台】在家搭个私人网盘!Puter 让数据访问不受限
linux·笔记·开源·ssh
d111111111d26 分钟前
在stm32F103C8T6中,Thumb指令是什么?有什么作用?可以干什么?
笔记·stm32·单片机·嵌入式硬件·学习
玩具猴_wjh33 分钟前
Linux常用命令详细介绍
linux·运维·服务器
Y淑滢潇潇34 分钟前
RHCE Day 9 SHELL条件测试
linux·运维·服务器