Cortex M7-TRM 翻译系列之Initialization(四)
2026/7/13 3:53:54 网站建设 项目流程

4 初始化

本章介绍处理器的初始化流程,以及在使用处理器各项功能前,需要配置哪些寄存器来开启对应功能。

4.1 初始化概述

在运行应用程序之前,你可能需要完成以下操作:

  • 向各类寄存器写入特定配置值,例如堆栈指针
  • 开启处理器各类功能模块,例如错误校验(ECC)
  • 向存储器加载指定数据,例如紧耦合存储器(TCM)

其他初始化相关要求参见以下章节:

  • MPU 初始化
  • FPU 初始化
  • L1 缓存初始化与使能
  • 关闭缓存错误检纠错功能
  • TCM 使能
  • TCM 预加载
  • 开启 TCM 重试机制与读 - 修改 - 写(RMW)功能
  • AHBP 接口使能

部分初始化要求为可选配置,取决于 Cortex‑M7 处理器内部实现的功能选项。

4.1.1 MPU 初始化

如果处理器集成了存储器保护单元(MPU),在使用 MPU 之前,必须在MPU_CTRL寄存器中将其使能。更多信息请参阅《Arm® v7-M 架构参考手册》。

配置 MPU 时,若 MPU 此前已经完成过配置,请禁用未使用的保护区域,避免旧的区域配置对全新的 MPU 配置产生影响。

4.1.2 FMPU 初始化

如果处理器集成了浮点运算单元(FPU),则必须先将其使能,才能执行浮点指令。下方代码展示了开启该功能的示例。

4.1.3 L1Cache 初始化及使能

如果处理器实现了 L1 数据缓存或指令缓存,软件在使能缓存之前,必须先将缓存整体无效化,否则会产生不可预知的行为。

完整无效化数据缓存

若处理器集成了数据缓存,软件可参考下方示例代码实现对整个数据缓存的无效化操作。实现方式为遍历缓存每一行,并通过私有外设总线(PPB)地址域内的DCISW寄存器将对应缓存行无效。缓存的路数与组数可通过读取CCSIDR寄存器获取。

备注:r7 = number of words in a cache line注释有误,这里应该是cache line的字节数2的指数,非word数。

指令缓存无效化

如果处理器集成了指令缓存,你可以使用下面示例代码将整个指令缓存无效化。该操作通过向私有外设总线(PPB)地址域内的ICIALLU寄存器执行写操作完成。

使能数据缓存与指令缓存

完成数据缓存与指令缓存的初始化后,可使用下方示例代码将二者使能。该操作通过修改私有外设总线(PPB)地址域内配置控制寄存器(CCR)的IC位域与DC位域实现。

4.1.4 关闭缓存错误检测与纠错功能

如果处理器集成了缓存错误检测与纠错(ECC)功能,复位后该功能默认处于使能状态。可使用下方示例代码关闭此功能,操作通过修改私有外设总线(PPB)地址域内CACR寄存器的ECCEN位完成。

软件修改CACR寄存器中的错误检测相关位域时必须格外谨慎。倘若在缓存中仍存有数据的情况下修改这些位域,缓存内的 ECC 校验信息可能无法匹配新的配置参数,进而引发非预期错误与数据丢失。 因此,仅当两类缓存均处于关闭状态时,才允许修改 CM7_CACR 寄存器相关位域;并且完成修改后,必须对全部缓存执行无效化操作

4.1.5 使能TCM

处理器可通过外部信号配置,使 TCM 接口在系统复位后默认处于使能状态。若复位时 TCM 接口为关闭状态,则可使用下方示例代码,通过软件同时开启指令 TCM 接口与数据 TCM 接口。

4.1.6 TCM预加载

TCM 预加载的实现方式包含:

1.运行引导代码执行内存拷贝

若引导代码内置内存拷贝子程序,从只读存储器(ROM)读取数据并写入对应的 TCM,则必须先使能 TCM才能完成该操作。 该引导代码必须在 TCM 地址区域之外的地址运行

2.通过DMA向TCM搬运数据

系统内置 DMA 外设,可从 ROM 读取数据,并经由 AHBS接口写入 TCM。 该方式可实现 TCM 预加载,使处理器复位后便可直接使用 TCM。

3. 复位后直接使用 TCM 启动

若 TCM 接口配置为复位时自动使能 TCM,且复位向量地址位于 TCM 存储空间内,则处理器将从 TCM 启动。 系统必须保证:程序开始执行前,引导代码已经存放至对应的 TCM 区域。可通过两种途径实现:

  • 在复位完成前预先初始化 TCM 内存;
  • 复位完成后,利用 AHB 从机接口传输数据,同时拉高CPUWAIT输入信号。 拉高CPUWAIT信号可以阻止处理器在复位后取指与执行指令。待数据传输完毕、撤销CPUWAIT信号后,处理器按照常规流程,从复位向量地址开始取指运行。

注意:一旦撤销CPUWAIT、允许处理器开始取指后,不得再次拉高CPUWAIT; 仅当处理器处于系统复位(nSYSRESET有效)或上电复位(nPORESET有效)状态时例外。 处理器正常运行过程中如果拉高CPUWAIT处理器不会停止运行

4.1.7 开启 TCM 重试机制与读 - 修改 - 写功能

如果连接至处理器的 TCM 支持错误检测与纠错(ECC)功能,则 TCM 接口必须配置为支持访问重试以及读 - 修改 - 写(RMW)特性。系统可通过处理器外部信号,在复位阶段将上述功能开启。若复位时这些功能处于关闭状态,则可使用下方示例代码通过软件进行使能:

备注:

RMW特性说明:

TCM ECC 规则: 每 32bit 数据对应一组 ECC 校验码;校验码无法单独更新部分字节

  • 32bit 完整字写:内存控制器直接计算新 ECC,【数据 + ECC】一并写入。
  • 字节 / 半字(8bit/16bit)局部写: 如果没有 RMW 硬件通路:只能直接更新对应字节,剩余 24bit 旧数据不动 → ECC 校验码不匹配,后续读操作直接报 ECC 故障

开启RMW功能后

  • Read:先读取目标地址完整 32 位原始数据(同时执行 ECC 校验、自动纠正单比特错误)
  • Modify:在内部缓冲区内,只更新需要改写的字节,其余位保留原值
  • Write:基于修改后的完整 32bit 字重新计算全新 ECC 校验码,把【32bit 新数据 + 新 ECC】整体写回 TCM

访问重试机制说明:

辐射、噪声引发瞬时单粒子翻转(SEU),内存读出数据出现 1bit 错误。

  • TCM 读取数据
  • ECC 硬件检测发现单比特错误,硬件完成数据纠错
  • 此时SRAM 内部存储的数据依然是错误值!只是送给 CPU 的数据被临时修复

开启访问重试使能后,TCM 接口向内核发起Retry 请求,内核暂停流水线,硬件自动执行:

  • 使用已经纠正完成的正确数据
  • 发起一次回写,把修正后数据连同正确 ECC写回 TCM SRAM
  • 重试原始读事务,把稳定正确数据交付内核

4.1.8 使能AHBP接口

处理器可通过外部信号配置,使 AHBP 接口在系统复位后处于使能状态。若复位时该接口为关闭状态,则可使用下方示例代码,通过软件开启 AHBP 接口

知识点:占坑后面更新

1、RMW特性研究

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询