大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计

  痞子衡之前两篇文章 《在SBL项目实战中妙用i.MXRT1xxx里SystemReset不复位的GPR寄存器》《对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同》 介绍了 i.MXRT/LPC 上 System Reset 后不复位的 GPR 寄存器用法,但是有客户发现在 i.MXRT1010 和 i.MXRT1170 上没法直接使用文中示例读写代码,后来痞子衡检查了一番,发现 SNVS GPR 寄存器在这两款型号上确实不太一样,今天痞子衡就来讲讲它们到底有啥不一样:

一、SNVS GPR一般读写设计

  先来回顾一下 i.MXRT1015/1020/1024/1050/1060/1064 型号上的 SNVS GPR 设计,从参考手册里来看,SNVS GPR 一共有四个,其中 GPR2 - GPR0 是开放给用户自由使用的,GPR3 里面有一些系统控制功能,不建议使用。

  因为 CCM 模块里默认打开了 iomuxc_snvs_gpr 模块的时钟,所以在用户代码里可以直接读写 GPR2 - GPR0:

void snvs_gpr_rw_test(void)
{
uint32_t flag = 0x5aa55aa5;
// 测试 GPR0 - 2
uint32_t *snvs_gpr;
for (snvs_gpr = &IOMUXC_SNVS_GPR->GPR0;
snvs_gpr <= &IOMUXC_SNVS_GPR->GPR2;
snvs_gpr++)
{
*snvs_gpr = flag;
flag = *snvs_gpr; // flag 为 0x5aa55aa5
}
}

二、i.MXRT1010上的精简设计

  我们知道 i.MXRT1010 是目前最入门级的 i.MXRT 型号,整个芯片设计相比主流型 i.MXRT1050 做了不少精简,在 SNVS GPR 上也是,GPR2 - GPR0 直接被拿掉了(读取永远是0,不可写入),仅剩 GPR3,好在这个 GPR3 上没有系统控制功能,可供用户自由读写,但也仅低 16bit 有效,高 16bit 是只读的。

  CCM 模块里默认也打开了 iomuxc_snvs_gpr 模块时钟,可在用户代码里可以直接读写 GPR3[15:0]:

void snvs_gpr_rw_test(void)
{
uint32_t flag = 0x5aa5;
// 测试 GPR3[15:0]
IOMUXC_SNVS_GPR->GPR3 = (IOMUXC_SNVS_GPR->GPR3 & 0xFFFF0000u) | (uint16_t)flag;
flag = IOMUXC_SNVS_GPR->GPR3 & 0x0000FFFFu; // flag 为 0x5aa5
}

三、i.MXRT1170上的增强设计

  i.MXRT1170 是目前最高端的 i.MXRT 型号,整个芯片设计相比主流型 i.MXRT1050 做了很大改动,在架构上有增强。具体到 SNVS GPR 上,我们可以看到增加了很多 GPR,其中 GPR31 - GPR0 是完全可供用户使用的(但需要在 Secure 状态下才能被写入,默认无法写入)。GPR32 默认可以直接写入,但仅 bit15 - 1 可供用户自由使用,高 16bit 做了低 16bit 的 lock 控制。而 GPR33 里面则是一些系统控制功能,不建议使用。

  • Note: 在 i.MXRT1170 头文件里,你可能还会发现有 GPR37 - 34,由于参考手册里并未开放,这里不讨论。

  CCM 模块里默认也打开了 iomuxc_snvs_gpr 模块时钟,可在用户代码里可以直接读写 GPR32[15:1],但要想写入 GPR31 - 0,则需要先配置下 SNVS 模块:

void enable_snvs_gpr(void)
{
// Write the proper value(4173_6166h) into LPLVDR
SNVS->LPLVDR = 0x41736166u;
// Clear the low-voltage event record
SNVS->LPSR |= 0x8u;
} void snvs_gpr_rw_test(void)
{
uint32_t flag = 0x5aa5; // 测试 GPR32[15:1]
IOMUXC_SNVS_GPR->GPR32 = (IOMUXC_SNVS_GPR->GPR32 & 0xFFFF0001u) | (uint16_t)(flag << 1);
flag = (IOMUXC_SNVS_GPR->GPR32 & 0x0000FFFEu) >> 1; // flag 为 0x5aa5 flag = 0x5aa55aa5;
// 测试 GPR0 - GPR31
enable_snvs_gpr();
volatile uint32_t *snvs_gpr;
for (snvs_gpr = &IOMUXC_SNVS_GPR->GPR[0];
snvs_gpr <= &IOMUXC_SNVS_GPR->GPR[31];
snvs_gpr++)
{
*snvs_gpr = flag;
flag = *snvs_gpr; // flag 为 0x5aa55aa5
}
}

  最后再补充两点:

  • Note 1: i.MXRT1160 和 i.MXRT1170 关于 SNVS GPR 设计是一样的。
  • Note 2: i.MXRT1170 上执行了 enable_snvs_gpr() 后,SNVS_LPGPR[3] - SNVS_LPGPR[0] 才能被写入。

  至此,i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计的更多相关文章

  1. 痞子衡嵌入式:聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上的普通GPIO与高速GPIO差异. GPIO 可以说是 MCU 上最简单最常用的外设模块了,当一些原生功能外设接口模块不能 ...

  2. 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Octal或Hyper Flash上DQS信号与Dummy Cycle联系. 关于在 i.MXRT 上启动 NOR Flash 时如何设 ...

  3. 痞子衡嵌入式:解锁i.MXRTxxx上FlexSPI模块自带的地址重映射(Remap)功能

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT三位数系列隐藏的FlexSPI Remap功能. 前段时间痞子衡写了一篇文章 <利用i.MXRT1060,1010上新 ...

  4. 痞子衡嵌入式:对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同. 本篇是 <在SBL项目实战中妙用i.MXRT1xxx里Syst ...

  5. 痞子衡嵌入式:揭秘i.MXRT1170上用J-Link连接复位后PC总是停在0x223104的原因

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上安全调试策略实现对JLink调试的影响. 痞子衡之前写过一篇旧文 <i.MXRT600的ISP模式下用J-L ...

  6. 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1060/1010上串行NOR F ...

  7. 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...

  8. 痞子衡嵌入式:实测i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率. 上一篇文章 <聊聊i.MXRT1xxx上的普通GPIO与高速GP ...

  9. 痞子衡嵌入式:再测i.MXRT1060,1170上的普通GPIO与高速GPIO极限翻转频率

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060/1170上的普通GPIO与高速GPIO极限翻转频率. 按照上一篇文章 <实测i.MXRT1010上的普通GP ...

随机推荐

  1. th:insert、th:replace、th:include抽取和引用页面公共片段、传参等

    一.抽取公共片段 th:fragment  给片段命名 将公共片段抽取出来,并在顶级标签内使用th:fragment给该片段命名. 例如:将公共片段抽取出来放到comment/bar.html中: & ...

  2. TCP/IP协议 (图解+秒懂+史上最全)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  3. 强烈推荐!15 个Github 顶级Java教程类开源项目

    大家好,我是 Guide 哥!今天给大家推荐 15 个新手也能看懂的 Java 教程方向的开源项目.这些项目无论是对于你学习 Java 还是准备 Java 方向的面试都非常有帮助. 正如我第一个要推荐 ...

  4. k8s service不能访问排错

    简介 对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作.如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希 ...

  5. csp-s模拟测试41「夜莺与玫瑰·玫瑰花精·影子」

    夜莺与玫瑰 题解 联赛$T1$莫比乌斯$\%\%\%$ $dead$  $line$是直线 首先横竖就是$n+m$这比较显然 枚举方向向量 首先我们枚举方向向量时只枚举右下方向,显然贡献$*2$就是所 ...

  6. Bean初始化操作initMethod、@PostConstruct和InitializingBean

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 很多时间当一个Bean被创建出来后,我们希望做一些初始化操作,如初始化数据.缓存预热等.有以下三种方法: 初始化 ...

  7. Func委托与表达式树Expression

    最近在写ORM框架,其中遇到一个难点,就是作为框架调用方如何将查询条件传入框架内.其中就用到了Expression. Func委托 要Expression先要了解Func委托,Func委托的样式是: ...

  8. js笔记5

    1.逻辑运算 ||  &&  ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...

  9. 乘风破浪,Windows11设计和开发指导,全新图标字体和云母材质

    Windows11全新的布局设计 Windows 11全新的布局设计已设计为支持现代应用体验.渐进的圆角.嵌套元素和一致的排水沟相结合,营造出柔和.平静.平易近人的效果,强调目的的统一和易用性. ht ...

  10. vue 快速入门 系列 —— vue loader 下

    其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...