ARM启动代码分析详解.doc
文本预览下载声明
ARM启动代码分析
ARM启动代码分析-philips的LPC2xxx系列
/**********************************************************************************
*File: startup.s
*Author: Embest w.h.xie 2005.02.21
*Desc:lpc22xx\lpc212x\lpc211x\lpc210x startup code
*History:
* note modify: cui jian jie 2006-4-25
*comment:
**********************************************************************************/
#处理器的七种工作方式的常量定义
.EQU Mode_USR, 0x10 #用户模式
.EQU Mode_FIQ, 0x11 #FIQ模式
.EQU Mode_IRQ, 0x12 #IRQ模式
.EQU Mode_SVC, 0x13 #超级用户模式
.EQU Mode_ABT, 0x17 #终止模式
.EQU Mode_UND, 0x1B #未定义模式
.EQU Mode_SYS, 0x1F #系统模式
#中断屏蔽位
.EQU I_Bit, 0x80 //IRQ中断控制位,当被置位时,IRQ中断被禁止
.EQU F_Bit, 0x40 //FIQ中断控制位,当被置位时,FIQ中断被禁止
#状态屏蔽位
.EQU T_bit, 0x20 //T位,置位时在Thumb模式下运行,清零时在ARM下运行
# 定义程序入口点
.globl _start
.code 32
.TEXT
_start:
#中断向量表
Vectors:
LDR PC, Reset_Addr //把Reset_Addr地址处的内容放入PC中
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
.long 0xb9205f80 @ keep interrupt vectors sum is 0
LDR PC, [PC, #-0xff0] //当前PC值减去0xFF0等于IRQ中断入口地址
LDR PC, FIQ_Addr
#地址表:
Reset_Addr: #该地址标号存放Reset_Handler程序段的入口地址
.long Reset_Handler
Undef_Addr: #该地址标号存放Undef_Handler程序段的入口地址
.long Undef_Handler
SWI_Addr: #该地址标号存放SWI_Handler程序段的入口地址
.long SWI_Handler
PAbt_Addr: #该地址标号存放PAbt_Handler程序段的入口地址
.long PAbt_Handler
DAbt_Addr:
.long DAbt_Handler
.long 0
IRQ_Addr: #地址标号处存放一个无效的数据
.long 0
FIQ_Addr: #该地址标号存放FIQ_Handler程序段的入口地址
.long FIQ_Handler
Undef_Handler:
B Undef_Handler
PAbt_Handler:
B PAbt_Handler
DAbt_Handler:
B DAbt_Handler
#软中断的中断服务子程序入口地址
SWI_Handler:
STMFD sp!, {r0-r3
显示全部