1.uboot和内核都是工作在SVC模式
完整start.s代码
2.SVC模式能执行更多命令和访问更多寄存器
3.清除指令:bic
置位指令:orr
4.状态字寄存器访问指令:mrs,msr
@上电复位以后就执行这里
reset:
bl set_svc
set_svc:
mrs r0, cpsr
bic r0,r0,#0x1F
orr r0,r0,#0xD3
msr cpsr, r0
mov pc, lr
完整start.s代码
@****************************
@File:start.S
@
@Tiny6410裸机上学期代码
@****************************
.text
.global _start
@异常向量表
_start:
b reset
ldr pc, _Undefined_instruction
ldr pc, _Software_interrupt
ldr pc, _Command_abort
ldr pc, _Data_abort
ldr pc, _Nothing_used
ldr pc, _IRQ
ldr pc, _FIQ
@存放实际异常入口地址开辟的存储单元
_Undefined_instruction:
.word Undefined_instruction
_Software_interrupt:
.word Software_interrupt
_Command_abort:
.word Command_abort
_Data_abort:
.word Data_abort
_Nothing_used:
.word Nothing_used
_IRQ:
.word IRQ
_FIQ:
.word FIQ
@各种实际的异常处理函数
Undefined_instruction:
nop
Software_interrupt:
nop
Command_abort:
nop
Data_abort:
nop
Nothing_used:
nop
IRQ:
nop
FIQ:
nop
@上电复位以后就执行这里
reset:
bl set_svc
set_svc:
mrs r0, cpsr
bic r0,r0,#0x1F
orr r0,r0,#0xD3
msr cpsr, r0
mov pc, lr