)
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特性研究