📄 pie.asm
字号:
; Testcase to demonstrate the Peripheral Interrupt Exception (PIE).
.def _OSStartHighRdy
.def _OSIntCtxSw
.def _OSCtxSw
.def _OST1PINT_ISR
.def _OSCAPINT3_ISR
.def _OSMRINTA_ISR
.def _OSSCIRXINTA_ISR
.def _OSSCITXINTA_ISR
.def _OSSCIRXINTB_ISR
.def _OSSCITXINTB_ISR
.def _OSECAN1INTA_ISR
.ref _Tasks_Stk
.ref _OSTCBCur
.ref _OSTCBHighRdy
.ref _OSPre
.ref _OSPreSP
.ref _OSPrioCur
.ref _OSPrioHighRdy
.ref _OSIntNesting
.ref _OSIntExit
.ref _OSTimeTick
.ref _OSRunning
.ref _OSInterrupt
.ref _T1PINT_ISR
.ref _CAPINT3_ISR
.ref _MRINTA_ISR
.ref _SCIRXINTA_ISR
.ref _SCITXINTA_ISR
.ref _SCIRXINTB_ISR
.ref _SCITXINTB_ISR
.ref _ECAN1INTA_ISR
; -------------------------------------------------------
; PIE Interrupt Service Routines
; -------------------------------------------------------
.sect "pie_isr"
; -------------------------------------------------------
; PIE Interrupts 1 - 8 are in Group 1 (Core INT1)
; -------------------------------------------------------
.word
_OST1PINT_ISR: ; int 12 of 96
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _T1PINT_ISR
LCR _OSTimeTick
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSCAPINT3_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _CAPINT3_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSMRINTA_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _MRINTA_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSSCIRXINTA_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _SCIRXINTA_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSSCITXINTA_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _SCITXINTA_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSSCIRXINTB_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _SCIRXINTB_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSSCITXINTB_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _SCITXINTB_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSECAN1INTA_ISR:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
MOVL XAR3,#_OSIntNesting
INC *XAR3
LCR _ECAN1INTA_ISR
LCR _OSIntExit
SETC INTM
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSCtxSw:
ASP
PUSH AR1H:AR0H
PUSH XAR2
PUSH XAR3
PUSH XAR4
PUSH XAR5
PUSH XAR6
PUSH XAR7
PUSH XT
PUSH RPC
PUSH ST1:DP
restore1:
MOVL XAR3,#_OSTCBCur
MOVL XAR3,*XAR3
MOV AL,SP
MOV *XAR3,AL
MOV AR5,AL
MOVL XAR3,#_OSTCBHighRdy
MOVL XAR3,*XAR3
MOVL XAR4,#_OSTCBCur
MOVL *XAR4,XAR3
MOV AL,*XAR3
MOV SP,AL
MOVL XAR3,#_OSPrioHighRdy
MOV AL,*XAR3
CMPB AL,#0x0
SB task0_entry,EQ
MOVL XAR3,#_OSPrioCur
MOV AH,*XAR3
MOV *XAR3,AL
MOV AR7,AL
MOV AR6,AH
CMPB AH,#0x0
SB stk_change,NEQ
MOVL XAR4,#_OSPre
MOV AH,*XAR4
CMPB AH,#0x0
SB change_in,EQ
MOV AR0,AH
BAR pre_ready,AR7,AR0,NEQ
LB restore2
task0_entry:
MOVL XAR3,#_OSPrioCur
MOV AH,*XAR3
MOVL XAR4,#_OSPre
MOV *XAR4,AH
MOV *XAR3,AL
MOVL XAR3,#_OSPreSP
MOV AL,AR5
MOV *XAR3,AL
LB restore2
pre_ready:
MOVL XAR3,#_OSPre
MOV AL,*XAR3
MOV AR6,AL
MOVL XAR3,#_OSPreSP
MOV AL,*XAR3
MOV AR5,AL
stk_change:
MOVL XAR3,#_Tasks_Stk
MOVL ACC,XAR3
MOV AR0,#0x400
cal1_addr:
DEC AR6
SB store1_add,EQ
ADD ACC,AR0
LB cal1_addr
store1_add:
ADD ACC,AR5
SUB ACC,AR0
MOVL XAR3,ACC
MOV AL,AR5
MOV AH,AR5
ANDB AL,#1
SB start1_change,EQ
INC AH
start1_change:
MOVL XAR5,#0
MOV AR5,AH
change1:
BAR change_in,AR5,AR0,EQ
MOVL ACC,*--XAR5
MOVL *--XAR3,ACC
LB change1
change_in:
MOV AR0,#0x400
MOVL XAR3,#_Tasks_Stk
MOVL ACC,XAR3
cal2_addr:
DEC AR7
SB store2_add,EQ
ADD ACC,AR0
LB cal2_addr
store2_add:
ADD ACC,SP
SUB ACC,AR0
MOVL XAR3,ACC
MOV AL,SP
MOV AH,SP
ANDB AL,#1
SB start2_change,EQ
INC AH
start2_change:
MOVL XAR1,#0
MOV AR1,AH
change2:
BAR restore2,AR1,AR0,EQ
MOVL ACC,*--XAR3
MOVL *--XAR1,ACC
LB change2
restore2:
PUSH ST1
POP AL
AND AL,#0xffef
POP DP
POP AH
AND AH,#0x10
OR AL,AH
PUSH AL
POP ST1
POP RPC
POP XT
POP XAR7
POP XAR6
POP XAR5
POP XAR4
POP XAR3
POP XAR2
POP AR1H:AR0H
NASP
IRET
_OSStartHighRdy:
MOVL XAR3,#_OSTCBHighRdy
MOVL XAR3,*XAR3
MOV AL,*XAR3
MOV SP,AL
MOVL XAR3,#_OSRunning
OR *XAR3,#1
MOVL XAR3,#_OSInterrupt
OR *XAR3,#1
MOVL XAR3,#_OSPrioHighRdy
MOV AL,*XAR3
CMPB AL,#0x0
SB restore2,EQ
MOV AR7,AL
LB change_in
_OSIntCtxSw:
SUBB SP,#4
LB restore1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -