📄 startup.lst
字号:
1 # 1 "build/startup.S"
2 # 1 "<built-in>"
1 /******************************************************************************
0
0
2 * Startup code
3 *
4 * startup.S
5 *
6 *****************************************************************************/
7
8 .text
9 .code 32
10 .align 0
11
12 .global startup
13 .global reset
14 .global main
15 .global stack_start
16 .global stack_end
17
18 .EQU IRQ_STACK_SIZE, (3*8*4)
19 .EQU ARM_MODE_FIQ, 0x11
20 .EQU ARM_MODE_IRQ, 0x12
21 .EQU ARM_MODE_SVC, 0x13
22 .equ AIC_IVR, (256)
23 .equ AIC_FVR, (260)
24 .equ AIC_EOICR, (304)
25 .equ AT91C_BASE_AIC, (0xFFFFF000)
26
27 .EQU I_BIT, 0x80
28 .EQU F_BIT, 0x40
29
30
31 /******************************************************************************
32 * Exception vectors
33 *****************************************************************************/
34 Vectors:
35 reset:
36:build/startup.S **** b startup // reset
37:build/startup.S **** ldr pc,_undf // undefined
38:build/startup.S **** ldr pc,_swi // SWI
39:build/startup.S **** ldr pc,_pabt // program abort
40:build/startup.S **** ldr pc,_dabt // data abort
41:build/startup.S **** nop // reserved
42:build/startup.S **** ldr pc,[pc,#-0xFF0] // IRQ
43:build/startup.S **** ldr pc,_fiq // FIQ
44
45 0020 A4000000 _undf: .word exit
46 0024 A4000000 _swi: .word exit
47 0028 A4000000 _pabt: .word exit
48 002c A4000000 _dabt: .word exit
49 0030 A4000000 _fiq: .word exit
50
51 /*****************************************************************************
52 * Start - Setup hardware and start main()
53 *****************************************************************************/
54 .text
55 startup:
56
57 //Temporary stack at end of ram
58:build/startup.S **** ldr r13,=stack_end
59
60 //Init hardware (hwinit.c)
61:build/startup.S **** ldr r0,=hwinit
62:build/startup.S **** mov lr, pc
63:build/startup.S **** bx r0
64
65 //Set up Fast Interrupt Mode and set FIQ Mode Stack
66:build/startup.S **** mov r0,r13
67:build/startup.S **** msr CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT
68
69 //Init the FIQ register
70:build/startup.S **** ldr r8, =AT91C_BASE_AIC
71
72 //Set up Interrupt Mode and set IRQ Mode Stack
73:build/startup.S **** msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
74:build/startup.S **** mov r13, r0
75:build/startup.S **** sub r0, r0, #IRQ_STACK_SIZE
76
77 //Set up Supervisor Mode and set Supervisor Mode Stack
78:build/startup.S **** msr CPSR_c, #ARM_MODE_SVC
79:build/startup.S **** mov r13, r0
80
81 //Copy .data from ROM to RAM
82:build/startup.S **** LDR R1, =_etext
83:build/startup.S **** LDR R2, =_data
84:build/startup.S **** LDR R3, =_edata
85 LoopRel:
86:build/startup.S **** CMP R2, R3
87:build/startup.S **** LDRLO R0, [R1], #4
88:build/startup.S **** STRLO R0, [R2], #4
89:build/startup.S **** BLO LoopRel
90
91 //Write zeros to .bss section
92:build/startup.S **** MOV R0, #0
93:build/startup.S **** LDR R1, =__bss_start__
94:build/startup.S **** LDR R2, =__bss_end__
95 LoopZI:
96:build/startup.S **** CMP R1, R2
97:build/startup.S **** STRLO R0, [R1], #4
98:build/startup.S **** BLO LoopZI
99
100 //Go to main()
101:build/startup.S **** ldr lr,=exit
102:build/startup.S **** ldr r0,=main
103:build/startup.S **** bx r0
104
105 //Loop forever is main is ended...
106 exit:
107:build/startup.S **** b exit
108
109 /*****************************************************************************
110 * Exception vector
111 *****************************************************************************/
112 .global AT91F_Default_FIQ_handler
113 .func AT91F_Default_FIQ_handler
114 AT91F_Default_FIQ_handler:
115:build/startup.S **** b AT91F_Default_FIQ_handler
117 .endfunc
118
119 .global AT91F_Default_IRQ_handler
120 .func AT91F_Default_IRQ_handler
121 AT91F_Default_IRQ_handler:
122:build/startup.S **** b AT91F_Default_IRQ_handler
124 .endfunc
125
126 .global AT91F_Spurious_handler
127 .func AT91F_Spurious_handler
128 AT91F_Spurious_handler:
129:build/startup.S **** b AT91F_Spurious_handler
131 .endfunc
132
133
134 /*****************************************************************************
135 * Stack
136 *****************************************************************************/
137 .data
138 stack_start:
139 0000 00000000 .fill 1024
139 00000000
139 00000000
139 00000000
139 00000000
140 stack_end:
141
142
143 .end
DEFINED SYMBOLS
*ABS*:00000000 build/startup.S
build/startup.S:9 .text:00000000 $a
build/startup.S:55 .text:00000034 startup
build/startup.S:35 .text:00000000 reset
build/startup.S:138 .data:00000000 stack_start
build/startup.S:140 .data:00000400 stack_end
build/startup.S:18 *ABS*:00000060 IRQ_STACK_SIZE
build/startup.S:19 *ABS*:00000011 ARM_MODE_FIQ
build/startup.S:20 *ABS*:00000012 ARM_MODE_IRQ
build/startup.S:21 *ABS*:00000013 ARM_MODE_SVC
build/startup.S:22 *ABS*:00000100 AIC_IVR
build/startup.S:23 *ABS*:00000104 AIC_FVR
build/startup.S:24 *ABS*:00000130 AIC_EOICR
build/startup.S:25 *ABS*:fffff000 AT91C_BASE_AIC
build/startup.S:27 *ABS*:00000080 I_BIT
build/startup.S:28 *ABS*:00000040 F_BIT
build/startup.S:34 .text:00000000 Vectors
build/startup.S:45 .text:00000020 _undf
build/startup.S:46 .text:00000024 _swi
build/startup.S:47 .text:00000028 _pabt
build/startup.S:48 .text:0000002c _dabt
build/startup.S:49 .text:00000030 _fiq
build/startup.S:45 .text:00000020 $d
build/startup.S:106 .text:000000a4 exit
build/startup.S:58 .text:00000034 $a
build/startup.S:85 .text:00000070 LoopRel
build/startup.S:95 .text:0000008c LoopZI
build/startup.S:114 .text:000000a8 AT91F_Default_FIQ_handler
build/startup.S:121 .text:000000ac AT91F_Default_IRQ_handler
build/startup.S:128 .text:000000b0 AT91F_Spurious_handler
build/startup.S:137 .text:000000b4 $d
UNDEFINED SYMBOLS
main
hwinit
_etext
_data
_edata
__bss_start__
__bss_end__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -