📄 interrupt.lst
字号:
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 #include p18c801.inc
00001 LIST
00002 ; P18C801.INC Standard Header File, Version 0.01 Microchip Technology, Inc.
00792 LIST
00002 #include app.inc
00001 ;Macros
00002 ;PUSH & POP process in low level interrupt
00003 lpush_all macro
00004 movff STATUS,PREINC1 ;STATUS
00005 movff BSR,PREINC1 ;BSR
00006 movwf PREINC1,0 ;WREG
00007 movff FSR2H,PREINC1 ;FSR2H
00008 movff FSR2L,PREINC1 ;FSR2L
00009 movff FSR0H,PREINC1 ;FSR0H
00010 movff FSR0L,PREINC1 ;FSR0L
00011 movff PRODH,PREINC1 ;PRODH
00012 movff PRODL,PREINC1 ;PRODL
00013 movff TBLPTRU,PREINC1 ;TBLPTRU
00014 movff TBLPTRH,PREINC1 ;TBLPTRH
00015 movff TBLPTRL,PREINC1 ;TBLPTRL
00016 movff TABLAT,PREINC1 ;TABLAT
00017 movff PCLATH,PREINC1 ;PCLATH
00018 movff PCLATU,PREINC1 ;PCLATU
00019 movf POSTINC1,0x01,0 ;FSR1L++
00020 ;
00021 ;Save 0x2B Registers in BANK-0 from 0x000-0x02A
00022 clrf FSR0H,0
00023 clrf FSR0L,0
00024 movlw SAVE_BANK0_PUSH_NUM
00025 IntPushRegsInBank0:
00026 movff POSTINC0,POSTINC1
00027 decf WREG,0
00028 bnz IntPushRegsInBank0
00029 endm
00030 ;===================================================
00031 lpop_all macro
00032 movf POSTDEC1,0x01,0 ;FSR1L--
00033 clrf FSR0H,0
00034 movlw SAVE_BANK0_PUSH_END
00035 movwf FSR0L,0
00036 movlw SAVE_BANK0_PUSH_NUM-1 ;except the last,to avoid under-stack
00037 IntPopRegsInBank0:
00038 movff POSTDEC1,POSTDEC0
00039 decf WREG,0
00040 bnz IntPopRegsInBank0
00041 movff POSTDEC1,INDF0
00042 ;
00043 movff POSTDEC1,PCLATU ;PCLATU
00044 movff POSTDEC1,PCLATH ;PCLATH
00045 movff POSTDEC1,TABLAT
00046 movff POSTDEC1,TBLPTRL
00047 movff POSTDEC1,TBLPTRH
00048 movff POSTDEC1,TBLPTRU
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00049 movff POSTDEC1,PRODL
00050 movff POSTDEC1,PRODH
00051 movff POSTDEC1,FSR0L
00052 movff POSTDEC1,FSR0H
00053 movff POSTDEC1,FSR2L
00054 movff POSTDEC1,FSR2H
00055 movf POSTDEC1,0x00,0
00056 movff POSTDEC1,BSR
00057 movff POSTDEC1,STATUS
00058 endm
00059
00060 ;PUSH & POP process in high level interrupt
00061 ;Saved reg: WREG, STATUS, BSR, TABLAT, TBLTRX
00062 ;Thus, no local variables can be used in the high level INT
00063 hpush_all macro
00064 movff WREG, WREG_SAVE
00065 movff STATUS, STATUS_SAVE
00066 movff BSR, BSR_SAVE
00067 movff TABLAT, TABLAT_SAVE
00068 movff TBLPTRL, TBLPTRL_SAVE
00069 movff TBLPTRH, TBLPTRH_SAVE
00070 movff TBLPTRU, TBLPTRU_SAVE
00071 ;movff PCLATH, PCLATH_SAVE
00072 ;movff PCLATU, PCLATU_SAVE
00073 endm
00074
00075 hpop_all macro
00076 ;movff PCLATU_SAVE, PCLATU
00077 ;movff PCLATH_SAVE, PCLATH
00078 movff TBLPTRU_SAVE, TBLPTRU
00079 movff TBLPTRH_SAVE, TBLPTRH
00080 movff TBLPTRL_SAVE, TBLPTRL
00081 movff TABLAT_SAVE, TABLAT
00082 movff BSR_SAVE, BSR
00083 movff STATUS_SAVE, STATUS
00084 movff WREG_SAVE, WREG
00085 endm
00086
00003 #define SAVE_BANK0_PUSH_END 0x37;0x2A
;0x000~~0x02A
00004 #define SAVE_BANK0_PUSH_NUM SAVE_BANK0_PUSH_END+1
00005
00006 ;GLOBAL HighLevelIsr
00007
0000 00008 EXTERN OSIntNesting
0000 00009 EXTERN LowLevelIntProc
0000 00010 EXTERN OSTimeTick
0000 00011 EXTERN Func_Receive_ISR
00012 ;EXTERN Timer1ISR
0000 00013 EXTERN OSIntExit
0000 00014 EXTERN intvec_h
0000 00015 EXTERN intvec_l
00016 ;Buffer left to save necessary registers
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00017 ASMDATA UDATA ;0x080
000000 00018 PCLATH_SAVE RES 1
000001 00019 PCLATU_SAVE RES 1
000002 00020 TBLPTRU_SAVE RES 1
000003 00021 TBLPTRH_SAVE RES 1
000004 00022 TBLPTRL_SAVE RES 1
000005 00023 TABLAT_SAVE RES 1
000006 00024 WREG_SAVE RES 1
000007 00025 BSR_SAVE RES 1
000008 00026 STATUS_SAVE RES 1
00027
00028 ;The entry to low priority interrupt
00029 LowInterruptVector org 0x18
000018 EF?? F??? 00030 goto LowInterruptHandler
00031
00032 ;The entry to high priority interrupt
00033 HighInterruptVector org 0x08
000008 EF?? F??? 00034 goto HighInterruptHandler
00035 ;========================================================
00036 ASMCODE CODE
00037 ;=======================================================
00038 ;Code begin here
000000 00039 LowInterruptHandler
00040 lpush_all
000000 CFD8 FFE4 M movff STATUS,PREINC1 ;STATUS
000004 CFE0 FFE4 M movff BSR,PREINC1 ;BSR
000008 6EE4 M movwf PREINC1,0 ;WREG
00000A CFDA FFE4 M movff FSR2H,PREINC1 ;FSR2H
00000E CFD9 FFE4 M movff FSR2L,PREINC1 ;FSR2L
000012 CFEA FFE4 M movff FSR0H,PREINC1 ;FSR0H
000016 CFE9 FFE4 M movff FSR0L,PREINC1 ;FSR0L
00001A CFF4 FFE4 M movff PRODH,PREINC1 ;PRODH
00001E CFF3 FFE4 M movff PRODL,PREINC1 ;PRODL
000022 CFF8 FFE4 M movff TBLPTRU,PREINC1 ;TBLPTRU
000026 CFF7 FFE4 M movff TBLPTRH,PREINC1 ;TBLPTRH
00002A CFF6 FFE4 M movff TBLPTRL,PREINC1 ;TBLPTRL
00002E CFF5 FFE4 M movff TABLAT,PREINC1 ;TABLAT
000032 CFFA FFE4 M movff PCLATH,PREINC1 ;PCLATH
000036 CFFB FFE4 M movff PCLATU,PREINC1 ;PCLATU
00003A 52E6 M movf POSTINC1,0x01,0 ;FSR1L++
M ;
M ;Save 0x2B Registers in BANK-0 from 0x000-0x02A
00003C 6AEA M clrf FSR0H,0
00003E 6AE9 M clrf FSR0L,0
000040 0E38 M movlw SAVE_BANK0_PUSH_NUM
000042 M IntPushRegsInBank0:
000042 CFEE FFE6 M movff POSTINC0,POSTINC1
000046 04E8 M decf WREG,0
000048 E1?? M bnz IntPushRegsInBank0
00041
00004A 01?? 00042 MOVLB high OSIntNesting
00004C 2B00 00043 incf OSIntNesting,0x01,1
00044 ;===================================================
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00045 ;Process all the low level interrupt except for TMR1
00004E EC?? F??? 00046 call LowLevelIntProc
00047 ;===================================================
000052 00048 TIMER1_INT:
000052 A09E 00049 BTFSS PIR1,TMR1IF,0 ;0:TMR1IF. Skip if "1"
000054 D??? 00050 bra Restore_REGS
000056 909E 00051 bcf PIR1,0,0 ;PIR1bits.TMR1IF=0;
00052
000058 CFCE FFF3 00053 movff TMR1L,PRODL
00005C CFCF FFF4 00054 movff TMR1H,PRODH
000060 0EA0 00055 movlw 0xA0
000062 26F3 00056 addwf PRODL,0x01,0
000064 0EFB 00057 movlw 0xFB
000066 22F4 00058 addwfc PRODH,0x01,0
00059
000068 CFF4 FFCF 00060 movff PRODH,TMR1H
00006C CFF3 FFCE 00061 movff PRODL,TMR1L
000070 EC?? F??? 00062 call OSTimeTick
00063 ;Call other service for TMR1. For its vector is the first one,
00064 ; its ISR can be called like this
000074 D??? 00065 bra e1
000076 00066 e0:
000076 C??? FFFB 00067 movff intvec_l+2, PCLATU
00007A C??? FFFA 00068 movff intvec_l+1, PCLATH
00007E 0100 00069 movlb 0
000080 5100 00070 movf intvec_l, 0, 0x1
000082 6EF9 00071 movwf PCL,0
000084 00072 e1:
000084 D??? 00073 rcall e0
00074
00075
000086 00076 Restore_REGS:
000086 EC?? F??? 00077 call OSIntExit
00078 lpop_all
00008A 52E5 M movf POSTDEC1,0x01,0 ;FSR1L--
00008C 6AEA M clrf FSR0H,0
00008E 0E37 M movlw SAVE_BANK0_PUSH_END
000090 6EE9 M movwf FSR0L,0
000092 0E37 M movlw SAVE_BANK0_PUSH_NUM-1 ;except the last,to avoid under-stack
000094 M IntPopRegsInBank0:
000094 CFE5 FFED M movff POSTDEC1,POSTDEC0
000098 04E8 M decf WREG,0
00009A E1?? M bnz IntPopRegsInBank0
00009C CFE5 FFEF M movff POSTDEC1,INDF0
M ;
0000A0 CFE5 FFFB M movff POSTDEC1,PCLATU ;PCLATU
0000A4 CFE5 FFFA M movff POSTDEC1,PCLATH ;PCLATH
0000A8 CFE5 FFF5 M movff POSTDEC1,TABLAT
0000AC CFE5 FFF6 M movff POSTDEC1,TBLPTRL
0000B0 CFE5 FFF7 M movff POSTDEC1,TBLPTRH
0000B4 CFE5 FFF8 M movff POSTDEC1,TBLPTRU
0000B8 CFE5 FFF3 M movff POSTDEC1,PRODL
0000BC CFE5 FFF4 M movff POSTDEC1,PRODH
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000C0 CFE5 FFE9 M movff POSTDEC1,FSR0L
0000C4 CFE5 FFEA M movff POSTDEC1,FSR0H
0000C8 CFE5 FFD9 M movff POSTDEC1,FSR2L
0000CC CFE5 FFDA M movff POSTDEC1,FSR2H
0000D0 50E5 M movf POSTDEC1,0x00,0
0000D2 CFE5 FFE0 M movff POSTDEC1,BSR
0000D6 CFE5 FFD8 M movff POSTDEC1,STATUS
0000DA 0010 00079 retfie 0
00080
0000DC 00081 HighInterruptHandler
00082 hpush_all
0000DC CFE8 F??? M movff WREG, WREG_SAVE
0000E0 CFD8 F??? M movff STATUS, STATUS_SAVE
0000E4 CFE0 F??? M movff BSR, BSR_SAVE
0000E8 CFF5 F??? M movff TABLAT, TABLAT_SAVE
0000EC CFF6 F??? M movff TBLPTRL, TBLPTRL_SAVE
0000F0 CFF7 F??? M movff TBLPTRH, TBLPTRH_SAVE
0000F4 CFF8 F??? M movff TBLPTRU, TBLPTRU_SAVE
M ;movff PCLATH, PCLATH_SAVE
M ;movff PCLATU, PCLATU_SAVE
0000F8 EC?? F??? 00083 call Func_Receive_ISR
00084
00085 ; bra h1
00086 ;h0:
00087 ; movff intvec_h+2, PCLATU
00088 ; movff intvec_h+1, PCLATH
00089 ; movlb 0
00090 ; movf intvec_h, 0, 0x1
00091 ; movwf PCL,0
00092 ;h1:
00093 ; rcall h0
00094 hpop_all
M ;movff PCLATU_SAVE, PCLATU
M ;movff PCLATH_SAVE, PCLATH
0000FC C??? FFF8 M movff TBLPTRU_SAVE, TBLPTRU
000100 C??? FFF7 M movff TBLPTRH_SAVE, TBLPTRH
000104 C??? FFF6 M movff TBLPTRL_SAVE, TBLPTRL
000108 C??? FFF5 M movff TABLAT_SAVE, TABLAT
00010C C??? FFE0 M movff BSR_SAVE, BSR
000110 C??? FFD8 M movff STATUS_SAVE, STATUS
000114 C??? FFE8 M movff WREG_SAVE, WREG
000118 0010 00095 retfie 0
00096 ;=======================================================
00097 END
MPASM 03.50 Released INTERRUPT.ASM 7-16-2003 20:27:48 PAGE 6
SYMBOL TABLE
LABEL VALUE
A 00000000
A16 00000000
A17 00000001
A18 00000002
A19 00000003
ACCESS 00000000
ACKDT 00000005
ACKEN 00000004
ACKSTAT 00000006
AD0 00000000
AD1 00000001
AD10 00000002
AD11 00000003
AD12 00000004
AD13 00000005
AD14 00000006
AD15 00000007
AD2 00000002
AD3 00000003
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -