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

📄 mac_support.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        LCALL	DisableRfInterrupts
//  303         ENABLE_GLOBAL_INT();
        SETB	0xa8.7
//  304         mrxResetRxEngine();
        ; Setup parameters for call to function mrxResetRxEngine
        LCALL	mrxResetRxEngine
//  305         EnableRfInterrupts();
        ; Setup parameters for call to function EnableRfInterrupts
        LCALL	EnableRfInterrupts
//  306 
//  307         // Change the PIB attribute (?) and update the frequency register
//  308         DISABLE_GLOBAL_INT();
        CLR	0xa8.7
//  309         if (changePib) ppib.phyCurrentChannel = logicalChannel;
        MOV	A,?V0 + 1
        JZ	??msupSetChannel_2
        MOV	A,?V0 + 0
        MOV	DPTR,#ppib
        MOVX	@DPTR,A
//  310         WRITE_RFR16(FSCTRL, newFreq);
??msupSetChannel_2:
        MOV	A,R7
        MOV	DPTR,#-0x20f0
        MOVX	@DPTR,A
        MOV	A,R6
        MOV	DPTR,#-0x20ef
        MOVX	@DPTR,A
//  311 
//  312         // Return to the previous RX state
//  313         if (mrxInfo.onCounter) {
        MOV	DPTR,#(mrxInfo + 13)
        MOVX	A,@DPTR
        JZ	??msupSetChannel_3
//  314             ISRXON;
        MOV	0xe1,#-0x1e
//  315         }
//  316         ENABLE_GLOBAL_INT();
??msupSetChannel_3:
        SETB	0xa8.7
//  317     }
//  318 
//  319 } // msupSetChannel
??msupSetChannel_1:
        MOV	R7,#0x2
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock12
//  320 
//  321 
//  322 
//  323 
//  324 /*******************************************************************************************************
//  325  *******************************************************************************************************
//  326  **************************                TX PACKET GENERATION               **************************
//  327  *******************************************************************************************************
//  328  *******************************************************************************************************/
//  329 
//  330 
//  331 
//  332 
//  333 //-------------------------------------------------------------------------------------------------------
//  334 //  msupPrepareHeader(MAC_TX_PACKET *pPacket, BYTE type, BYTE addrModes, WORD srcPanId, ADDRESS ...)
//  335 //
//  336 //  DESCRIPTION:
//  337 //      Packet header assembly function, used for beacon, data and command frames.
//  338 //
//  339 //  PARAMETERS:
//  340 //      MAC_TX_PACKET *pPacket
//  341 //          The packet structure to update (this function affects the header part)
//  342 //      BYTE type
//  343 //          FT_BEACON, FT_DATA or FT_COMMAND
//  344 //      BYTE addrModes
//  345 //          Address mode for source and destination
//  346 //          (SRC_ADDR_SHORT, SRC_ADDR_EXT or 0) | (DEST_ADDR_SHORT, DEST_ADDR_EXT or 0)
//  347 //      WORD srcPanId
//  348 //          Source PAN identifier
//  349 //      ADDRESS *pSrcAddr
//  350 //          Pointer to the source address (short or extended)
//  351 //      WORD destPanId,
//  352 //          Destination PAN identifier
//  353 //      ADDRESS *pDestAddr,
//  354 //          Pointer to the destination address (short or extended)
//  355 //      BYTE txOptions
//  356 //          (TX_OPT_SECURITY_ENABLE | TX_OPT_INDIRECT | TX_OPT_GTS | TX_OPT_ACK_REQ) or TX_OPT_NONE
//  357 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  358 ROOT __xdata_reentrant void msupPrepareHeader(MAC_TX_PACKET   *pPacket, BYTE type, BYTE addrModes, WORD srcPanId,
msupPrepareHeader:
        CFI Block cfiBlock13 Using cfiCommon1
        CFI Function msupPrepareHeader
//  359                        ADDRESS   *pSrcAddr, WORD destPanId, ADDRESS   *pDestAddr, BYTE txOptions)
//  360 {
        FUNCALL msupPrepareHeader, memcpy
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL msupPrepareHeader, msupCompareExtendedAddress
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, STACK
        FUNCALL msupPrepareHeader, memcpy
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0xe
        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 V6 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        ; Saved register size: 14
        ; Auto size: 0
        MOV	?V0 + 2,R2
        MOV	?V0 + 3,R3
        MOV	?V0 + 0,R1
        MOV	?V0 + 6,R4
        MOV	A,#0xe
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R6,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R7,A
        MOV	A,#0x12
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
//  361     BYTE temp;
//  362     UINT8 length = 0;
//  363 
//  364     // Packet type and options
//  365     pPacket->type = type;
        MOV	A,R2
        ADD	A,#-0x80
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,?V0 + 0
        MOVX	@DPTR,A
//  366     pPacket->txOptions = txOptions;
        MOV	A,R2
        ADD	A,#-0x7f
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,R5
        MOVX	@DPTR,A
//  367 
//  368     // Frame control field
//  369     temp = (BYTE)(type & FRAME_TYPE_BM);
        MOV	A,#0x7
        ANL	A,?V0 + 0
        MOV	?V0 + 1,A
//  370 #if MAC_OPT_SECURITY
//  371     pPacket->securitySetup.micLength = 0;
//  372 
//  373     if (txOptions & TX_OPT_SECURITY_ENABLE) {
//  374         temp |= SECURITY_ENABLED_BM;
//  375         // Set securitySuite or securityStatus (UNAVAILABLE_KEY)
//  376         msecFindTxSecurityMaterial(pPacket, TRUE, ((addrModes & DEST_ADDR_BM) >> 2), destPanId, pDestAddr);
//  377 
//  378     } else {
//  379         pPacket->securitySuite = MAC_SECURITY_NONE;
//  380     }
//  381 #else
//  382     pPacket->securitySuite = MAC_SECURITY_NONE;
        MOV	A,R2
        ADD	A,#-0x6e
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        CLR	A
        MOVX	@DPTR,A
//  383 #endif
//  384     if (txOptions & TX_OPT_ACK_REQ) temp |= ACK_REQ_BM;
        MOV	A,R5
        MOV	C,0xE0 /* A   */.0
        JNC	??msupPrepareHeader_0
        MOV	A,?V0 + 1
        SETB	0xE0 /* A   */.5
        MOV	?V0 + 1,A
//  385     if (((addrModes & BOTH_ADDR_USED) == BOTH_ADDR_USED) && (srcPanId == destPanId)) temp |= INTRA_PAN_BM;
??msupPrepareHeader_0:
        MOV	A,#-0x78
        ANL	A,?V0 + 6
        XRL	A,#0x88
        JNZ	??msupPrepareHeader_1
        MOV	A,R0
        XRL	A,R6
        JNZ	??msupPrepareHeader_2
        MOV	A,R1
        XRL	A,R7
??msupPrepareHeader_2:
        JNZ	??msupPrepareHeader_1
        MOV	A,?V0 + 1
        SETB	0xE0 /* A   */.6
        MOV	?V0 + 1,A
//  386     pPacket->pHeader[length++] = temp;
??msupPrepareHeader_1:
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,?V0 + 1
        MOVX	@DPTR,A
//  387     pPacket->pHeader[length++] = addrModes;
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,R4
        MOVX	@DPTR,A
//  388 
//  389     // Sequence number
//  390     if (type == FT_BEACON) {
        MOV	A,R2
        ADD	A,#0x5
        MOV	R2,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	R3,A
        MOV	A,?V0 + 0
        JNZ	??msupPrepareHeader_3
//  391         pPacket->pHeader[length++] = mpib.macBSN++;
        MOV	DPTR,#(mpib + 13)
        MOVX	A,@DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	@DPTR,A
        MOV	DPTR,#(mpib + 13)
        SJMP	??msupPrepareHeader_4
//  392     } else {
//  393         pPacket->pHeader[length++] = mpib.macDSN++;
??msupPrepareHeader_3:
        MOV	DPTR,#(mpib + 24)
        MOVX	A,@DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	@DPTR,A
        MOV	DPTR,#(mpib + 24)
??msupPrepareHeader_4:
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
        MOV	?V0 + 0,#0x3
        MOV	A,#0xc
        ANL	A,?V0 + 6
        MOV	R4,A
        JNZ	$+5
        LJMP	??msupPrepareHeader_5
        MOV	A,R0
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  394     }
//  395 
//  396     // Destination PAN ID
//  397     if (addrModes & DEST_ADDR_BM) {
//  398         pPacket->pHeader[length++] = LOBYTE(destPanId);
//  399         pPacket->pHeader[length++] = HIBYTE(destPanId);
        MOV	A,R1
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
        MOV	?V0 + 0,#0x5
//  400         pPacket->toCoord = mpib.macPANId == destPanId;
        MOV	DPTR,#(mpib + 28)
        MOVX	A,@DPTR
        XRL	A,R0
        JNZ	??msupPrepareHeader_6
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R1
??msupPrepareHeader_6:
        JNZ	??msupPrepareHeader_7
        MOV	R5,#0x1
        SJMP	??msupPrepareHeader_8
??msupPrepareHeader_7:
        MOV	R5,#0x0
??msupPrepareHeader_8:
        MOV	A,?V0 + 2
        ADD	A,#-0x7c
        MOV	DPL,A
        MOV	A,?V0 + 3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,R5
        MOVX	@DPTR,A
//  401     } else {
//  402         pPacket->toCoord = FALSE;
//  403     }
//  404 
//  405     // Destination address
//  406     if ((addrModes & DEST_ADDR_BM) == DEST_ADDR_SHORT) {
        MOV	A,R2
        ADD	A,#0x3
        INC	R2
        INC	R2
        INC	R2
        MOV	A,R3
        ADDC	A,#0x0
        MOV	R3,A
        MOV	A,#0x8
        XRL	A,R4
        JNZ	??msupPrepareHeader_9
//  407         pPacket->pHeader[length++] = LOBYTE(pDestAddr->Short);
        MOV	A,#0x14
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R0
        MOVX	A,@DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	@DPTR,A
//  408         pPacket->pHeader[length++] = HIBYTE(pDestAddr->Short);
        MOV	A,#0x14
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R0
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
        MOV	?V0 + 0,#0x7
//  409         pPacket->toCoord &= (mpib.macCoordShortAddress == pDestAddr->Short);
        MOV	DPTR,#(mpib + 22)
        MOVX	A,@DPTR
        MOV	R2,A

⌨️ 快捷键说明

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