📄 exint_isr.s
字号:
BIT_TIMER0 EQU (0x1<<13)
BIT_GLOBAL EQU (0x1<<26)
I_ISPC EQU 0x1e00024
INTMSK EQU 0x1e0000c
EXTINTPND EQU 0x1d20054
BIT_EINT4567 EQU (0x1<<21);#define BIT_EINT4567 (0x1<<21)
AREA |C$$code|, CODE, READONLY
IMPORT need_to_swap_context
IMPORT EXINT4isr
IMPORT IrqStart
IMPORT IrqFinish
IMPORT _CON_SW
IMPORT _NOT_CON_SW
EXPORT EXINT4_ISR
EXINT4_ISR
STMDB sp!,{r0-r11,lr} ;=push lr, r0-r11-->sp
;interrupt disable(not nessary)
mrs r0, CPSR ; r0=CPSR
orr r0, r0, #0x80 ; and set IRQ disable flag
msr CPSR_cxsf, R0 ; CPSR_cxsf=R0
;End of interrupt
;(Clear pending bit of INTPEND that don't accessed it.)
;rEXTINTPND=0xf; //clear EXTINTPND reg.
LDR R0, =EXTINTPND
MOV R1, #0x0f
STR R1, [R0]
LDR r0, =I_ISPC
LDR r1, =BIT_EINT4567;clr INT_TIMER0 pending bit
STR r1, [r0]
LDR R0, =INTMSK
LDR R2, [R0]
LDR R1, =BIT_EINT4567
ORR R2, R1, R2
LDR R1, =BIT_TIMER0
ORR R2, R1, R2
STR R2, [R0]
BL IrqStart
BL EXINT4isr
BL IrqFinish
LDR r0, =need_to_swap_context
LDR r2, [r0] ;ldr: memory to register,r2=need_to_swap_context
CMP r2, #1
LDREQ pc, =_CON_SW;if equal,then switch context
LDR pc, =_NOT_CON_SW
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -