int_gfd.s

来自「关于嵌入式的串口通信程序」· S 代码 · 共 81 行

S
81
字号
    AREA INT, CODE, READONLY                                                     
    IMPORT RST_DO
    ENTRY    
    
    bal		RST_DO  
    bal		EXTENT_INSTRU
    bal		SWI_DO
    bal		ABORT_PREFETCH_DO
    bal		ABORT_DATA_DO
    mov 	R1,    R1				;reserved exception
    bal		IRQ_DO
    bal		FIQ_DO   
    ldr		pc,=IRQ_DO
    
    
IRQ_DO      
	
	stmfd	sp!, {r0,r1}

	ldr		r0, =0x0
	str		r1, [r0]
	
	ldmfd	sp!, {r0}
	ldr		r1, =0x0
	str		r0, [r1]
	
	add		r13, r13, #4		    ; restore the sp_irq top to original irq top
	
	sub		r14, r14, #4
	mov		r0, r14
	
	mrs		r1, spsr
	orr		r1, r1, #0x80
	msr		cpsr_cxsf, r1		    ; change irq mode into svc
;------------------------------------------------	
	bic		r1, r1, #0x80		    ; open the irq 
	
	stmfd	sp!, {r0}
	stmfd	sp!, {r14}
	stmfd	sp!, {r1}
	
	ldr		r0, =0x0
	ldr		r1, [r0]
	stmfd	sp!, {r1}
		
	ldr		r1, =0x0
	ldr		r0, [r1]
	stmfd	sp!, {r0}
	
	ldmfd	sp!, {r0,r1}
	stmfd	sp!, {r0-r12}		    ; save the registers r0--r12

;-----------------------------      ; search the irq vector and jump to isr
	IMPORT	IntVectorHandler
	bl		IntVectorHandler

;-----------------------------      ; restore the register
	ldmfd	sp!, {r0-r12}
	ldmfd	sp!, {r14}
	msr		cpsr_cxsf, r14
	ldmfd	sp!, {r14}
	ldmfd	sp!, {pc}

EXTENT_INSTRU
    b    EXTENT_INSTRU
	                                                                  
SWI_DO
    stmfd	sp!, {r14}
    ldmfd	sp!, {pc}^
	                                                                  
ABORT_PREFETCH_DO
    b    ABORT_PREFETCH_DO
	                                                                  
ABORT_DATA_DO
    b    ABORT_DATA_DO
                                                            
FIQ_DO  
                                                           
    b    FIQ_DO

    END

⌨️ 快捷键说明

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