📄 cstartup.lst
字号:
-------------------------------
99 00000030 ;- Setup the stack for each mode
100 00000030 ;-----------------------------------------------
-------------------------------
101 00000030 80009FE5 ldr r0, =__iramend
102 00000034
103 00000034 ;- Set up Interrupt Mode and set IRQ Mode
Stack
104 00000034 D2F021E3 msr CPSR_c, #ARM_MODE_IRQ | I_BIT |
F_BIT
105 00000038 00D0A0E1 mov r13, r0 ; Init
stack IRQ
106 0000003C 600040E2 sub r0, r0, #IRQ_STACK_SIZE
107 00000040
108 00000040 ;- Enable interrupt & Set up Supervisor Mode and
set Supervisor Mode Stack
109 00000040 53F021E3 msr CPSR_c, #ARM_MODE_SVC | F_BIT
110 00000044 00D0A0E1 mov r13, r0
111 00000048
112 00000048 ;-----------------------------------------------
-------------------------------
113 00000048 ; Initialize segments.
114 00000048 ;-----------------------------------------------
-------------------------------
115 00000048 ; __segment_init is assumed to use
116 00000048 ; instruction set and to be reachable by BL from
the ICODE segment
117 00000048 ; (it is safest to link them in segment
ICODE).
118 00000048 ;-----------------------------------------------
-------------------------------
119 00000000 EXTERN __segment_init
120 00000048 70009FE5 ldr r0,=__segment_init
121 0000004C 0FE0A0E1 mov lr, pc
122 00000050 10FF2FE1 bx r0
123 00000054
124 00000054 ;-----------------------------------------------
-------------------------------
125 00000054 ;- Branch on C code Main function (with
interworking)
126 00000054 ;-----------------------------------------------
-------------------------------
127 00000000 EXTERN main
128 00000000 PUBLIC __main
129 00000054 ?jump_to_main:
130 00000054 68E09FE5 ldr lr,=?call_exit
131 00000058 68009FE5 ldr r0,=main
132 0000005C __main:
133 0000005C 10FF2FE1 bx r0
134 00000060
135 00000060 ;-----------------------------------------------
-------------------------------
136 00000060 ;- Loop for ever
137 00000060 ;-----------------------------------------------
-------------------------------
138 00000060 ;- End of application. Normally, never
occur.
139 00000060 ;- Could jump on Software Reset ( B 0x0
).
140 00000060 ;-----------------------------------------------
-------------------------------
141 00000060 ?call_exit:
142 00000060 End
143 00000060 FEFFFFEA b End
144 00000064
145 00000064 ;-----------------------------------------------
-------------------------------
146 00000064 ;- Manage exception: The exception must be
ensure in ARM mode
147 00000064 ;-----------------------------------------------
-------------------------------
148 00000064 ;-----------------------------------------------
-------------------------------
149 00000064 ;- Function : IRQ_Handler_Entry
150 00000064 ;- Treatments : IRQ Controller
Interrupt Handler.
151 00000064 ;- Called Functions : AIC_IVR[interrupt]
152 00000064 ;-----------------------------------------------
-------------------------------
153 00000064 IRQ_Handler_Entry:
154 00000064
155 00000064 ;-------------------------
156 00000064 ;- Manage Exception Entry
157 00000064 ;-------------------------
158 00000064 ;- Adjust and save LR_irq in IRQ stack
159 00000064 04E04EE2 sub lr, lr, #4
160 00000068 00402DE9 stmfd sp!, {lr}
161 0000006C
162 0000006C ;- Save r0 and SPSR (need to be saved for nested
interrupt)
163 0000006C 00E04FE1 mrs r14, SPSR
164 00000070 01402DE9 stmfd sp!, {r0,r14}
165 00000074
166 00000074 ;- Write in the IVR to support Protect
Mode
167 00000074 ;- No effect in Normal Mode
168 00000074 ;- De-assert the NIRQ and clear the source in
Protect Mode
169 00000074 50E09FE5 ldr r14, =AT91C_BASE_AIC
170 00000078 00019EE5 ldr r0 , [r14, #AIC_IVR]
171 0000007C 00E18EE5 str r14, [r14, #AIC_IVR]
172 00000080
173 00000080 ;- Enable Interrupt and Switch in Supervisor
Mode
174 00000080 13F021E3 msr CPSR_c, #ARM_MODE_SVC
175 00000084
176 00000084 ;- Save scratch/used registers and LR in User
Stack
177 00000084 0E502DE9 stmfd sp!, { r1-r3, r12, r14}
178 00000088
179 00000088 ;----------------------------------------------
180 00000088 ;- Branch to the routine pointed by the
AIC_IVR
181 00000088 ;----------------------------------------------
182 00000088 0FE0A0E1 mov r14, pc
183 0000008C 10FF2FE1 bx r0
184 00000090
185 00000090 ;----------------------------------------------
186 00000090 ;- Manage Exception Exit
187 00000090 ;----------------------------------------------
188 00000090 ;- Restore scratch/used registers and LR from
User Stack
189 00000090 0E50BDE8 ldmia sp!, { r1-r3, r12, r14}
190 00000094
191 00000094 ;- Disable Interrupt and switch back in IRQ
mode
192 00000094 92F021E3 msr CPSR_c, #I_BIT | ARM_MODE_IRQ
193 00000098
194 00000098 ;- Mark the End of Interrupt on the AIC
195 00000098 2CE09FE5 ldr r14, =AT91C_BASE_AIC
196 0000009C 30E18EE5 str r14, [r14, #AIC_EOICR]
197 000000A0
198 000000A0 ;- Restore SPSR_irq and r0 from IRQ stack
199 000000A0 0140BDE8 ldmia sp!, {r0,r14}
200 000000A4 0EF06FE1 msr SPSR_cxsf, r14
201 000000A8
202 000000A8 ;- Restore adjusted LR_irq from IRQ stack
directly in the PC
203 000000A8 0080FDE8 ldmia sp!, {pc}^
204 000000AC
205 000000AC ;-----------------------------------------------
-------------------------------
206 000000AC ;- Exception Vectors
207 000000AC ;-----------------------------------------------
-------------------------------
208 00000000 PUBLIC AT91F_Default_FIQ_handler
209 00000000 PUBLIC AT91F_Default_IRQ_handler
210 00000000 PUBLIC AT91F_Spurious_handler
211 000000AC
212 000000AC CODE32 ; Always ARM mode after
exeption
213 000000AC
214 000000AC AT91F_Default_FIQ_handler
215 000000AC FEFFFFEA b AT91F_Default_FIQ_handler
216 000000B0
217 000000B0 AT91F_Default_IRQ_handler
218 000000B0 FEFFFFEA b AT91F_Default_IRQ_handler
219 000000B4
220 000000B4 AT91F_Spurious_handler
221 000000B4 FEFFFFEA b AT91F_Spurious_handler
222 000000B8
223 000000B8 ENDMOD ;- Terminates the assembly of
the current module
223.1 000000B8 TABLE
223.2 000000B8 ........ Reference on line 79,101
223.3 000000BC ........ Reference on line 80
223.4 000000C0 ........ Reference on line 120
223.5 000000C4 ........ Reference on line 130
223.6 000000C8 ........ Reference on line 131
223.7 000000CC 00F0FFFF Reference on line 169,195
223 000000D0 ENDMOD ;- Terminates the assembly of
the current module
##############################
# CRC:63F0 #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 208 #
##############################
##############################
# CRC:63F0 #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 208 #
##############################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -