5 存储器映射和寄存器

文章目录

  • 5.3 芯片内核
    • 5.3.1 ICache
    • 5.3.2 DCache
    • 5.3.3 FlexRAM
  • 5.4 存储器映射
    • 5.4.1 存储器功能划分
      • 5.4.1.1 存储器 Block0 内部区域功能划分
      • 5.4.1.2 储存器 Block1 内部区域功能划分
      • 5.4.1.3 储存器 Block2 内部区域功能划分
  • 5.5 寄存器映射
    • 5.5.1 GPIO1的输出数据寄存器

5.3 芯片内核

RT1052 采用的是 Cortex-M7 内核,内核即 CPU,由 ARM 公司设计。
在这里插入图片描述

  • 芯片内核和外设之间通过各种总线连接
  • 内核通过 TCM 总线访问芯片内部的 SRAM 存储器,从中加载代码指令执行
  • 内核通过 AHBP 总线跟芯片上的 GPIO、UART 等外设进行交互
  • 另外内核还可以通过 AXIM 总线接口连接芯片外部的存储器,扩展存储空间。

该芯片并没有像传统的 MCU 一样集成内部 FLASH 存储器,因此该芯片必须依靠一个外部 FLASH 长期保存程序代码。

  • 在芯片上电后,它可以直接执行在外部 FLASH 中的代码

5.3.1 ICache

Instruction Cache 指令缓存,i.MX RT 系列芯片中其大小为32KB,内核访问该存储器有着极高的速度。

  • 作用是缓存要执行的指令
  • 内核根据代码的运行情况,预先从其它存储器(如外部 Flash,外部 SDRAM 等)加载可能会被执行的代码存储至 ICache
  • 据官方统计,ICache 指令缓存的命中率能达到 98% 以上,这就是为什么 i.MX RT 系列芯片代码存储在外部的 FLASH,运行速度依然这么快。

5.3.2 DCache

Data Cache 数据缓存,在 i.MX RT 系列芯片中其大小为 32KB,它与 ICache 的功能类似,起到缓存的作用,区别只是 ICache 专用于存储指令,DCache 专用于存储数据。

5.3.3 FlexRAM

灵活RAM。在 i.MX RT 系列芯片中其大小为 512KB,可以把它理解成传统MCU 的内部 SRAM 存储器。

  • 它附加了可划分功能区域的配置,分别可以把这内部 SRAM分为专用于存储指令的 ITCM,专用于存储数据的 DTCM 以及通用功能的 OCRAM。

内核使用不同的总线访问这些不同的存储器,因而访问速度有差异:
在这里插入图片描述
ICache 和 DCache 是内核自动使用,用户无法访问的。而 ITCM、DTCM 及 OCRAM 是用户可根据具体地址进行访问,开发程序时应根据它们的特性加以利用。

5.4 存储器映射

SRAM、片上外设及外部存储器,这些功能部件共同排列在一个4GB 的地址空间内。

  • 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射

Cortex-M7 存储器映射:
在这里插入图片描述

5.4.1 存储器功能划分

在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,,每个块也都规定了用途
在这里插入图片描述大部分块的大小都有 512MB 以上,显然这是非常大的。在这 8 个 Block 里面,有这 3 个块非常重要

  • Block0 主要用于存储程序代码,一般采用 FLASH 存储器
  • Block1 主要用于运行时的内存,一般采用 SRAM 存储器,
  • Block2 用来设计成片上的外设,内核通过相应的地址访问片上外设。

5.4.1.1 存储器 Block0 内部区域功能划分

根据 ARM 内核的设计,Block0 主要用于存储程序代码,在 i.MX RT1052 芯片内部又把这部分划分了几个类型。
在这里插入图片描述ITCM 是 Instruction Tightly-Coupled Memory 的缩写,译为指令紧耦合内存。所谓紧耦合是指该内存与内核连接紧密,有非常高的访问速度。

  • 该内存专用于缓存指令。
  • 希望有着极高执行速度的代码,可以要求内核上电后把相应的代码从外部 FLASH 加载至 ITCM

ROMCP,这是一小段 ROM 空间,用于存储芯片启动时的加载代码,即 bootloader,bootloader 负责把指令从外部存储器加载至 ITCM。

SEMC 及 FlexSPI 是 RT1052 可用于控制外部并行及串行 NorFlash 的两个外设,此处把它们映射到此代码空间,是为了支持 XIP 功能(即指令直接在 NorFlash 上运行,不需要加载到内部的 ITCM)。

5.4.1.2 储存器 Block1 内部区域功能划分

Block1 用于设计片内的 SRAM,也就是芯片运行时的内存,在 i.MX RT1052 芯片内部把这部分划分了两种 RAM 类型
在这里插入图片描述第一种类型为 DTCM,是 Data Tightly-Coupled Memory 的缩写,译为数据紧耦合内存,它跟 ITCM类似,有着极高的访问速度,不过它是专门用来存储程序数据的,即代码中变量的存储位置。
第二种类型为 OCRAM,它是 On-chip RAM 的缩写,即片上内存,可以完全把它理解为传统 MCU的内部 SRAM,它没有像 ITCM 和 DTCM 的专用限制,可用于存储指令和数据(通用目的)。

  • ITCM、DTCM 及 OCRAM 地址范围均分配了 512KB,但这并不是说这三种存储器都有 512KB 大小。
  • 实际上这三种存储器共享内部 FlexRAM 的空间,而这个内部 FlexRAM 空间在 RT1052 芯片中为 512KB,在 RT1060 芯片中为 1MB。
  • 这三种存储器的空间是可以动态调整的。T1052 中,默认 ITCM 和 DTCM 各占 128KB,OCRAM占 256KB。
  • 一共有 16 种配置方式,具体可参考《Using the i.MX RT FlexRAM》文档。

5.4.1.3 储存器 Block2 内部区域功能划分

Block2 用于设计片内的外设,在 RT1052 芯片中,它的外设使用 4 条总线与内核进行连接:
AIPS 是 ARM IP Bus 的缩写,它一边与内核 AHB 总线连接,另一边与片上的各种外设连接

  • AIPS1~4 即连接了各种各样的外设,此处每条总线划分的地址范围各为 1MB,内核根据地址可以访问相应总线下的外设

在这里插入图片描述最右一栏是挂载在 AIPS-2 总线上的外设名称。
阴影处为例,它表示一个名为 GPIO1 的外设的内存地址分配情况

  • GPIO1 外设下又包含了 RT1052 芯片中 32 个相关的引脚
  • 被分配的内存地址为 0x401B8000~0x401BBFFF
  • 通过访问这些地址就可以控制这 32 个引脚了

5.5 寄存器映射

在上述存储器 Block2 这块区域,设计的是片上外设。

  • 在相应的地址空间内它们以四个字节为一个单元,共 32bit
  • 每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作

我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元。

  • 以功能为名给这个内存单元取一个别名,这个别名对应的内存区就是我们经常说的寄存器。
  • 给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

5.5.1 GPIO1的输出数据寄存器

GPIO1 端口的输出数据寄存器 DR 的地址是 0x401B 8000。

  • DR 寄存器是 32bit,对应着 32 个外部 IO

C语言访问:

// GPIO1 端口全部输出 高电平
*(unsigned int*)(0x401B8000) = 0xFFFFFFFF;
  • 0x401B 8000 在我们看来是 GPIO1 端口数据输出寄存器 DR 的地址,但是在编译器看来,这只是一个普通的变量,是一个立即数
  • 要想让编译器也认为是指针,我们得进行强制类型转换,把它转换成指针,即 (unsigned int *)0x401B 8000
  • 再对这个指针进行 * 操作

寄存器访问:

// GPIO1 端口全部输出 高电平
#define GPIO1_DR (unsigned int*)(0x401B8000)
*GPIOF_DR = 0xFFFFFFFF;

为了方便操作,我们干脆把指针操作“*”也定义到寄存器别名里面

// GPIO1 端口全部输出 高电平
#define GPIO1_DR *(unsigned int*)(0x401B8000)
GPIOF_DR = 0xFFFFFFFF;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户案例:EDLP助力金融行业打造高效数据防泄露体系

客户背景 某金融机构是一家以金融科技为核心,致力于为客户提供全方位、智能化、便捷化金融服务的综合性企业。公司总部位于南京,业务范围覆盖全国,拥有强大的技术研发团队和优秀的业务精英,为客户提供全方位的金融服务解决方案。 …

Qt-No relevant classes found. No output generated问题解决

qt在编译时会使用moc,即Meta-Object Compiler,对任何继承于QObject的子类我们都应在类开头写上Q_OBJECT,而moc做的一件事情便是将带有Q_OBJECT的类的cpp文件使用moc进行处理,这是因为Q_OBJECT实际上声明了一些函数,而m…

子类出现和父类同名的成员,子类如何访问父类的同名成员?

一. 子类访问子类同名的成员&#xff0c;直接访问即可。 #include <iostream> using namespace std;class Base { public:Base(int age 0) : m_age(age) {}int get_age() {return m_age;}static int get_counter() {return ms_counter;}int m_age;static int ms_counte…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

什么是网络攻击?阿里云服务器可以避免被攻击吗?

网络攻击是指:损害网络系统安全属性的任何类型的进攻动作。进攻行为导致网络系统的机密性、完整性、可控性、真实性、抗抵赖性等受到不同程度的破坏。 网络攻击有很多种&#xff0c;网络上常见的攻击有DDOS攻击、CC攻击、SYN攻击、ARP攻击以及木马、病毒等等&#xff0c;所以再…

xxl-job适配postgresql数据库

xxl-job支持了mysql数据库&#xff0c;其他的数据库适配得自己弄一下&#xff0c;下面以目前最新的2.4.1为例进行说明适配postgresql数据库的过程。 获取源代码 从github或gitee获取源代码&#xff0c;目前最新版本2.4.1 xxl官网&#xff1a;分布式任务调度平台XXL-JOB 建立…

开闭原则:提高扩展性的小技巧

什么是开闭原则 开闭原则的英文全称是 Open Closed Principle&#xff0c;简写为 OCP。它的英文描述是: software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification。我们把它翻译成中文就是:软件实体(模块、类、方…

Linux安装Java环境

处理安装环境 检查系统版本 [rootjeven ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core)检查系统内核版本 [rootjeven ~]# uname -r 6.1.8-1.el7.elrepo.x86_64清空卸载java环境&#xff08;如果已经安装了&#xff09; 查询java所在位置 [rootjeven …

node =》 path 模块的常用API

目录 简介 API path.join([...paths])&#xff1a;将所有给定的路径片段连接在一起&#xff0c;并规范化生成的路径。 path.resolve([...paths])&#xff1a;将路径或路径片段的序列解析为绝对路径。 path.basename(path[, ext])&#xff1a;返回路径的最后一部分&#xf…

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用&#xff1f; 通俗来讲&#xff0c;Anaconda算是一个环境容器&#xff0c;也可以叫环境管理器。 作用&#xff1a;可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

自动驾驶DCLC 功能规范

目录 1 概述Summary....................................................................................................... 4 1.1 目的Purpose....................................................................................................... 4 1.2 范围Ran…

每天学习一点点之 MySQL TINYINT

我已经不是第一次遇到关于 TINYINT 的问题了。在 MySQL 中&#xff0c;当我们将某个字段设置为 TINYINT&#xff0c;随着业务的扩展&#xff0c;我们可能会发现 TINYINT 的范围无法满足需求。这时需要修改字段属性。但如果表的数据量很大&#xff0c;或者由于分表导致涉及的表数…

ARM安全架构——为复杂软件提供保护

目录 一、概述 二、栈溢出和执行权限 三、面向返回的编程ROP 四、面向跳转的编程(JOP) 五、将这些技术应用于实际代码 七、检查你的知识

java+springboot物流管理系统设计与实现wl-ssmj+jsp

物流管理系统的开发和综合性的物流信息网站平台的建设。研究的重点是运输管理信息系统&#xff0e;本系统是一套基于运输作业流程的管理系统&#xff0c;该系统以运输任务、货品、商务三大线索设计开发。运输任务是该管理系统的核心&#xff0c;系统通过对运输任务中的接收、调…

Linux C语言 36-文件处理补充

Linux C语言 36-文件处理补充 本节关键字&#xff1a;C语言 文件操作&#xff0c;文件处理&#xff0c;文件创建&#xff0c;文件信息&#xff0c;文件删除&#xff0c;目录创建&#xff0c;目录信息&#xff0c;目录遍历&#xff0c;目录递归遍历 相关C库函数&#xff1a;acc…

[cocos creator]EditBox,editing-return事件,清空输入框

需求&#xff1a; 监听EditBox&#xff0c;editing-return 回车事件&#xff0c;在输入框内点击回车后&#xff0c;发送内容&#xff0c;并清空输入框 问题&#xff1a; 设置node.getComponent(EditBox).string ; 没有效果 解决办法&#xff1a; //设置string 为空 this.v…

应用程序APP制作用Vue3CreateApp打包有什么优势?有哪些好处?

在当代的前端开发领域&#xff0c;Vue.js作为一个领先的JavaScript框架&#xff0c;一直处于技术革新和发展的前沿。Vue3作为该框架的最新版本&#xff0c;带来了更多的新特性和优化。在这些新特性中&#xff0c;createApp方法是一个非常值得关注的变化。对于开发者而言&#x…

osg demo汇总

1.example_osganimate 演示了路径动画的使用&#xff08;AnimationPath、AnimationPathCallback&#xff09;&#xff0c;路径动画回调能够做用在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四种类型的节点上。 演示了osgSim::OverlayNode的使用node 2…

[操作系统] 大厂必问~虚拟内存系列

文章目录 4.1 什么是虚拟内存(Virtual Memory)?4.2 局部性原理4.3 虚拟存储器4.4 虚拟内存的技术实现4.5 页面置换算法OPT 页面置换算法&#xff08;最佳页面置换算法&#xff09;FIFO&#xff08;First In First Out&#xff09; 页面置换算法&#xff08;先进先出页面置换算…

MyBatis教程之逆向工程(十一)

正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程 的。逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; 1.Java实体类 2.Mapper…