Cortex M7-TRM 翻译系列之Programmers Model(二)

Cortex M7-TRM 翻译系列之Programmers Model(二)
2、程序员模型2.1、操作和执行模型2.1.1、操作模式处理器支持两种模式分别是线程模式(Thread mode)和处理器模式(Handler Mode)。处理器在上电复位时或是执行异常返回操作后进入线程模式。线程模式下既可运行特权级代码也可运行非特权级代码。处理器发生异常时进入处理器模式。处理器模式下运行的所有代码均处于特权级。2.1.2、操作状态处理器可以运行在两种操作状态下。Thumb 状态正常执行状态运行半字对齐的16位指令以及32位Thumb指令。Debug 状态处理器因调试需求而停机时所处的状态。2.1.3、特权访问和非特权用户访问代码可运行于特权级或非特权级。非特权运行模式会限制或禁止对部分资源的访问特权运行模式能够访问全部资源。处理器模式始终为特权级线程模式既可以配置为特权级也可以配置为非特权级。2.2、指令集总结2.2.1、与其他Cortex处理器的二进制兼容在进行软件迁移(向下迁移)时需要注意以下几点禁止迁移至如下内核中Cortex‑M3 处理器如果程序包含浮点运算或是属于 DSP 扩展的指令例如 SADD16Cortex‑M4 处理器如果程序包含双精度浮点运算Cortex‑M0、Cortex‑M0 处理器这类内核基于 ARMv6‑M 架构实现。如果其他处理器拟向上迁移至M7内核须注意一下几点Arm 建议面向 Cortex‑M0、M0、M3、M4 开发的代码遵守下述规则并合理配置配置与控制寄存器CCR仅使用字访问方式读写 NVIC 以及系统控制空间SCS内的寄存器因为M7只支持字访问处理器上所有未使用的 SCS 寄存器与寄存器位域均视作禁止修改在 CCR 寄存器中配置如下位域STKALIGN 位置 1UNALIGN_TRP 位置 1CCR 寄存器其余所有位保持复位初始值不变。2.3、系统地址划分处理器包含一个内部总线矩阵这个总线矩阵会对处理器内核访问与外部AHBD的访问进行仲裁访问的范围包括外部存储系统内部系统控制空间(SCS)以及调试组件。访问优先级始终赋予处理器内核以此确保各类调试访问尽可能不干扰程序的正常运行。下表展示了不同存储器映射区域所对应的处理器接口。Code区地址访问在0x00000000-0x1FFFFFFF。指令取值和数据访问通过ITCM接口或AXIM接口执行。若ITCM硬件已经实现且处于使能的状态则ITCM映射地址为0x00000000。补充一下指令取值通过ITCM。如果指令SRAM或者FLASH中则通过AXIM接口访问指令。SRAM区地址访问在0x20000000-0x3FFFFFFF。数据访问通过DITCM接口或AXIM接口执行。若DTCM硬件已经实现且处于使能的状态则DTCM映射地址为0x20000000。补充一下数据访问通过DTCM。如果数据放在SRAM或者FLASH中则通过AXIM接口访问数据。Peripheral区地址访问在0x40000000-0x5FFFFFFF。数据访问通过AHBP接口或AXIM接口完成。如果AHBP硬件已实现并使能则AHBP对应的地址区间起始地址为0x40000000。另外指令取值只可以通过AXIM接口实现AHBP接口只可以访问数据。强烈不建议在该段地址执行代码。External Ram区地址访问在0x60000000-0x9FFFFFFF。指令和数据的访问均通过AXIM接口实现。补充这一步区域就是常见的存储区和SRAM区的区别就是SRAM区是通过专用告诉TCM接口访问而External Ram区则只能通过总线AXIM接口。External Device区地址访问在0x60000000-0xDFFFFFFF。指令和数据的访问均通过AXIM接口实现。补充一点和Peripheral区相比该区域只支持AXIM接口适合放片外外设如FMC,IO扩展外部NOR FLASH等。而Peripheral区则支持专用的AHBP接口更适合放片上外设即常见的外设模块如GPIO,ADC,DMA等。Private Peripheral Bus地址访问在0xE0000000-0xE00FFFFF。对处理器外部外设相关寄存器的数据访问通过外部私有外设总线EPPB接口执行该存储区域具备永不执行XN属性因此禁止指令取指即使处理器搭载存储器保护单元MPU也无法修改该固有属性。System地址访问在0xE0100000-0xFFFFFFFF。供芯片厂商系统外设使用的系统地址段。数据访问通过 AHBP 接口完成。该存储区域为永不执行XN属性禁止指令取指即便配备 MPU也无法修改该硬件限制。2.3.1、私有外设总线内部私有外设总线内部 PPB接口可访问下述模块仪器化追踪宏单元ITM数据观察点与追踪单元DWT断点单元FPB系统控制空间SCS包含存储器保护单元MPU、指令缓存与数据缓存(Icache和Dcache)、嵌套向量中断控制器NVIC处理器 ROM 表与私有外设总线 ROM 表外部私有外设总线外部 PPB接口可访问下述模块嵌入式追踪宏单元ETM交叉触发接口CTI外部系统中的 CoreSight 调试与追踪组件2.3.2、跨区域的非对齐访问Cortex‑M7 处理器支持 ARMv7 规范定义的非对齐访问所有访问操作都会先作为单次非对齐访问发起。处理器内部会将其转换为两次或多次对齐访问并通过处理器外部接口完成传输。备注软件层面支持非对齐访问但是在处理器内部硬件会通过BIU将指令拆解多次地址对齐的访问对于跨区域的访问如访问0x3FFFFFFE的四字节一部分落在sram区一部分落在了外设区。硬件会分两段走不同的总线执行不同的访问策略。所以在执行非对齐的访问时硬件无法保证访问的原子操作软件应避免这样的操作。非对齐访问支持仅适用于单字 / 半字加载存储指令LDR, LDRH, STR, STRH。双字加载 / 存储指令本身仅允许字对齐访问不支持其余类型的非对齐访问若尝试非对齐访问将会触发故障异常。跨越存储器映射边界的非对齐访问在架构层面行为不可预测。处理器表现取决于访问跨越的边界类型。PPB 地址空间不支持非对齐访问因此不存在 PPB 访问发生跨边界的场景。2.4、独占监视器Cortex‑M7 处理器实现了本地独占监视器。关于信号量与本地独占监视器的更多信息请参阅《Arm® v7‑M 架构参考手册》。处理器内部的本地监视器设计为不保存任何物理地址而是将任意一次访问均视作与上一条 LDREX 指令的地址相匹配。 这意味着本处理器实现的独占保留粒度ERG, Exclusives Reservation Granule为全部内存地址空间。2.5、处理器内核寄存器处理器包含以下32位处理器13 个通用寄存器 R0~R12栈指针寄存器SP即 R13属于分组寄存器别名包含进程栈指针SP_process与主栈指针SP_main链接寄存器LRR14程序计数器PCR15专用程序状态寄存器xPSR2.6、异常处理器与嵌套向量中断控制器NVIC负责对所有异常进行优先级判定与处理。处理异常时遵循以下规则所有异常均在处理器处理模式Handler mode下执行。发生异常时处理器自动将现场状态保存至栈中断服务程序ISR执行完毕后自动从栈恢复现场。向量地址的读取操作与现场保存并行执行实现高效的异常入场流程。处理器支持尾链中断tail-chaining可实现中断无缝连续执行省去重复保存、恢复现场的开销。芯片实现阶段可配置中断总数以及中断优先级级数。 软件仅可启用已配置中断中的一部分同时可选择使用已配置优先级级数中的若干层级。备注EPSR 寄存器的 T 位用于支持 Arm 架构指令交互模型。但 ARMv7‑M 架构仅允许执行 Thumb 指令因此该位必须恒保持为 1。这意味着所有异常向量地址最低位 Bit [0] 必须置 1。 异常进入时若对应向量表条目的 Bit [0] 为 0执行第一条指令时会触发 INVSTATE UsageFault。 若该错误在复位阶段发生则故障会升级为硬故障HardFault原因是复位状态下 UsageFault 默认处于关闭状态。2.7、异常处理来自 TCM 接口、AXIM 接口或 AHB 接口的外部读故障会在处理器内产生同步异常外部写故障则在处理器内产生异步异常。处理器实现了《Arm® v7‑M 架构参考手册》所描述的高级异常与中断处理机制。除架构规定的标准行为外本处理器异常模型具备以下实现相关特性从硬故障HardFault向不可屏蔽中断NMI发生入栈异常时系统将以 NMI 优先级进入死锁lockup状态。从 NMI 向 HardFault 发生出栈异常时系统将以 HardFault 优先级进入死锁lockup状态。为最大限度降低中断延迟当检测到中断请求时处理器可以放弃绝大多数正在执行的多周期指令。唯一例外场景 从设备内存Device或强排序内存Strongly-ordered发起的加载操作或是在 AXI 接口发起的共享独占存储操作不会被放弃。一旦识别到中断所有普通内存访问事务都会被中止。 从中断返回后处理器会重新发起所有被放弃的操作。处理器同时实现可中断 - 可续执行位Interruptible-continuable bits支持多条加载 / 存储多字指令LDM/STM被中断打断并后续续执行。 在此机制下处理器不会从头重启整条指令而是在上一次已经完成的数据传输之后继续执行。 关于可中断 - 可续执行位及其适用场景的重要限制请参阅《Arm® v7‑M 架构参考手册》。知识点占坑后面更新1、CCR中的STKALIGN和UNALIGN_TRP的作用2、找一个芯片的总线系统架构研究一下在AXIM下挂了那些东西在AHB总线下挂了那些东西在APB总线下挂了那些东西。3、内核里面的独占监视实现机制4、回顾一下故障升级的条件。