ARM MP-core启动流程

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,<Rd>,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

你可能感兴趣的:(ARM MP-core启动流程)