📄 int_gfd.s
字号:
include asm.h
AREA INT, CODE, READONLY
ENTRY ; Mark first instruction to execute
;*****************************************************************
; vector table
;*****************************************************************
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
mov r0, r0
;bal FIQ_DO
ldr pc,=IRQ_DO
;***************************************************************
; Interrupt handler
;***************************************************************
IRQ_DO
stmfd sp!, {r0,r1}
ldr r0, =IRQ_R1
str r1, [r0]
ldmfd sp!, {r0}
ldr r1, =IRQ_R0
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, =IRQ_R1
ldr r1, [r0]
stmfd sp!, {r1}
ldr r1, =IRQ_R0
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 int_vector_handler
bl int_vector_handler
;-----------------------------;//restore the register
ldmfd sp!, {r0-r12}
ldmfd sp!, {r14}
msr cpsr_cxsf, r14
ldmfd sp!, {r14}
ldmfd sp!, {pc}
;***********************************************************
;* other exception handler
;***********************************************************
IMPORT RST_DO
b RST_DO
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
;*************************************************************
IRQ_R1 DCD 0X0
IRQ_R0 DCD 0X0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -