📄 off
字号:
ARM Macro Assembler Page 1
1 00000000 ;/******************************************************
********************************************************
**/
2 00000000 ;/********************* Startup code for AT91SAM7S *****
********************************************************
**/
3 00000000 ;/ hotislandn@hotmail.com
/
4 00000000 ;/ WWW.MCUZONE.COM
/
5 00000000 ;/******************************************************
********************************************************
**/
6 00000000
7 00000000 00000010
MODUSR EQU 0x10
8 00000000 0000001F
MODSYS EQU 0x1F
9 00000000 00000013
MODSVC EQU 0x13
10 00000000 00000017
MODABT EQU 0x17
11 00000000 0000001B
MODUDF EQU 0x1B
12 00000000 00000012
MODIRQ EQU 0x12
13 00000000 00000011
MODFIQ EQU 0x11
14 00000000
15 00000000 00000080
IRQBIT EQU 0x80
16 00000000 00000040
FIQBIT EQU 0x40
17 00000000
18 00000000 00204000
RAMEND EQU 0x00204000 ; S64 : 16KB RAM
19 00000000
20 00000000 00000100
VECTSIZE
EQU 0x100 ; 驻留RAM的向量区域定为256字
节
21 00000000
22 00000000 00000008
UsrStkSz
EQU 8 ; size of USR stack
23 00000000 00000080
SysStkSz
EQU 128 ; size of SYS stack
24 00000000 00000008
SvcStkSz
EQU 8 ; size of SVC stack
25 00000000 00000008
UdfStkSz
EQU 8 ; size of UDF stack
26 00000000 00000008
AbtStkSz
EQU 8 ; size of ABT stack
ARM Macro Assembler Page 2
27 00000000 00000080
IrqStkSz
EQU 128 ; size of IRQ stack
28 00000000 00000010
FiqStkSz
EQU 16 ; size of FIQ stack
29 00000000
30 00000000 PRESERVE8
31 00000000 AREA START, CODE, READONLY
32 00000000 CODE32
33 00000000
34 00000000 ENTRY
35 00000000
36 00000000 RESET
37 00000000 EAFFFFFE B SYSINIT ; Reset
38 00000004 EAFFFFFE B UDFHANDLER ; UNDEFINED
39 00000008 EAFFFFFE B SWIHANDLER ; SWI
40 0000000C EAFFFFFE B PABTHANDLER ; PREFETCH ABORT
41 00000010 EAFFFFFE B DABTHANDLER ; DATA ABORT
42 00000014 EAFFFFFE B . ; RESERVED
43 00000018 EAFFFFFE B VECTORED_IRQ_HANDLER
44 0000001C EAFFFFFE B . ; ADD FIQ CODE HERE
45 00000020
46 00000020 VECTORED_IRQ_HANDLER
47 00000020 ;-------------------------------------------------------
--------------------------------------------------
48 00000020 ;******************** 运行于IRQ模式的代码 **************
**************************************************
49 00000020 ;-------------------------------------------------------
--------------------------------------------------
50 00000020 E90D001F STMFD sp,{r0-r4} ; 不修改SP_IRQ的值
51 00000024 E24D0014 SUB r0,sp,#20 ; R0指向栈底
52 00000028 E24E1004 SUB r1,lr,#4 ; R1=返回地址
53 0000002C E14F2000 MRS r2,SPSR ; R2=SPSR
54 00000030
55 00000030 ;LDR r3,=OSIntNesting ; OSIntNesting++
56 00000030 ;LDRB r4,[r3]
57 00000030 ;ADD r4,r4,#1
58 00000030 ;STRB r4,[r3]
59 00000030
60 00000030 E32FF09F MSR CPSR_cxsf,#0x9f ; Sys Mode , IRQ disabl
e ,FIQ enable
61 00000034 ; 关闭IRQ,保存被中断任务的上下文到任务堆栈,SP_SYS
62 00000034 ;-------------------------------------------------------
--------------------------------------------------
63 00000034 ;******************** 其余代码运行于SYS模式 ************
**************************************************
64 00000034 ;-------------------------------------------------------
--------------------------------------------------
65 00000034 E92D0002 STMFD sp!,{r1} ; PC
66 00000038 E92D4000 STMFD sp!,{lr} ; lr
67 0000003C
68 0000003C E92D1FE0 STMFD sp!,{r5-r12} ; r12---r5
69 00000040 E8B003E0 LDMIA r0!,{r5-r9} ; 取得保存在IRQ堆栈中的R0--
-R4
70 00000044 E92D03E0 STMFD sp!,{r5-r9} ; r4---r0
71 00000048 E92D0004 STMFD sp!,{r2} ; cpsr
72 0000004C E92D0004 STMFD sp!,{r2} ; spsr
ARM Macro Assembler Page 3
73 00000050
74 00000050 E59FE114 LDR lr,=ISR_RETURN
75 00000054
76 00000054 E32FF01F MSR CPSR_cxsf,#0x1f ; Sys Mode , IRQ enable
,FIQ enable
77 00000058
78 00000058 E59FF110 LDR PC,=0xFFFFF100 ; AIC_IVR
79 0000005C ISR_RETURN
80 0000005C
81 0000005C ;BL OSIntExit
82 0000005C
83 0000005C E8BD0001 LDMFD sp!,{r0} ; spsr
84 00000060 E8BD0001 LDMFD sp!,{r0} ; cpsr
85 00000064
86 00000064 E12FF000 MSR CPSR_cxsf,r0
87 00000068 E8BDDFFF LDMFD sp!,{r0-r12,lr,pc} ; 任务返回
88 0000006C
89 0000006C ;-------------------------------------------------------
--------------------------------------------------
90 0000006C ;******************** reentrant 代码 *******************
**************************************************
91 0000006C ;-------------------------------------------------------
--------------------------------------------------
92 0000006C
93 0000006C
94 0000006C UDFHANDLER
95 0000006C EAFFFFFE B .
96 00000070
97 00000070 SWIHANDLER
98 00000070 EAFFFFFE B .
99 00000074
100 00000074 PABTHANDLER
101 00000074 EAFFFFFE B .
102 00000078
103 00000078 DABTHANDLER
104 00000078 EAFFFFFE B .
105 0000007C
106 0000007C
107 0000007C ;/******************************************************
********************************************************
**/
108 0000007C SYSINIT
109 0000007C ;设置各模式堆栈,关闭IRQ,FIQ
110 0000007C E10F0000 MRS R0,CPSR
111 00000080 E3C0001F BIC R0,R0,#0x1F
112 00000084
113 00000084 E3A02981 MOV R2,#RAMEND
114 00000088 E38010D3 ORR R1,R0,#(MODSVC :OR: IRQBIT :OR: FIQBIT)
115 0000008C E12FF001 MSR cpsr_cxsf,R1 ; ENTER SVC MODE
116 00000090 E1A0D002 MOV sp,R2
117 00000094 E2422008 SUB R2,R2,#SvcStkSz
118 00000098
119 00000098 E38010D1 ORR R1,R0,#(MODFIQ :OR: IRQBIT :OR: FIQBIT)
120 0000009C E12FF001 MSR CPSR_cxsf,R1 ; ENTER FIQ MODE
121 000000A0 E1A0D002 MOV sp,R2
122 000000A4 E2422010 SUB R2,R2,#FiqStkSz
123 000000A8
124 000000A8 E38010D2 ORR R1,R0,#(MODIRQ :OR: IRQBIT :OR: FIQBIT)
ARM Macro Assembler Page 4
125 000000AC E12FF001 MSR CPSR_cxsf,R1 ; ENTER IRQ MODE
126 000000B0 E1A0D002 MOV sp,R2
127 000000B4 E2422080 SUB R2,R2,#IrqStkSz
128 000000B8
129 000000B8 E38010DB ORR R1,R0,#(MODUDF :OR: IRQBIT :OR: FIQBIT)
130 000000BC E12FF001 MSR CPSR_cxsf,R1 ; ENTER UDF MODE
131 000000C0 E1A0D002 MOV sp,R2
132 000000C4 E2422008 SUB R2,R2,#UdfStkSz
133 000000C8
134 000000C8 E38010D7 ORR R1,R0,#(MODABT :OR: IRQBIT :OR: FIQBIT)
135 000000CC E12FF001 MSR CPSR_cxsf,R1 ; ENTER ABT MODE
136 000000D0 E1A0D002 MOV sp,R2
137 000000D4 E2422008 SUB R2,R2,#AbtStkSz
138 000000D8
139 000000D8 ;ORR R1,R0,#(MODUSR :OR: IRQBIT :OR: FIQBIT)
140 000000D8 ;MSR CPSR_cxsf,R1 ; ENTER USR MODE
141 000000D8 ;MOV sp,R2
142 000000D8 ;SUB R2,R2,#UsrStkSz
143 000000D8
144 000000D8 E38010DF ORR R1,R0,#(MODSYS :OR: IRQBIT :OR: FIQBIT)
145 000000DC E12FF001 MSR CPSR_cxsf,R1 ; ENTER SYS MODE
146 000000E0 E1A0D002 MOV sp,R2 ; 于SYS模式运行代码
147 000000E4
148 000000E4 ;/******************************************************
********************************************************
**/
149 000000E4 ; 复位后有16sec的时间禁止WDT
150 000000E4
151 000000E4 ;/******************************************************
********************************************************
**/
152 000000E4 IMPORT |Image$$RO$$Base|
153 000000E4 IMPORT |Image$$RO$$Limit|
154 000000E4 IMPORT |Image$$RW$$Base|
155 000000E4 IMPORT |Image$$RW$$Limit|
156 000000E4 IMPORT |Image$$ZI$$Base|
157 000000E4 IMPORT |Image$$ZI$$Limit|
158 000000E4
159 000000E4 ; 复制向量
160 000000E4 COPY_VECT_TO_RAM
161 000000E4 E59F0088 LDR R0,=|Image$$RO$$Base|
162 000000E8 E59F1088 LDR R1,=SYSINIT
163 000000EC E3A02980 LDR R2,=0x200000 ; RAM START
164 000000F0 0
165 000000F0 E1500001 CMP R0,R1
166 000000F4 34903004 LDRLO R3,[R0],#4
167 000000F8 34823004 STRLO R3,[R2],#4
168 000000FC 3AFFFFFB BLO %B0
169 00000100 ;/******************************************************
********************************************************
**/
170 00000100 ; RW , ZI 初始化
171 00000100
172 00000100 E59F0074 LDR R0,=|Image$$RO$$Limit|
173 00000104 E59F1074 LDR R1,=|Image$$RW$$Base|
174 00000108 E59F2074 LDR R2,=|Image$$ZI$$Base|
175 0000010C 1
176 0000010C E1510002 CMP R1,R2
177 00000110 34903004 LDRLO R3,[R0],#4
ARM Macro Assembler Page 5
178 00000114 34813004 STRLO R3,[R1],#4
179 00000118 3AFFFFFB BLO %B1
180 0000011C
181 0000011C E3A03000 MOV R3,#0
182 00000120 E59F1060 LDR R1,=|Image$$ZI$$Limit|
183 00000124 2
184 00000124 E1520001 CMP R2,R1
185 00000128 34823004 STRLO R3,[R2],#4
186 0000012C 3AFFFFFC BLO %B2
187 00000130
188 00000130 ;/******************************************************
********************************************************
**/
189 00000130 ; 如必要,复制代码到RAM中运行
190 00000130 ; 适用于代码小,但对速度要求高的场合
191 00000130 COPY_BEGIN
192 00000130 E24F0F4E ADR R0,RESET
193 00000134 E59F1050 LDR R1,=RESET ; =|Image$$RO$$Base|
194 00000138 E1500001 CMP R0,R1
195 0000013C 0AFFFFFE BEQ COPY_END
196 00000140
197 00000140 E28F201C ADR R2,COPY_END
198 00000144 E0420000 SUB R0,R2,R0
199 00000148 E0811000 ADD R1,R1,R0
200 0000014C
201 0000014C E59F3028 LDR R3,=|Image$$RO$$Limit|
202 00000150 3
203 00000150 E1510003 CMP R1,R3
204 00000154 34924004 LDRLO R4,[R2],#4
205 00000158 34814004 STRLO R4,[R1],#4
206 0000015C 3AFFFFFB BLO %B3
207 00000160
208 00000160 E59FF028 LDR PC,=COPY_END
209 00000164
210 00000164 COPY_END
211 00000164 ;/******************************************************
********************************************************
**/
212 00000164 ; 跳转到Main(!)
213 00000164 IMPORT Main
214 00000164
215 00000164 E59FF028 LDR PC,=Main
216 00000168 EAFFFFFE B .
217 0000016C
218 0000016C ;/******************************************************
********************************************************
**/
219 0000016C END
0000005C
FFFFF100
00000000
0000007C
00000000
00000000
00000000
00000000
00000000
00000164
00000000
ARM Macro Assembler Page 6
Command Line: [D:\ARM\ADSV1_2\BIN\ArmAsm -via .\output\samboot._ia]
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
COPY_BEGIN 00000130
Symbol: COPY_BEGIN
Definitions
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -