ARM v8 Cortex R52内核 06 初始化 Initialization
6.1 初始化 Initialization
Cortex-R52 处理器提供了一种机制,可以在复位时初始化所有程序员可见的复位,包括没有被架构定义重置值的寄存器。
在Cortex-R52处理器大多数架构寄存器,例如r0-r14、和s0-s31、和包含Advanced SIMD的d0-d31,在复位后具有未知值,。因此,在使用这些寄存器之前,必须为所有模式初始化他们,可以使用 immediate-MOV 指令 或 PC-relative 加载指令。
在复位时,Current Program Status Register (CPSR) 和一些系统寄存器字段被赋予已知值。更多关于CPSR和系统寄存器的信息请看 Arm® Architecture Reference Manual Armv8, for Armv8-A architecture profile.
Cortex-R52寄存器提供了一直可以在复位时将所有程序员课件的寄存器初始化为固定值的机制,详细请见 3.2 Register summary on page 3-39.
除此之外,在运行应用Application之前,可能需要:
- 将特定值编程到各个寄存器中,例如:堆栈指针 Stack Pointers;
- 启用各种功能,例如:错误纠正 Error Correction;
- 将特定值写入到内存中,例如:TCM。
6.1.1 MPU
在使用MPU之前,必须要编程并至少启用一个区域,并启用SCTLR或HSCTLR。
除非至少有一个MPU区域被编程和激活,否则不要启用MPU。如果已经启用MPU,在使用TCM之前,必须编程MPU区域去覆盖TCM区域,以便给他们访问权限。
6.1.2 Flating-point Unit
在执行浮点指令之前,必须启用 Advanced SIMD或 Floating-point Unit (FPU)。
激活FPU遵照如下:
- 启用对FPU的访问,参照 3.2 Register summary on page 3-39.
- 通过在FPEXC寄存器中设置EN位激活FPU。
6.1.3 Cache
如果Cortex-R52处理器已经构建了指令或数据缓存,在被处理器使用之前,它们会自动失效,除非CFGL1CACHEINVDISx被连接到高电平。
这个操作永远不会报告任何ECC错误。
6.2 TCM
你可以将TCMs用于指令或数据。你还可以配置Cortex-R52处理器从复位时使用ATCM。
6.2.1 Preloading TCMs
您可以使用存储指令或AXIS接口将数据写入TCMs。
根据选择的方法,可能需要以下内容:
- 所使用的SoC上的特定硬件,例如DMA engine;
- Boot Code;
- 连接到处理器的调试器。
预加载TCM的方法包括:
Memory copy with running boot code
– 内存复制与运行引导代码
Boot Code 包括一个内存复制例程,它从外部内存读取数据,并将其写入适当的TCM中。您必须启用TCM才能执行此操作,在复制过程中可能需要为TCM提供一个基地址,而在运行应用程序时则需要另一个基地址。
Copy data from the Debug Communications Channel
– 将数据从调试通信通道复制
Boot Code 包括一个从调试通信通道 Debug Communications Channel(DCC)读取数据并将其写入TCM的例程。调试主机通过向处理器APB调试接口上的适当寄存器写入数据来提供此操作所需的数据。
Execute code in debug halt state
– 在调试停住的状态下执行代码
调试主机将Cortex-R52处理器置于调试停止状态,然后通过指令传输寄存器 Instruction Transfer Register (EDITR)向其输入指令。作为先前描述的两种方法之外的替代方案,Cortex-R52处理器执行这些指令。
DMA into TCM
SoC包括一个DMA设备,它从ROM中读取数据,并通过AXIS接口将其写入到TCMs中。
6.2.2 Preloading TCMs with ECC
如果存在的话,Cortex-R52处理器不会初始化TCM RAM中的错误码位。在启用ECC的情况下读取RAM位置之前,必须初始化错误码位。
要更新一个TCM位置而不检测到错误,要么必须禁用ECC检查,要么写入必须具有与数据块对齐且相同宽度的方式,并按照本节所描述的错误方案进行保护。
当离开复位时,您可以使用CFGTCMBOOTx信号来启用ATCM,并使用CFGRAMPROTEN信号来启用TCM(和缓存)ECC。当核心运行时,可以使用3.3.76 Memory Protection Control Register on page 3-166.来启用和禁用TCM ECC。
可以根据以下规则打开或关闭错误检查,初始化TCM RAM。
- 如果使用AXIS接口来初始化启用ECC的TCM,则AXI从设备事务必须从128位对齐地址开始,写入连续的内存块,并使块中的所有字节都启用。
- 如果通过在Cortex-R52处理器上运行代码来进行初始化,则最好通过一系列存储操作将整个TCM内存写入如下:
- 对于BTCM或CTCM,使用存储字 Store Word (STR)、存储两个字 Store Two Words(STRD)或存储多个字 Store Multiple Words(STM)指令到32位对齐的地址。
- 对于ATCM,使用STRD或带有64位对齐地址的STM。
注意:您可以使用Cortex-R52处理器的对齐检查功能来确保内存访问是32位对齐的,但没有64位对齐的检查。如果您正在使用STRD或STM指令,如果地址不是32位对齐,则会生成一个对齐错误。要使STR指令具有相同行为,请在 3.3.92 System Control Register on page 3-185 中,或者 3.3.53 Hyp System Control Register on page 3-134.中的严格对齐检查。
6.2.3 Using TCMs from reset
Cortex-R52处理器的每个核心都有一个主要输入,当它被断言时,阻止核心在复位后开始执行指令。这使得TCMs能够在核心启动之前预加载。如果在取消断言之前发出外部调试请求,在执行任何指令之前,核心会进入调试停机状态。
可以使用CFGTCMBOOTx信号来在复位时启用ATCM。这使您能够配置处理器从TCM引导,但是为了实现这一点,首先必须预加载引导代码到TCM中。
在处理器复位时,可以置位CPUHALTx输入以防止处理器在复位后获取和执行指令。当以这种方式暂停处理器时,可以预加载TCMs中的适当数据。当取消置位CPUHALTx输入时,处理器将按照正常方式从复位向量地址开始获取指令。
注意:当CPUHALTx已经取消置位以启动处理器获取时,除非核心处于core warm或上电复位状态,否则不得再次置位。
翻译来源:
Arm® Cortex®-R52 Processor Technical Reference Manual.