优秀的网站举例,网站建设的公司选哪家,江西东乡网站建设,谷歌chrome官网文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.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 芯… 文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.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 空间用于存储芯片启动时的加载代码即 bootloaderbootloader 负责把指令从外部存储器加载至 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 各占 128KBOCRAM占 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;