×
嵌入式 > 嵌入式开发 > 详情

ARM MP-core启动流程

发布时间:2020-08-24 发布时间:
|
1. iROM启动MP Core时,通常的做法:

(1)让CPU0执行主要开机流程,其它的处理器进入WFI.

(在启动时,每个处理器可以透过CPU ID得知自己是否为CPU0,如果不是,就进入WFI的程序代码中.)

即:让AP进入Sleep

(2) 初始化外部内存与执行系统的初始化

(3) 设定 Stack

在DRAM初始化前,Stack是建立在SRAM中的。

(4) 把BootRom程序代码复制到外部内存中

(5) 重新Mapping 内存位置

(把0×00000000地址对应到外部内存 或 I-TCM如果 0×00000000地址要跑中断表的话(or 中断表对应到0xffff0000))

因为,Cold Reset时为了顺利开机,把iROM映射到了0x0000 0000处.

(6) 把第二阶段的BootLoader加载到外部内存中 or OnChip SRAM.\

(7) 执行第二阶段的BootLoader

2. 如何识别当前是哪个CPU在执行

执行时期,软件可以透过 CPU ID Register知道目前是MPCore中哪个处理器执行该程序代码,

CPU Id储存在CP15 c0中,长度为32bits,只能在特权等级(也就是SVC Mode下)被读取,读取的范例如下程序代码所示:

MRC p15,0,,c0,c0,5; returns CPU ID register
31 12 11 … 8 7 … 4 3 … 0
SBZ Cluster ID SBZ CPU ID
说明如下,
(1) Cluster ID:

用以支持 Multi-MPCore架构下的Cluster识别之用 (The Cluster ID field value is set by the CLUSTERID configuration pins.)

(2) CPU ID: 视处理器的个数,例如四个处理器ID依序为 0×00,0×01,0×02与0×03

3. Primary Core所做的自身初始化

(1)Invalidate Data Cache
(2)Invalidate SCU(Snoop Control Unit) duplicate tags for all processors
(3)Invalidate L2 Cache
(4)Enable SCU
(5)Enable Data Cache
(6)Enable L2 Cache
(7)Set SMP mode with ACTLR.SMP.

4. Non-Primary Core所做的自身初始化
等到系统稳定后,可能会让Non BSP Core做:

(1). Invalidate Data Cache

(2). Enable Data Cache

(3). Set SMP with ACTLR.SMP.



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购