⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.l

📁 mpc8260 fcc ethernet code
💻 L
📖 第 1 页 / 共 2 页
字号:
  00000018 00                   195 	
  00000018 00                   196 	
  00000018 00                   197 	#-------------------------------------------------
  00000018 00                   198 	# Special Purpose Register Indices for SRR0, SRR1
  00000018 00                   199 	#-------------------------------------------------
  00000018 00                   200 	
  00000018 00                   201 	 SRR0:    .equ      26    # Save/Restore Register 0
  00000018 00                   202 	 SRR1:    .equ      27    # Save/Restore Register 1
  00000018 00                   203 	
  00000018 00                   204 	#*****************************************************************************
  00000018 00                   205 	# This is the external interrupts vector table entry for the MPC8xx.
  00000018 00                   206 	# This code is setup for handling non-reentrant external interrupts.
  00000018 00                   207 	#
  00000018 00                   208 	# The following are the steps, in order, taken by the External Interrupt
  00000018 00                   209 	# Table Code:
  00000018 00                   210 	# 1) Save following Registers:  gpr0, gpr3-gpr12, CR, XER, LR, CTR
  00000018 00                   211 	#    on stack as necessary to preserve user state across the interrupt
  00000018 00                   212 	#    handler.  Save SRR0, SRR1 to provide breakpoint/debug support for
  00000018 00                   213 	#    Interrupt Code.
  00000018 00                   214 	# 2) The exception vector (0x500) is saved in register r3.
  00000018 00                   215 	# 3) Absolute Branch and Link to C routine to complete interrupt processing.
  00000018 00                   216 	# 4) Restore Registers in (1) from stack.
  00000018 00                   217 	# 5) Execute rfi instruction to return from supervisor-state interrupt handler.
  00000018 00                   218 	#*****************************************************************************
  00000018 00                   219 	
  00000018 00                   220 	 .text
  00000018 00                   221 	ExtIntTable:
  00000018 00                   222 	
  00000018 00                   223 	#-----------------------------------------------------
  00000018 00                   224 	# Save USER State
  00000018 00                   225 	#-----------------------------------------------------
  00000018 00                   226 	
  00000018 00                   227 	#-----------------------------------------------------
  00000018 00                   228 	# Save r0 -- Volatile Register
  00000018 00                   229 	# Update SP (r1) (Allocate Interrupt STACK frame)
  00000018 00                   230 	#-----------------------------------------------------
  00000018 00                   231 	
  00000018 00  9401 ffb0        232 	    stwu	r0, -STACK_SZ+R0_OFFSET(r1)
  0000001c 00                   233 	
  0000001c 00                   234 	#---------------------------------------------------------------
  0000001c 00                   235 	# Save SRR0, SRR1
  0000001c 00                   236 	# NOTE:  DO NOT Trace or Set Breakpoint Before SRR0, SRR1 Saved
  0000001c 00                   237 	#---------------------------------------------------------------
  0000001c 00                   238 	
  0000001c 00  7c1a 02a6        239 	    mfspr	r0, SRR0
  00000020 00  9001 0034        240 	    stw	r0, SRR0_OFFSET(r1)
  00000024 00  7c1b 02a6        241 	    mfspr	r0, SRR1
  00000028 00  9001 0038        242 	    stw	r0, SRR1_OFFSET(r1)
  0000002c 00                   243 	
  0000002c 00                   244 	#--------------------------------------------
  0000002c 00                   245 	# Save r3-r12 -- Volatile Registers
  0000002c 00                   246 	#--------------------------------------------
  0000002c 00                   247 	
  0000002c 00  9061 000c        248 	    stw	r3,  R3_OFFSET(r1)    # Store r3
  00000030 00  9081 0010        249 	    stw	r4,  R4_OFFSET(r1)    # Store r4
  00000034 00  90a1 0014        250 	    stw	r5,  R5_OFFSET(r1)    # Store r5
  00000038 00  90c1 0018        251 	    stw	r6,  R6_OFFSET(r1)    # Store r6
  0000003c 00  90e1 001c        252 	    stw	r7,  R7_OFFSET(r1)    # Store r7
  00000040 00  9101 0020        253 	    stw	r8,  R8_OFFSET(r1)    # Store r8
  00000044 00  9121 0024        254 	    stw	r9,  R9_OFFSET(r1)    # Store r9
  00000048 00  9141 0028        255 	    stw	r10, R10_OFFSET(r1)   # Store r10
  0000004c 00  9161 002c        256 	    stw	r11, R11_OFFSET(r1)   # Store r11
  00000050 00  9181 0030        257 	    stw	r12, R12_OFFSET(r1)   # Store r12
  00000054 00                   258 	
  00000054 00                   259 	#----------------
  00000054 00                   260 	# Store LR
  00000054 00                   261 	#----------------
  00000054 00                   262 	
  00000054 00  7c08 02a6        263 	    mflr	r0
  00000058 00  9001 003c        264 	    stw	r0, LR_OFFSET(r1)
  0000005c 00                   265 	
  0000005c 00                   266 	#----------------
  0000005c 00                   267 	# Save CTR
  0000005c 00                   268 	#----------------
  0000005c 00                   269 	
  0000005c 00  7c09 02a6        270 	    mfctr   r0
  00000060 00  9001 0040        271 	    stw	r0, CTR_OFFSET(r1)
  00000064 00                   272 	
  00000064 00                   273 	#----------------
  00000064 00                   274 	# Save XER
  00000064 00                   275 	#----------------
  00000064 00                   276 	
  00000064 00  7c01 02a6        277 	    mfxer   r0
  00000068 00  9001 0044        278 	    stw	r0, XER_OFFSET(r1)
  0000006c 00                   279 	
  0000006c 00                   280 	#----------------
  0000006c 00                   281 	# Save CR
  0000006c 00                   282 	#----------------
  0000006c 00                   283 	
  0000006c 00  7c00 0026        284 	    mfcr	r0
  00000070 00  9001 0048        285 	    stw	r0, CR_OFFSET(r1)
  00000074 00                   286 	
  00000074 00                   287 	#----------------------------------
  00000074 00                   288 	# Allocate C FRAME (1-Quad Word)
  00000074 00                   289 	#----------------------------------
  00000074 00                   290 	
  00000074 00  3821 fff0        291 	    subi	r1,r1,C_FRAME_SZ
  00000078 00                   292 	
  00000078 00                   293 	#----------------------------------------------------
  00000078 00                   294 	# Place External Interrupt Vector in r3
  00000078 00                   295 	#----------------------------------------------------
  00000078 00                   296 	
  00000078 00  3860 0500        297 	    addi	r3,r0,EXTERNAL_INTERRUPT_VECTOR
  0000007c 00                   298 	
  0000007c 00                   299 	#----------------------------------------------------
  0000007c 00                   300 	# Execute external interrupt handler
  0000007c 00                   301 	#----------------------------------------------------
  0000007c 00                   302 	
  0000007c 00  4800 0003        303 	    bla ExtIntHandler
  00000080 00                   304 	
  00000080 00                   305 	#----------------------------------------------------
  00000080 00                   306 	# Restore USER State
  00000080 00                   307 	#----------------------------------------------------
  00000080 00                   308 	
  00000080 00                   309 	#----------------------------------------------------
  00000080 00                   310 	# Deallocate C FRAME (1-Quad Word)
  00000080 00                   311 	#----------------------------------------------------
  00000080 00                   312 	
  00000080 00  3821 0010        313 	    addi	r1,r1,C_FRAME_SZ
  00000084 00                   314 	
  00000084 00                   315 	#--------------
  00000084 00                   316 	# Restore CR
  00000084 00                   317 	#--------------
  00000084 00                   318 	
  00000084 00  8001 0048        319 	    lwz	r0, CR_OFFSET(r1)
  00000088 00  7c0f f120        320 	    mtcrf	0xff,r0
  0000008c 00                   321 	
  0000008c 00                   322 	#--------------
  0000008c 00                   323 	# Restore XER
  0000008c 00                   324 	#--------------
  0000008c 00                   325 	
  0000008c 00  8001 0044        326 	    lwz	r0, XER_OFFSET(r1)
  00000090 00  7c01 03a6        327 	    mtxer   r0
  00000094 00                   328 	
  00000094 00                   329 	#--------------
  00000094 00                   330 	# Restore CTR
  00000094 00                   331 	#--------------
  00000094 00                   332 	
  00000094 00  8001 0040        333 	    lwz	r0, CTR_OFFSET(r1)
  00000098 00  7c09 03a6        334 	    mtctr   r0
  0000009c 00                   335 	
  0000009c 00                   336 	#-------------
  0000009c 00                   337 	# Restore LR
  0000009c 00                   338 	#-------------
  0000009c 00                   339 	
  0000009c 00  8001 003c        340 	    lwz	r0, LR_OFFSET(r1)
  000000a0 00  7c08 03a6        341 	    mtlr	r0
  000000a4 00                   342 	
  000000a4 00                   343 	#--------------------------------------
  000000a4 00                   344 	# Restore r12-r3 -- Volatile Registers
  000000a4 00                   345 	#--------------------------------------
  000000a4 00                   346 	
  000000a4 00  8181 0030        347 	    lwz	r12, R12_OFFSET(r1)   # Store r12
  000000a8 00  8161 002c        348 	    lwz	r11, R11_OFFSET(r1)   # Store r11
  000000ac 00  8141 0028        349 	    lwz	r10, R10_OFFSET(r1)   # Store r10
  000000b0 00  8121 0024        350 	    lwz	r9,  R9_OFFSET(r1)    # Store r9
  000000b4 00  8101 0020        351 	    lwz	r8,  R8_OFFSET(r1)    # Store r8
  000000b8 00  80e1 001c        352 	    lwz	r7,  R7_OFFSET(r1)    # Store r7
  000000bc 00  80c1 0018        353 	    lwz	r6,  R6_OFFSET(r1)    # Store r6
  000000c0 00  80a1 0014        354 	    lwz	r5,  R5_OFFSET(r1)    # Store r5
  000000c4 00  8081 0010        355 	    lwz	r4,  R4_OFFSET(r1)    # Store r4
  000000c8 00  8061 000c        356 	    lwz	r3,  R3_OFFSET(r1)    # Store r3
  000000cc 00                   357 	
  000000cc 00                   358 	#-----------------------------------------------------------------
  000000cc 00                   359 	# Save SRR1, SRR0
  000000cc 00                   360 	# NOTE:  DO NOT Trace or Set Breakpoint After SRR1, SRR0 Restored
  000000cc 00                   361 	#-----------------------------------------------------------------
  000000cc 00                   362 	
  000000cc 00  8001 0038        363 	    lwz	r0, SRR1_OFFSET(r1)
  000000d0 00  7c1b 03a6        364 	    mtspr	SRR1, r0
  000000d4 00                   365 	
  000000d4 00  8001 0034        366 	    lwz	r0, SRR0_OFFSET(r1)
  000000d8 00  7c1a 03a6        367 	    mtspr	SRR0, r0
  000000dc 00                   368 	
  000000dc 00                   369 	#---------------------------------------------------
  000000dc 00                   370 	# Restore r0 -- Volatile Register
  000000dc 00                   371 	# Update SP (r1) (Deallocate Interrupt STACK frame)
  000000dc 00                   372 	#---------------------------------------------------
  000000dc 00                   373 	
  000000dc 00  8001 0000        374 	    lwz	r0, R0_OFFSET(r1)
  000000e0 00  3821 0050        375 	    addi	r1, r1, STACK_SZ        
  000000e4 00                   376 	
  000000e4 00                   377 	# ----------------------------------------------------
  000000e4 00                   378 	# Return from interrupt handler in supervisor state to user code
  000000e4 00                   379 	# ----------------------------------------------------
  000000e4 00                   380 	
  000000e4 00  4c00 0064        381 	    rfi
  000000e8 00                   382 	
  000000e8 00  0000 0040        383 	 .word 64   # pad space
  000000ec 00                   384 	
  000000ec 00                   385 	
  000000ec 00                   386 	


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -