[IMX] 08.RTC 时钟

发布于:2025-05-27 ⋅ 阅读:(22) ⋅ 点赞:(0)

代码链接:GitHub - maoxiaoxian/imx


目录

1.IMX 的 SNVS 模块

2.SNVS 模块的寄存器

2.1.命令寄存器 - SNVS_HPCOMR

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

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到