大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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. 安全Web服务器

    https协议: 443 端口 虚拟Server0: 1.部署 网站证书(营业执照)# cd /etc/pki/tls/certs/ # wget http://classroom.example.c ...

  2. Jenkins 进阶篇 - 数据备份

    随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...

  3. 【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  4. 【Java】Debug断点调试常用技巧

    Debug操作技巧 Show Execution Point 将光标回到当前断点停顿的地方 Step Over 执行当前行代码,并将运行进度跳转到下一行. Step Into 进入到当前代码行的方法内 ...

  5. 利用 iOS 14 Vision 的手势估测功能 实作无接触即可滑动的 Tinder App

    Vision 框架在 2017 年推出,目的是为了让行动 App 开发者轻松利用电脑视觉演算法.具体来说,Vision 框架中包含了许多预先训练好的深度学习模型,同时也能充当包裹器 (wrapper) ...

  6. DOS命令行(3)——Windows运行窗口打开特定功能

    cmd 开启命令解释权或启用Windows中的某程序 cmd /c 执行完命令后关闭命令窗口 cmd /k 执行完命令后不关闭命令窗口   winver 查看Windows版本信息版权信息授权信息   ...

  7. Java-学习日记(Atomic,Volatile)

    很早之前在公司就看到了atomicInteger,atomicLong这些变量了,一直不明白是什么意思,今天花了点时间了解下. volatile: 先从volatile开始讲起,volatile是多线 ...

  8. 玩转html2canvas以及常见问题解决

    前端小伙伴经常会遇到页面截图或者把网页中指定的区域(某个大div)的内容转换成png的图片.这个时候常常会用到html2canvas库来实现,js真的很强大. 我最近也遇到了一个需求,需要把输入的文本 ...

  9. Unity的AnimationCurve

    转自:风宇冲Unity3D教程学院http://blog.sina.com.cn/s/blog_471132920101f8nv.html,本文有多处增删减改,详细内容请查看原文. 1.介绍 Anim ...

  10. CMD命令进入某个目录

    1.开始->运行->CMD 2.进入某个磁盘,直接盘符代号:如D:,不用CD 命令切换 3.进入除根录以下的文件夹 cd 文件夹路径 例如我要进入 E:/Program Files/PHP ...