📄 cstartup.lst
字号:
172 /*- Enable interrupt & Set up Supervisor Mode and set Supervisor Mode Stack*/
173
174 # Relocate .data section (Copy from ROM to RAM)
175 0078 A0109FE5 LDR R1, =_etext
176 007c A0209FE5 LDR R2, =_data
177 0080 A0309FE5 LDR R3, =_edata
178 0084 030052E1 LoopRel: CMP R2, R3
179 0088 04009134 LDRLO R0, [R1], #4
180 008c 04008234 STRLO R0, [R2], #4
181 0090 FBFFFF3A BLO LoopRel
182
183 # Clear .bss section (Zero init)
184 0094 0000A0E3 MOV R0, #0
185 0098 8C109FE5 LDR R1, =__bss_start__
186 009c 8C209FE5 LDR R2, =__bss_end__
187 00a0 020051E1 LoopZI: CMP R1, R2
188 00a4 04008134 STRLO R0, [R1], #4
189 00a8 FCFFFF3A BLO LoopZI
190
191 00ac 80E09FE5 ldr lr,=exit
192 00b0 80009FE5 ldr r0,=main
193 00b4 10FF2FE1 bx r0
194
195 .size _startup, . - _startup
196 .endfunc
197
198 /* "exit" dummy added by mthomas to avoid sbrk write read etc. needed
199 by the newlib default "exit" */
200 .global exit
201 .func exit
202 exit:
203 00b8 FEFFFFEA b .
204 .size exit, . - exit
205 .endfunc
206
207 /*------------------------------------------------------------------------------
208 //*- Manage exception
209 //*---------------
210 //*- This module The exception must be ensure in ARM mode
211 //*------------------------------------------------------------------------------
212 //*------------------------------------------------------------------------------
213 //*- Function : IRQ_Handler_Entry
214 //*- Treatments : IRQ Controller Interrupt Handler.
215 //*- Called Functions : AIC_IVR[interrupt]
216 //*------------------------------------------------------------------------------*/
217 .global IRQ_Handler_Entry
218 .func IRQ_Handler_Entry
219
220 IRQ_Handler_Entry:
221
222 /*- Manage Exception Entry */
223 /*- Adjust and save LR_irq in IRQ stack */
ARM GAS C:\DOCUME~1\pstang\LOCALS~1\Temp/cc2Zaaaa.s page 5
224 00bc 04E04EE2 sub lr, lr, #4
225 00c0 00402DE9 stmfd sp!, {lr}
226
227 /*- Save SPSR need to be saved for nested interrupt */
228 00c4 00E04FE1 mrs r14, SPSR
229 00c8 00402DE9 stmfd sp!, {r14}
230
231 /*- Save and r0 in IRQ stack */
232 00cc 01002DE9 stmfd sp!, {r0}
233
234 /*- Write in the IVR to support Protect Mode */
235 /*- No effect in Normal Mode */
236 /*- De-assert the NIRQ and clear the source in Protect Mode */
237 00d0 44E09FE5 ldr r14, =AT91C_BASE_AIC
238 00d4 00019EE5 ldr r0 , [r14, #AIC_IVR]
239 00d8 00E18EE5 str r14, [r14, #AIC_IVR]
240
241 /*- Enable Interrupt and Switch in Supervisor Mode */
242 00dc 13F021E3 msr CPSR_c, #ARM_MODE_SVC
243
244 /*- Save scratch/used registers and LR in User Stack */
245 00e0 0E502DE9 stmfd sp!, { r1-r3, r12, r14}
246
247 /*- Branch to the routine pointed by the AIC_IVR */
248 00e4 0FE0A0E1 mov r14, pc
249 00e8 10FF2FE1 bx r0
250 /*- Restore scratch/used registers and LR from User Stack*/
251 00ec 0E50BDE8 ldmia sp!, { r1-r3, r12, r14}
252
253 /*- Disable Interrupt and switch back in IRQ mode */
254 00f0 92F021E3 msr CPSR_c, #I_BIT | ARM_MODE_IRQ
255
256 /*- Mark the End of Interrupt on the AIC */
257 00f4 20E09FE5 ldr r14, =AT91C_BASE_AIC
258 00f8 30E18EE5 str r14, [r14, #AIC_EOICR]
259
260 /*- Restore SPSR_irq and r0 from IRQ stack */
261 00fc 0100BDE8 ldmia sp!, {r0}
262
263 /*- Restore SPSR_irq and r0 from IRQ stack */
264 0100 0040BDE8 ldmia sp!, {r14}
265 0104 0EF06FE1 msr SPSR_cxsf, r14
266
267 /*- Restore adjusted LR_irq from IRQ stack directly in the PC */
268 0108 0080FDE8 ldmia sp!, {pc}^
269
270 .size IRQ_Handler_Entry, . - IRQ_Handler_Entry
271 .endfunc
272 /*---------------------------------------------------------------
273 //* ?EXEPTION_VECTOR
274 //* This module is only linked if needed for closing files.
275 //*---------------------------------------------------------------*/
276 .global AT91F_Default_FIQ_handler
277 .func AT91F_Default_FIQ_handler
278 AT91F_Default_FIQ_handler:
279 010c FEFFFFEA b AT91F_Default_FIQ_handler
280 .size AT91F_Default_FIQ_handler, . - AT91F_Default_FIQ_handler
ARM GAS C:\DOCUME~1\pstang\LOCALS~1\Temp/cc2Zaaaa.s page 6
281 .endfunc
282
283 .global AT91F_Default_IRQ_handler
284 .func AT91F_Default_IRQ_handler
285 AT91F_Default_IRQ_handler:
286 0110 FEFFFFEA b AT91F_Default_IRQ_handler
287 .size AT91F_Default_IRQ_handler, . - AT91F_Default_IRQ_handler
288 .endfunc
289
290 .global AT91F_Spurious_handler
291 .func AT91F_Spurious_handler
292 AT91F_Spurious_handler:
293 0114 FEFFFFEA b AT91F_Spurious_handler
294 .size AT91F_Spurious_handler, . - AT91F_Spurious_handler
295 .endfunc
296
297 0118 00000000 .end
297 00F0FFFF
297 00000000
297 00000000
297 00000000
ARM GAS C:\DOCUME~1\pstang\LOCALS~1\Temp/cc2Zaaaa.s page 7
DEFINED SYMBOLS
*ABS*:00000000 c:\code\arm\armlib/arch/at91/boot/cstartup.s
c:\code\arm\armlib/arch/at91/boot/cstartup.s:19 *ABS*:00000060 IRQ_Stack_Size
c:\code\arm\armlib/arch/at91/boot/cstartup.s:23 *ABS*:00000100 AIC_IVR
c:\code\arm\armlib/arch/at91/boot/cstartup.s:24 *ABS*:00000104 AIC_FVR
c:\code\arm\armlib/arch/at91/boot/cstartup.s:25 *ABS*:00000130 AIC_EOICR
c:\code\arm\armlib/arch/at91/boot/cstartup.s:26 *ABS*:fffff000 AT91C_BASE_AIC
c:\code\arm\armlib/arch/at91/boot/cstartup.s:36 .internal_ram_top:00000000 $a
c:\code\arm\armlib/arch/at91/boot/cstartup.s:39 .internal_ram_top:00000000 Top_Stack
c:\code\arm\armlib/arch/at91/boot/cstartup.s:49 .text:00000000 _startup
c:\code\arm\armlib/arch/at91/boot/cstartup.s:50 .text:00000000 reset
c:\code\arm\armlib/arch/at91/boot/cstartup.s:61 .text:00000000 $a
c:\code\arm\armlib/arch/at91/boot/cstartup.s:113 .text:00000048 InitReset
c:\code\arm\armlib/arch/at91/boot/cstartup.s:62 .text:00000004 undefvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:64 .text:00000008 swivec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:66 .text:0000000c pabtvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:68 .text:00000010 dabtvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:70 .text:00000014 rsvdvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:72 .text:00000018 irqvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:220 .text:000000bc IRQ_Handler_Entry
c:\code\arm\armlib/arch/at91/boot/cstartup.s:74 .text:0000001c fiqvec
c:\code\arm\armlib/arch/at91/boot/cstartup.s:81 .text:0000001c FIQ_Handler_Entry
*ABS*:00000080 I_BIT
*ABS*:00000040 F_BIT
*ABS*:00000013 ARM_MODE_SVC
*ABS*:00000011 ARM_MODE_FIQ
c:\code\arm\armlib/arch/at91/boot/cstartup.s:110 .text:00000044 .RAM_TOP
c:\code\arm\armlib/arch/at91/boot/cstartup.s:111 .text:00000044 $d
c:\code\arm\armlib/arch/at91/boot/cstartup.s:121 .text:00000048 $a
c:\code\arm\armlib/arch/at91/boot/cstartup.s:146 *ABS*:00000060 IRQ_STACK_SIZE
c:\code\arm\armlib/arch/at91/boot/cstartup.s:148 *ABS*:00000012 ARM_MODE_IRQ
c:\code\arm\armlib/arch/at91/boot/cstartup.s:178 .text:00000084 LoopRel
c:\code\arm\armlib/arch/at91/boot/cstartup.s:187 .text:000000a0 LoopZI
c:\code\arm\armlib/arch/at91/boot/cstartup.s:202 .text:000000b8 exit
c:\code\arm\armlib/arch/at91/boot/cstartup.s:278 .text:0000010c AT91F_Default_FIQ_handler
c:\code\arm\armlib/arch/at91/boot/cstartup.s:285 .text:00000110 AT91F_Default_IRQ_handler
c:\code\arm\armlib/arch/at91/boot/cstartup.s:292 .text:00000114 AT91F_Spurious_handler
c:\code\arm\armlib/arch/at91/boot/cstartup.s:297 .text:00000118 $d
UNDEFINED SYMBOLS
processorInit
_etext
_data
_edata
__bss_start__
__bss_end__
main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -