⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_timer.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 3 页
字号:
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 12)
        ; Saved register size: 12
        ; Auto size: 0
        MOV	A,R1
        MOV	R4,A
        MOV	A,R2
        MOV	R5,A
        MOV	A,R3
        MOV	R6,A
//  192     UINT8 prevCallback;
//  193     UINT8 currCallback;
//  194     UINT8 nextCallback;
//  195 
//  196     DISABLE_GLOBAL_INT();
        CLR	0xa8.7
//  197 
//  198 	prevCallback = NO_CALLBACK;
        MOV	?V0 + 2,#-0x1
//  199 	currCallback = firstCallback;
        MOV	A,firstCallback
        MOV	R7,A
        SJMP	??mtimCancelCallback_0
//  200 	while (currCallback != NO_CALLBACK) {
//  201 		nextCallback = pMtimCallbacks[currCallback].nextCallback;
//  202 		if ((pFunc == pMtimCallbacks[currCallback].pFunc) && pMtimCallbacks[currCallback].occupied) {
//  203 
//  204             // Deactivate the entry
//  205 			pMtimCallbacks[currCallback].occupied = FALSE;
//  206 
//  207 			// Update the link on the callback before this entry
//  208 			if (prevCallback != NO_CALLBACK) {
//  209                 pMtimCallbacks[prevCallback].nextCallback = nextCallback;
//  210             }
//  211 
//  212 			// Update the link on the next callback entry
//  213 			if (nextCallback != NO_CALLBACK) {
//  214                 pMtimCallbacks[nextCallback].timeout += pMtimCallbacks[currCallback].timeout;
//  215             }
//  216 
//  217 			// Update the firstCallback flag if we cancelled it
//  218 			if (currCallback == firstCallback) {
//  219 				firstCallback = nextCallback;
//  220 			}
//  221 
//  222 			// Done :)
//  223 			ENABLE_GLOBAL_INT();
//  224 			return TRUE;
//  225 		}
//  226 
//  227 		// Move on to the next entry
//  228 		prevCallback = currCallback;
??mtimCancelCallback_1:
        MOV	?V0 + 2,R7
//  229 		currCallback = nextCallback;
        MOV	R7,?V0 + 4
??mtimCancelCallback_0:
        MOV	A,#-0x1
        XRL	A,R7
        JNZ	$+5
        LJMP	??mtimCancelCallback_2
        MOV	A,R7
        MOV	B,#0x9
        MUL	AB
        MOV	R0,A
        ADD	A,#0x0
        MOV	A,B
        ADDC	A,#-0x20
        MOV	R1,A
        MOV	?V0 + 1,R1
        MOV	DPL,R0
        MOV	DPH,A
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	?V0 + 4,A
        MOV	DPL,R0
        MOV	DPH,R1
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        LCALL	?G_EQ
        JNZ	??mtimCancelCallback_1
        MOV	A,R0
        ADD	A,#0x5
        MOV	DPL,A
        MOV	A,?V0 + 1
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        JZ	??mtimCancelCallback_1
        CLR	A
        MOVX	@DPTR,A
        MOV	A,#-0x1
        XRL	A,?V0 + 2
        JZ	??mtimCancelCallback_3
        MOV	A,?V0 + 2
        MOV	B,#0x9
        MUL	AB
        ADD	A,#0x4
        MOV	DPL,A
        MOV	A,B
        ADDC	A,#-0x20
        MOV	DPH,A
        MOV	A,?V0 + 4
        MOVX	@DPTR,A
??mtimCancelCallback_3:
        MOV	A,#-0x1
        XRL	A,?V0 + 4
        JZ	??mtimCancelCallback_4
        MOV	DPL,R0
        MOV	DPH,?V0 + 1
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	A,?V0 + 4
        MOV	B,#0x9
        MUL	AB
        ADD	A,#0x0
        MOV	DPL,A
        MOV	A,B
        ADDC	A,#-0x20
        MOV	DPH,A
        MOV	R0,#?V0 + 0
        LCALL	?L_ADD_TO_X
??mtimCancelCallback_4:
        MOV	A,firstCallback
        XRL	A,R7
        JNZ	??mtimCancelCallback_5
        MOV	firstCallback,?V0 + 4
??mtimCancelCallback_5:
        SETB	0xa8.7
        MOV	R1,#0x1
        SJMP	??mtimCancelCallback_6
//  230 	}
//  231 	ENABLE_GLOBAL_INT();
??mtimCancelCallback_2:
        SETB	0xa8.7
//  232 	return FALSE;
        MOV	R1,#0x0
??mtimCancelCallback_6:
        MOV	R7,#0x5
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  233 } // mtimCancelCallback
//  234 
//  235 
//  236 
//  237 
//  238 //-------------------------------------------------------------------------------------------------------
//  239 //  void mtimAlignWithBeacon(TIMESTAMP   *pTimestamp)
//  240 //
//  241 //  DESCRIPTION:
//  242 //      Adjusts the timer to the last received packet (which should be a beacon!)
//  243 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  244 ROOT void mtimAlignWithBeacon(TIMESTAMP   *pTimestamp) {
mtimAlignWithBeacon:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function mtimAlignWithBeacon
        FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        MOV	A,#-0xf
        LCALL	?FUNC_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 15)
        ; Saved register size: 15
        ; Auto size: 0
        MOV	A,R2
        MOV	R6,A
        MOV	A,R3
        MOV	R7,A
//  245 
//  246     // Adjust the timestamp for extra 1/4 symbol RX/TX chain delay
//  247     pTimestamp->counter -= TRANSMITTER_DELAY;
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        ADD	A,#-0x45
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	A,@DPTR
        ADDC	A,#-0x1
        MOVX	@DPTR,A
        MOV	DPL,R6
        MOV	DPH,R7
        CLR	C
        MOVX	A,@DPTR
        SUBB	A,#0x0
        INC	DPTR
        MOVX	A,@DPTR
        SUBB	A,#0x0
        MOV	C,0xD0 /* PSW */.2
        XRL	A,PSW
        RLC	A
        JNC	??mtimAlignWithBeacon_0
//  248     if (pTimestamp->counter < 0) {
//  249         pTimestamp->counter += TIMER2_BACKOFF_SLOT_COUNTER_VALUE;
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        ADD	A,#0x0
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	A,@DPTR
        ADDC	A,#0x28
        MOVX	@DPTR,A
//  250         pTimestamp->overflowCounter--;
        MOV	DPTR,#__Constant_ffffffff
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOV	R0,#?V0 + 0
        LCALL	?L_ADD_TO_X
//  251     }
//  252 
//  253     // Update the MAC timer
//  254     T2_SET_OVERFLOW_COUNTER(T2_GET_OVERFLOW_COUNTER() - pTimestamp->overflowCounter);
??mtimAlignWithBeacon_0:
        ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
        MOV	DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
        MOV	A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOV	R0,#?V0 + 4
        LCALL	?L_MOV_X
        MOV	A,R2
        CLR	C
        SUBB	A,?V0 + 4
        MOV	0xa1,A
        ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
        MOV	DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
        MOV	A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	A,R2
        CLR	C
        SUBB	A,?V0 + 0
        MOV	A,R3
        SUBB	A,?V0 + 1
        MOV	0xa2,A
        ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
        MOV	DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
        MOV	A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	?V0 + 2,R4
        MOV	?V0 + 3,R5
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOV	R0,#?V0 + 0
        LCALL	?L_SUB_X
        MOV	A,#0x10
        MOV	R0,#?V0 + 0
        LCALL	?UL_SHR
        MOV	A,?V0 + 0
        MOV	0xa3,A
//  255     T2_SET_COUNTER_DELTA_DELAY(pTimestamp->counter);
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        MOV	0xa6,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	0xa7,A
//  256 
//  257     // Update the "CAP is active" indicator (used by the TX engine)
//  258     T2_SET_OVERFLOW_COUNTER_COMPARE_VALUE(msupCalcCapDuration());
        ; Setup parameters for call to function msupCalcCapDuration
        LCALL	msupCalcCapDuration
        MOV	A,R2
        MOV	0x9c,A
        ; Setup parameters for call to function msupCalcCapDuration
        LCALL	msupCalcCapDuration
        MOV	A,R3
        MOV	0x9d,A
        MOV	A,0x9e
        MOV	R6,A
        ; Setup parameters for call to function msupCalcCapDuration
        LCALL	msupCalcCapDuration
        MOV	A,R4
        ANL	A,#0xf
        PUSH	A
        CFI CFA_SP SP+-1
        MOV	A,#-0x10
        ANL	A,R6
        MOV	R2,A
        POP	A
        CFI CFA_SP SP+0
        ORL	A,R2
        MOV	0x9e,A
//  259     T2_SET_CAP_ACTIVE();
        ANL	0xc3,#0xdf
//  260 
//  261 } // mtimAlignWithBeacon
        LJMP	?Subroutine0
        CFI EndBlock cfiBlock4
//  262 
//  263 
//  264 //-------------------------------------------------------------------------------------------------------
//  265 //  void mtimStartSync (void)
//  266 //
//  267 //  DESCRIPTION:
//  268 //      Start Timer2 in synchronous mode.  The routine waits until Timer2 has started
//  269 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  270 ROOT void mtimStartSync (void)
mtimStartSync:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function mtimStartSync
//  271 {
        ; Saved register size: 0
        ; Auto size: 0
//  272     BYTE  timer2Started;
//  273 
//  274     T2_START_SYNC();
        ORL	0xc3,#0x2
        ORL	0xc3,#0x1
//  275     do
//  276     {
//  277         timer2Started = T2CNF & TIMER2_RUN_BM;
??mtimStartSync_0:
        MOV	A,0xc3
        MOV	C,0xE0 /* A   */.0
        CLR	A
        MOV	0xE0 /* A   */.0,C
//  278     }while (timer2Started == 0);
        JZ	??mtimStartSync_0
//  279 }
        RET
        CFI EndBlock cfiBlock5

        RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_0:
        DS 4
        REQUIRE `?<Initializer for __Constant_0>`
        REQUIRE __INIT_XDATA_I

        RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_0>`:
        DD 0

        RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_ffffffff:
        DS 4
        REQUIRE `?<Initializer for __Constant_ffffffff>`
        REQUIRE __INIT_XDATA_I

        RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_ffffffff>`:
        DD 4294967295

        ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
        DS 1

        ASEGN SFR_AN:DATA:NOROOT,0c0H
// union <unnamed> volatile __sfr _A_IRCON
_A_IRCON:
        DS 1

        END
// 
//   2 bytes in segment DATA_Z
// 948 bytes in segment NEAR_CODE
//  11 bytes in segment PM0_XDATA
//  14 bytes in segment SFR_AN
// 108 bytes in segment XDATA_AN
//   8 bytes in segment XDATA_I
//   8 bytes in segment XDATA_ID
// 
// 948 bytes of CODE  memory (+   8 bytes shared)
//   2 bytes of DATA  memory (+  14 bytes shared)
//  11 bytes of XDATA memory (+ 116 bytes shared)
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -