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

📄 mac_indirect_queue.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x5
        MOVX	@DPTR,A
//  491     pPacket->retriesLeft = 1;
        MOV	A,R6
        ADD	A,#-0x6f
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x1
        MOVX	@DPTR,A
//  492 
//  493     // Generate the packet header (and find security material, if enabled)
//  494     if (mpib.macShortAddress >= 0xFFFE) {
        MOV	DPTR,#(mpib + 32)
        CLR	C
        MOVX	A,@DPTR
        SUBB	A,#-0x2
        INC	DPTR
        MOVX	A,@DPTR
        SUBB	A,#-0x1
        MOV	A,?V0 + 2
        JC	??miqTransmitNoDataPacket_5
//  495         msupPrepareHeader(pPacket, FT_DATA, (isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT) | SRC_ADDR_EXT, mpib.macPANId, (ADDRESS  *) &aExtendedAddress, mpib.macPANId, pDestAddr, txOptions);
        JZ	??miqTransmitNoDataPacket_6
        MOV	?V0 + 4,#0xc
        SJMP	??miqTransmitNoDataPacket_7
??miqTransmitNoDataPacket_6:
        MOV	?V0 + 4,#0x8
??miqTransmitNoDataPacket_7:
        MOV	DPTR,#(mpib + 28)
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        ; Setup parameters for call to function msupPrepareHeader
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 15)
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	?V0 + 0,#(aExtendedAddress & 0xff)
        MOV	?V0 + 1,#((aExtendedAddress >> 8) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 19)
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 21)
        MOV	R5,#0x1
        MOV	A,?V0 + 4
        ORL	A,#0xc0
        SJMP	??miqTransmitNoDataPacket_8
        CFI CFA_XSP16 add(XSP16, 13)
//  496     } else {
//  497         msupPrepareHeader(pPacket, FT_DATA, (isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT) | SRC_ADDR_SHORT, mpib.macPANId, (ADDRESS  *) &mpib.macShortAddress, mpib.macPANId, pDestAddr, txOptions);
??miqTransmitNoDataPacket_5:
        JZ	??miqTransmitNoDataPacket_9
        MOV	?V0 + 4,#0xc
        SJMP	??miqTransmitNoDataPacket_10
??miqTransmitNoDataPacket_9:
        MOV	?V0 + 4,#0x8
??miqTransmitNoDataPacket_10:
        MOV	DPTR,#(mpib + 28)
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        ; Setup parameters for call to function msupPrepareHeader
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 15)
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	?V0 + 0,#((mpib + 32) & 0xff)
        MOV	?V0 + 1,#(((mpib + 32) >> 8) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 19)
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 21)
        MOV	R5,#0x1
        MOV	A,?V0 + 4
        ORL	A,#0x80
??miqTransmitNoDataPacket_8:
        MOV	R4,A
        MOV	R1,#0x1
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	msupPrepareHeader
        MOV	A,#0x8
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  498     }
//  499 
//  500     // Calculate and set the total packet length (TBD: will security ever be used / is it allowed by the spec?)
//  501 #if MAC_OPT_SECURITY
//  502     pPacket->length = pPacket->headerLength + pPacket->securitySetup.micLength + MAC_FCS_LENGTH;
//  503 #else
//  504     pPacket->length = pPacket->headerLength + MAC_FCS_LENGTH;
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        MOVX	A,@DPTR
        ADD	A,#0x2
        MOV	R1,A
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  505 #endif
//  506 
//  507     // Calculate the packet duration (including ack. and IFS)
//  508     pPacket->duration = msupCalcPacketDuration(pPacket->length, pPacket->txOptions & TX_OPT_ACK_REQ);
        ; Setup parameters for call to function msupCalcPacketDuration
        MOV	A,R6
        ADD	A,#-0x7f
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        MOV	C,0xE0 /* A   */.0
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R2,A
        LCALL	msupCalcPacketDuration
        MOV	A,R6
        ADD	A,#-0x7b
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,R1
        MOVX	@DPTR,A
//  509 
//  510     // Initiate the transmission
//  511     mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
        ; Setup parameters for call to function mschAddTask
        MOV	?V0 + 0,#(mtxScheduleTransmission & 0xff)
        MOV	?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
        MOV	?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 16)
        MOV	A,R6
        MOV	R4,A
        MOV	A,R7
        MOV	R5,A
        MOV	R2,#0x0
        MOV	R1,?V0 + 3
        LCALL	mschAddTask
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 13)
//  512 
//  513     return TRUE;
        MOV	R1,#0x1
??miqTransmitNoDataPacket_3:
        MOV	R7,#0x6
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock7
//  514 } // miqTransmitNoDataPacket
//  515 
//  516 
//  517 
//  518 
//  519 /*******************************************************************************************************
//  520  *******************************************************************************************************
//  521  **************************            INDIRECT PACKET EXPIRATION             **************************
//  522  *******************************************************************************************************
//  523  *******************************************************************************************************/
//  524 
//  525 
//  526 
//  527 
//  528 //-------------------------------------------------------------------------------------------------------
//  529 //  void miqDecrTimeToLive(void)
//  530 //
//  531 //  DESCRIPTION:
//  532 //      Decrements the "time to live" variable for all indirect packets, until it reaches zero
//  533 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  534 ROOT void miqDecrTimeToLive(void) {
miqDecrTimeToLive:
        CFI Block cfiBlock8 Using cfiCommon0
        CFI Function miqDecrTimeToLive
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        ; Saved register size: 2
        ; Auto size: 0
//  535     UINT8 n;
//  536     for (n = 0; n < MAC_OPT_TX_POOL_SIZE; n++) {
        MOV	R0,#((pMtxPacketPool + 137) & 0xff)
        MOV	R1,#(((pMtxPacketPool + 137) >> 8) & 0xff)
        MOV	R2,#0x6
//  537         DISABLE_GLOBAL_INT();
??miqDecrTimeToLive_0:
        CLR	0xa8.7
//  538         if (pMtxPacketPool[n].timeToLive > 0) pMtxPacketPool[n].timeToLive--;
        MOV	DPL,R0
        MOV	DPH,R1
        MOVX	A,@DPTR
        JNZ	??miqDecrTimeToLive_1
        INC	DPTR
        MOVX	A,@DPTR
??miqDecrTimeToLive_1:
        JZ	??miqDecrTimeToLive_2
        MOV	DPL,R0
        MOV	DPH,R1
        MOVX	A,@DPTR
        ADD	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	A,@DPTR
        ADDC	A,#-0x1
        MOVX	@DPTR,A
//  539         ENABLE_GLOBAL_INT();
??miqDecrTimeToLive_2:
        SETB	0xa8.7
//  540     }
        MOV	A,R0
        ADD	A,#-0x6d
        MOV	R0,A
        MOV	A,R1
        ADDC	A,#0x0
        MOV	R1,A
        DEC	R2
        MOV	A,R2
        JNZ	??miqDecrTimeToLive_0
//  541 } // miqDecrTimeToLive
        LJMP	?Subroutine0
        CFI EndBlock cfiBlock8

        RSEG NEAR_CODE:CODE:NOROOT(0)
miqAddIndirectPacket:
        CFI Block cfiBlock9 Using cfiCommon1
        CFI Function miqAddIndirectPacket
        FUNCALL miqAddIndirectPacket, msupCompareExtendedAddress
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL miqAddIndirectPacket, mschRemoveTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0x10
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        ; Saved register size: 16
        ; Auto size: 0
        MOV	A,R2
        MOV	R4,A
        MOV	A,R3
        MOV	R5,A
        MOV	DPL,R4
        MOV	DPH,R5
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	A,R4
        ADD	A,#0x5
        MOV	?V0 + 6,A
        MOV	A,R5
        ADDC	A,#0x0
        MOV	?V0 + 7,A
        MOV	DPL,?V0 + 6
        MOV	DPH,A
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for miqAddIndirectPacket>_0`:
        DB        0
        DB        1
        DW        ??miqAddIndirectPacket_0
        DW        ??miqAddIndirectPacket_1
        DW        ??miqAddIndirectPacket_2
??miqAddIndirectPacket_1:
        MOV	A,R0
        ADD	A,#-0x71
        MOV	?V0 + 4,A
        MOV	A,R1
        ADDC	A,#0x0
        MOV	?V0 + 5,A
        MOV	A,#0x1
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        MOVX	@DP

⌨️ 快捷键说明

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