s5pv210开发板支持的启动模式:
OneNand Boot(Mux/Demux)
Nand Boot (with H/W 8/16-Bit ECC)
MMC Boot (MMC Specification 4.3 compatible including eMMC)
eSSD Boot
UART/USB Boot
Secure boot mode support
Second boot support 当第一次引导模式失败时,将通过4位数据的SD/MMC通道2尝试SD/MMC引导。
Soc如何识别外部的启动介质呢?
通过OMpin来识别外部传输介质,通过将OM[0]~OM[5]六个引脚的拨码开关拨到如下表所示的一种组合,即左侧的OM[5]~OM[0]的组合,可以唯一对应一种启动方式。1'b0代表GND,1'b1代表VCC。

示例:从SD0的emmc启动,则拨码开关的组合如下,对应于上表中的I-ROM->SD/MMC->X-TAL(USB)。

ARM处理器工作模式:
User:非特权模式,大部分任务执行在这种模式
FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
Supervisor:当复位或软中断指令执行时将会进入这种模式
Abort:当存取异常时将会进入这种模式
Undef:当执行未定义指令时会进入这种模式
System:使用和User模式相同寄存器集的特权模式
只有User(用户模式)是Normal(普通模式)
Privilege中除Sys模式外,其余5种为异常模式。
各种模式的切换:可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。
各种模式下权限和可以访问的寄存器不同。
ARM的37个寄存器:
ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其他寄存器虽然名字相同但是在当前模式下不可见
对r14这个名字来说,在ARM中共有6个名叫r14(又叫sp)的寄存器,但是在每种特定处理器模式下,只有1个r14是当前可见的,其他的r14必须切换到他的对应模式下才能看到。这种设计叫影子寄存器(banked register)。


注意:System模式使用user模式寄存器集
为什么r13(sp)和r14(lr)每个模式下都有?
sp为堆栈指针,在函数切换和上下文切换中使用,可以理解为程序的工作区,每种模式下的工作区应该分开,防止当一个模式下的工作区出问题崩溃的时候影响到其余的工作区。
lr是用于存储每种模式下的返回地址的,比如从user模式切换到irq模式时,把user模式下的返回地址存到lr中,irq返回user模式就可以直接bl lr。
CPSR程序状态寄存器:

条件位:
– N = Negativeresult from ALU 符号标志位
– Z = Zeroresult from ALU 零标志位
– C =ALU operation Carriedout 进位标志位
– V =ALU operation oVerflowed 溢出标志位
Q位:
– 仅ARM5TE/J架构支持
– 指示饱和状态
J位
– 仅ARM5TE/J架构支持
中断禁止位:
– I = 1: 禁止 IRQ.
– F = 1: 禁止 FIQ.
TBit
– 仅ARM xT架构支持
– T = 0: 处理器处于 ARM 状态
– T = 1: 处理器处于 Thumb状态
Mode位:
– 处理器模式位
异常:
正常工作之外的流程都叫异常
异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作
中断是异常的一种
7种工作模式中,User(用户态)和System(系统态)是正常模式,可以理解为用户态就是用户程序在执行,系统态就是系统在执行操作系统内核执行的那些事情,其余5种为异常态。
异常向量表:
所有的CPU都有异常向量表,这是CPU设计时就设定了的,是硬件决定的。
当异常发生时,CPU会自动动作。
异常向量表是硬件向软件提供的处理异常的支持。
注:这个向量表是CPU设计时提供的异常向量表,称为1级向量表,有些为了支持多个中断,还会提供二级中断向量表。

ARM的异常处理机制:
拷贝 CPSR 到 SPSR_<mode>
设置适当的 CPSR 位:
改变处理器状态进入 ARM 态(非Thumb态)
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断 (如果需要),由硬件自动执行,不需要程序员参与。
保存返回地址到 LR_<mode>
设置 PC 为相应的异常向量
返回时,异常处理需要:
从 SPSR_<mode>恢复CPSR(这一步恢复了处理器状态)
从LR_<mode>恢复PC
– Note:这些操作只能在ARM 态执行。