电子产业一站式赋能平台

PCB联盟网

搜索
查看: 55|回复: 0
收起左侧

为什么说i.MXRT不走传统MCU套路?从外设寄存器访问设计谈起

[复制链接]

359

主题

364

帖子

2891

积分

三级会员

Rank: 3Rank: 3

积分
2891
发表于 2021-7-10 22:54:00 | 显示全部楼层 |阅读模式
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同
! `; ]5 v: w' W; y( [  Y% n) P本篇是 《在SBL项目实战中妙用i.MXRT1xxx里SystemReset不复位的GPR寄存器》 一文的延续,SBL 项目是为 i.MXRT/LPC 系列设计的,上文只介绍了 i.MXRT1xxx 里 SystemReset 不复位的 IOMUXC_SNVS_GPR 寄存器,我们需要在 i.MXRTxxx 和 LPC 中也找出 SystemReset 不复位的通用寄存器。
9 R9 ~) l5 N5 B: |我们知道 i.MXRT1xxx 来自于 i.MX 应用处理器,而 i.MXRTxxx 来自于 LPC 微控制器,出身不同,使用上差异其实也不小。痞子衡在 i.MXRTxxx/LPC 参考手册里找了一圈,最终发现 RTC 外设里的 GPREG 寄存器符合要求。今天痞子衡就以这个通用寄存器的使用为例来展开聊一聊 i.MXRT1xxx/i.MXRTxxx/LPC 关于外设寄存器访问设计上的异同:, o* t" k5 N' x8 N, W2 s0 ], w  C, c1 {
一、回顾i.MXRT1xxx上的设计在 《在SBL项目实战中妙用i.MXRT1xxx里SystemReset不复位的GPR寄存器》 一文里我们找到符合条件的寄存器有两组,分别是 IOMUXC_SNVS_GPR 和 SNVS_LPGPR,文中最终选用了 IOMUXC_SNVS_GPR,在示例代码里是直接读写这个寄存器的,没有任何多余准备工作,甚至连 IOMUXC_SNVS_GPR 外设时钟使能的操作都不用。0 b. f- V+ k2 [7 |7 p
void gpr_rw_test(void)( U& r6 y9 J$ d" Z; j( I
{
' }; ~9 z( c" @5 S. d3 Q    uint32_t flag = 0x5a;  i% W0 V: N7 L' ~
    IOMUXC_SNVS_GPR->GPR0 = flag;$ ]9 X5 c9 A) @
    flag = IOMUXC_SNVS_GPR->GPR0;  // flag 为 0x5a
( {2 a, [+ i2 {/ T4 v}* Q2 _+ o( k1 M- Y4 o# o) L% }
这跟 i.MXRT1xxx 系统设计有关,在 i.MXRT1xxx 里 CCM 模块负责所有其他外设的时钟开关控制(具体在 CCM->CCGRx 寄存器),下图是 i.MXRT1052 里 CCM->CCGRx 的默认值(复位后初值,包含软/硬复位):
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表