?? cstartup.lst
字號:
171
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 1F00003A 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 2600003A BLO LoopZI
190
191 00ac 80E09FE5 ldr lr,=exit
192 00b0 80009FE5 ldr r0,=main
193 00b4 10FF2FE1 bx r0
194
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 2C0000EA b .
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 */
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
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
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
288 .endfunc
289
290 .global AT91F_Spurious_handler
291 .func AT91F_Spurious_handler
292 AT91F_Spurious_handler:
293 0114 FEFFFFEA b AT91F_Spurious_handler
295 .endfunc
296
297 0118 00000000 .end
297 00F0FFFF 297 00000000 297 00000000 297 00000000 DEFINED SYMBOLS *ABS*:00000000 init/Cstartup.S init/Cstartup.S:19 *ABS*:00000060 IRQ_Stack_Size init/Cstartup.S:23 *ABS*:00000100 AIC_IVR init/Cstartup.S:24 *ABS*:00000104 AIC_FVR init/Cstartup.S:25 *ABS*:00000130 AIC_EOICR init/Cstartup.S:26 *ABS*:fffff000 AT91C_BASE_AIC init/Cstartup.S:36 .internal_ram_top:00000000 $a init/Cstartup.S:39 .internal_ram_top:00000000 Top_Stack init/Cstartup.S:49 .text:00000000 _startup init/Cstartup.S:50 .text:00000000 reset init/Cstartup.S:61 .text:00000000 $a init/Cstartup.S:113 .text:00000048 InitReset init/Cstartup.S:62 .text:00000004 undefvec init/Cstartup.S:64 .text:00000008 swivec init/Cstartup.S:66 .text:0000000c pabtvec init/Cstartup.S:68 .text:00000010 dabtvec init/Cstartup.S:70 .text:00000014 rsvdvec init/Cstartup.S:72 .text:00000018 irqvec init/Cstartup.S:220 .text:000000bc IRQ_Handler_Entry init/Cstartup.S:74 .text:0000001c fiqvec init/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 init/Cstartup.S:110 .text:00000044 .RAM_TOP init/Cstartup.S:111 .text:00000044 $d init/Cstartup.S:121 .text:00000048 $a init/Cstartup.S:146 *ABS*:00000060 IRQ_STACK_SIZE init/Cstartup.S:148 *ABS*:00000012 ARM_MODE_IRQ init/Cstartup.S:178 .text:00000084 LoopRel init/Cstartup.S:187 .text:000000a0 LoopZI init/Cstartup.S:202 .text:000000b8 exit init/Cstartup.S:278 .text:0000010c AT91F_Default_FIQ_handler init/Cstartup.S:285 .text:00000110 AT91F_Default_IRQ_handler init/Cstartup.S:292 .text:00000114 AT91F_Spurious_handler init/Cstartup.S:297 .text:00000118 $dUNDEFINED SYMBOLSAT91F_LowLevelInit_etext_data_edata__bss_start____bss_end__main
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -