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