irq.s
来自「基于三星44B0的数码管-MDK程序」· S 代码 · 共 46 行
S
46 行
NoInt EQU 0x80
USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11
CODE32
AREA IRQ,CODE,READONLY
MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function
EXPORT $IRQ_Label
IMPORT $IRQ_Exception_Function
$IRQ_Label
SUB LR, LR, #4 ; Calculate the returning address
STMFD SP!, {R0-R3, R12, LR} ; Protects the task environments
MRS R3, SPSR ; Protects the status variable
STMFD SP, {R3,LR}^ ; Protects SPSR and SP in user status, Notice: DO NOT write back.
; If the SP is written back, it should be adjusted to its appropriate value later.
NOP
SUB SP, SP, #4*2
MSR CPSR_c, #(NoInt | SYS32Mode) ; Switch to the System Mode
BL $IRQ_Exception_Function ; call the C interrupt handler funtion
MSR CPSR_c, #(NoInt | IRQ32Mode) ; Switch bak to IRQ mode
LDMFD SP, {R3,LR}^ ; Recover SPSR and SP in user status, Notic: DO NOT write back.
; If the SP is written back, it should be adjusted to its appropriate value later.
MSR SPSR_cxsf, R3
ADD SP, SP, #4*2 ;
LDMFD SP!, {R0-R3, R12, PC}^ ;
MEND
;Timer0_Handler HANDLER Timer0
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?