📄 os_18c801_a.lst
字号:
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;*******************************************************************************************************
*
00002 ; uC/OS-II
00003 ; The Real-Time Kernel
00004 ;
00005 ; Jean J. Labrosse
00006 ;
00007 ; Microchip PIC18C801 Specific code
00008 ;
00009 ;
00010 ; File : OS_18C801_A.ASM
00011 ; By : Weiming Zhang
00012 ; Data : Nov 30,2002
00013 ;*******************************************************************************************************
*
00014
00015 #include p18c801.inc
00001 LIST
00002 ; P18C801.INC Standard Header File, Version 0.01 Microchip Technology, Inc.
00792 LIST
00016 #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--
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
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
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
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00086
00017
00018 ;0x000~0x02A ----> Push to the system stack
00019 ;0x02B~0x02F ----> Move to external RAM directly
00020 ;Ext_Stack_Base ~ Ext_Stack_Base+SAVE_BANK0_START-1
----> Save the content of the hardware stack
00021 ;Ext_Stack_Base+SAVE_BANK0_START ~ Ext_Stack_Base+EXT_SOFT_STK_SHIFT-1 ----> Save GPRs in BANK0
00022 ;Ext_Stack_Base+EXT_SOFT_STK_SHIFT ~ Ext_Stack_Top
----> Save the system stack
00023
00024 #define EXT_SOFT_STK_SHIFT 0x60
00025 #define SAVE_BANK0_PUSH_END 0x37;0x2A
;0x000~~0x02A
00026 #define SAVE_BANK0_PUSH_NUM SAVE_BANK0_PUSH_END+1
00027
00028 #define TASK_HD_STK_PTR 3 ;hardware stack pointer:
00029
;0->empty;1->main()'s caller; 2->OSStart()'s; 3->OSStartHighRdy()'s
00030
00031 ;(0x000)~~(SAVE_BANK0_START-1) pushed to system stack
00032 ;(SAVE_BANK0_START)~~(SAVE_BANK0_END) saved in external RAM
00033
00034
00035 ;---------------- Modified if neccessary below ---------------------------------------------------------
-
00036 ;#define HDSTK_ONCHIP_EN
00037 ;MAX_TASKS EQU 0x10 ;16 tasks at total
00038 ;TASK_STK_BASE_ONCHIP_H EQU 0x01 ;OnChip soft-stack address: 0x100--...
00039 ;TASK_STK_BASE_ONCHIP_L EQU 0x00
00040 ;TASK_HD_STK_PTR EQU 3 ;hardware stack pointer:
00041 ;0->empty;1->main()'s ca
ller; 2->OSStart()'s; 3->OSStartHighRdy()'s
00042 ;---------------- Modified if neccessary above ---------------------------------------------------------
-
00043
00044
00045 ;EXT_HDSTK_ADDR_SHIFT EQU 0xC0
00046 ;SFSTK_DEPTH_ADDR_SHIFT EQU 0x18 ;shift_address of GPRs' depth
00047 ;HDSTK_DEPTH_ADDR_SHIFT EQU 0x19 ;shift_address of Hardware-stack's depth
00048
00049 ;MAX_ONCHIP_STACK_SFR EQU 0x1A ;26
00050 ;MAX_ONCHIP_STACK_SIZE EQU 0x1A ;26
00051
00052
00053
00054 ;GLOBAL OSTickISR
00055 ;GLOBAL LowInterruptHandler
0000 00056 GLOBAL OSStartHighRdy
0000 00057 GLOBAL OSCtxSw
0000 00058 GLOBAL OSIntCtxSw
00059 ; EXTERN _OSIntExit:FAR
00060 ; EXTERN _OSTimeTick:FAR
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00061 ; EXTERN _OSTaskSwHook:FAR
00062
00063 ; EXTERN _OSIntNesting:BYTE
00064 ; EXTERN _OSTickDOSCtr:BYTE
00065 ;EXTERN OSTCBCurSn ;Only used by myself (Weiming Zhang).
00066 ;EXTERN TxIntISR
0000 00067 EXTERN WriteTimer1
0000 00068 EXTERN OSTimeTick
0000 00069 EXTERN OSIntExit
00070 ;EXTERN TimerISR
00071
00072 ;EXTERN Func_Transmit_ISR
00073 ;EXTERN Func_INT2_ISR
00074 ;EXTERN Func_TMR0_ISR
00075 ;EXTERN Func_RB_ISR
00076 ;EXTERN Func_TMR2_ISR
00077
0000 00078 EXTERN pCurRxTail
00079 ;EXTERN intCurRxNum
0000 00080 EXTERN Func_Receive_ISR
00081 ; EXTERN TickPostSem
00082 ; EXTERN OSIntEnter
00083
00084
0000 00085 EXTERN OSPrioHighRdy,OSPrioCur
0000 00086 EXTERN OSTCBHighRdy,OSTCBCur
00087 ;Pay attention!
00088 ;If OSPrioCur,OSTCBHighRdy and OSTCBCur have the save "BSR" value???
0000 00089 EXTERN StackDepth ;Only used by myself (Weiming Zh
ang)
0000 00090 EXTERN OSSysStkBase; ;Only used by myself (Weiming Zhang)
0000 00091 EXTERN OSRunning
0000 00092 EXTERN OSIntNesting
00093
00094 ;*******************************************************************************************************
**
00095 ; START MULTITASKING
00096 ; void OSStartHighRdy(void)
00097 ;
00098 ; The stack frame is assumed to look as follows:
00099 ;
00100 ; OSTCBHighRdy->OSTCBStkPtr --> [FSR2H] (high memory)
00101 ; [FSR2L]
00102 ; [FSR1H]
00103 ; [FSR1L]
00104 ; [FSR0H]
00105 ; [FSR0L]
00106 ; [STKPTR]
00107 ; [BSR]
00108 ; [WREG]
00109 ; upper address of task code address(interrupt return address)
00110 ; high address of task code address(interrupt return address)
00111 ; low address of task code address(interrupt return address)
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00112 ; [STATUS]
00113 ; upper address of task code address
00114 ; high address of task code address
00115 ; low address of task code address
00116 ; upper address of 'pdata'
00117 ; high address of 'pdata'
00118 ; low address of 'pdata' (low memory)
00119 ;
00120 ; Note : OSStartHighRdy() MUST:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -