新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM MP-core啟動流程

ARM MP-core啟動流程

作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
1. iROM啟動MP Core時,通常的做法:

(1)讓CPU0執(zhí)行主要開機流程,其它的處理器進入WFI.

本文引用地址:http://butianyuan.cn/article/201611/317197.htm

(在啟動時,每個處理器可以透過CPU ID得知自己是否為CPU0,如果不是,就進入WFI的程序代碼中.)

即:讓AP進入Sleep

(2) 初始化外部內存與執(zhí)行系統(tǒng)的初始化

(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) 執(zhí)行第二階段的BootLoader

2. 如何識別當前是哪個CPU在執(zhí)行

執(zhí)行時期,軟件可以透過 CPU ID Register知道目前是MPCore中哪個處理器執(zhí)行該程序代碼,

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: 視處理器的個數(shù),例如四個處理器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所做的自身初始化
等到系統(tǒng)穩(wěn)定后,可能會讓Non BSP Core做:

(1). Invalidate Data Cache

(2). Enable Data Cache

(3). Set SMP with ACTLR.SMP.



關鍵詞: ARMMP-core啟動流

評論


技術專區(qū)

關閉