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

📄 mac_indirect_polling.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 4 页
字号:
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 8)
        ; Saved register size: 8
        ; Auto size: 0
//   45     MAC_ENUM result;
//   46     BOOL securityEnable = FALSE; // TBD...
//   47 
//   48     // Switch to automatic polling mode
//   49     if (!macSetState(MAC_STATE_TX_AUTO_DATA_REQUEST)) return;
        ; Setup parameters for call to function macSetState
        MOV	R1,#0x10
        LCALL	macSetState
        MOV	A,R1
        JZ	??mipTransmitAutoDataRequest_0
//   50 
//   51     // Try to transmit the data request
//   52     if (mpib.macCoordShortAddress < 0xFFFE) {
        MOV	DPTR,#(mpib + 28)
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	DPTR,#(mpib + 22)
        CLR	C
        MOVX	A,@DPTR
        SUBB	A,#-0x2
        INC	DPTR
        MOVX	A,@DPTR
        SUBB	A,#-0x1
        MOV	?V0 + 0,#0x0
        MOV	R0,#?V0 + 0
        JNC	??mipTransmitAutoDataRequest_1
//   53         result = mipTransmitDataRequest(AM_SHORT_16, mpib.macPANId, (ADDRESS   *) &mpib.macCoordShortAddress, securityEnable);
        ; Setup parameters for call to function mipTransmitDataRequest
        LCALL	?PUSH_XSTACK_I_ONE
        CFI CFA_XSP16 add(XSP16, 9)
        MOV	R4,#((mpib + 22) & 0xff)
        MOV	R5,#(((mpib + 22) >> 8) & 0xff)
        MOV	R1,#0x2
        SJMP	??mipTransmitAutoDataRequest_2
        CFI CFA_XSP16 add(XSP16, 8)
//   54     } else {
//   55         result = mipTransmitDataRequest(AM_EXTENDED_64, mpib.macPANId, (ADDRESS   *) mpib.pMacCoordExtendedAddress, securityEnable);
??mipTransmitAutoDataRequest_1:
        ; Setup parameters for call to function mipTransmitDataRequest
        LCALL	?PUSH_XSTACK_I_ONE
        CFI CFA_XSP16 add(XSP16, 9)
        MOV	R4,#((mpib + 14) & 0xff)
        MOV	R5,#(((mpib + 14) >> 8) & 0xff)
        MOV	R1,#0x3
??mipTransmitAutoDataRequest_2:
        LCALL	mipTransmitDataRequest
        MOV	A,#0x1
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 8)
        MOV	A,R1
        MOV	R2,A
//   56     }
//   57 
//   58     // Clean up if it failed
//   59     if (result != SUCCESS) macSetState(MAC_STATE_DEFAULT);
        MOV	A,R2
        JZ	??mipTransmitAutoDataRequest_0
        ; Setup parameters for call to function macSetState
        MOV	R1,#0x0
        LCALL	macSetState
        CFI EndBlock cfiBlock0
??mipTransmitAutoDataRequest_0:
        REQUIRE ?Subroutine0
        ; // Fall through to label ?Subroutine0
//   60 
//   61 } // mipTransmitAutoDataRequest

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 8)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        MOV	R7,#0x1
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock1
//   62 
//   63 
//   64 
//   65 
//   66 //-------------------------------------------------------------------------------------------------------
//   67 //  MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL ...)
//   68 //
//   69 //  DESCRIPTION:
//   70 //      Transmits a data request packet.
//   71 //
//   72 //  ARGUMENTS:
//   73 //      BYTE coordAddrMode
//   74 //          The address mode used by the coordinator
//   75 //      WORD coordPANId
//   76 //          The PAN ID used by the coordinator
//   77 //      ADDRESS *pCoordAddress
//   78 //          A pointer to the coordinator address (taken from the MAC PIB, short or extended)
//   79 //      BOOL securityEnable
//   80 //          TBD...
//   81 //
//   82 //  RETURN VALUE:
//   83 //      MAC_ENUM
//   84 //          SUCCESS                 No error (the transmission was initiated)
//   85 //          RESOURCE_SHORTAGE       TX packet or task not available
//   86 //          UNAVAILABLE_KEY         No key
//   87 //          FAILED_SECURITY_CHECK   Failed security check
//   88 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   89 ROOT MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL securityEnable) {
mipTransmitDataRequest:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function mipTransmitDataRequest
        FUNCALL mipTransmitDataRequest, mtxpReservePacket
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mipTransmitDataRequest, mschReserveTask
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mipTransmitDataRequest, mtxpReleasePacket
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mipTransmitDataRequest, msupPrepareHeader
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL mipTransmitDataRequest, msupPrepareHeader
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL mipTransmitDataRequest, msupCalcPacketDuration
        LOCFRAME XSTACK, 15, STACK
        ARGFRAME XSTACK, 15, STACK
        FUNCALL mipTransmitDataRequest, mschAddTask
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, 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	?V0 + 3,R1
        MOV	A,R2
        MOV	R6,A
        MOV	A,R3
        MOV	R7,A
        MOV	?V0 + 6,R4
        MOV	?V0 + 7,R5
//   90     MAC_TX_PACKET   *pPacket;
//   91     UINT8           taskNumber;
//   92     BYTE            txOptions;
//   93     UINT8           temp;
//   94     BYTE            *pPayload;
//   95 
//   96     // Try to reserve a packet
//   97     pPacket = mtxpReservePacket();
        ; Setup parameters for call to function mtxpReservePacket
        LCALL	mtxpReservePacket
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
//   98     if (!pPacket) return RESOURCE_SHORTAGE;
        MOV	A,R2
        JNZ	??mipTransmitDataRequest_0
        MOV	A,R3
??mipTransmitDataRequest_0:
        JNZ	??mipTransmitDataRequest_1
??mipTransmitDataRequest_2:
        MOV	R1,#0x1
        LJMP	??mipTransmitDataRequest_3
//   99 
//  100     // Try to reserve a transmission task
//  101     taskNumber = mschReserveTask();
??mipTransmitDataRequest_1:
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        MOV	A,R1
        MOV	?V0 + 2,A
//  102     if (taskNumber == NO_TASK) {
        MOV	A,#-0x1
        XRL	A,?V0 + 2
        JNZ	??mipTransmitDataRequest_4
//  103         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        LCALL	mtxpReleasePacket
//  104         return RESOURCE_SHORTAGE;
        SJMP	??mipTransmitDataRequest_2
//  105     }
//  106 
//  107     // Set TX options
//  108     txOptions = TX_OPT_ACK_REQ;
//  109 #if MAC_OPT_SECURITY
//  110     if (securityEnable) {
//  111         txOptions |= TX_OPT_SECURITY_ENABLE;
//  112     }
//  113 #endif
//  114 
//  115     // TX mode
//  116     pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
??mipTransmitDataRequest_4:
        MOV	A,?V0 + 0
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,?V0 + 1
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x1
        MOVX	@DPTR,A
//  117     pPacket->retriesLeft = aMaxFrameRetries;
        MOV	A,?V0 + 0
        ADD	A,#-0x6f
        MOV	DPL,A
        MOV	A,?V0 + 1
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x3
        MOVX	@DPTR,A
//  118 
//  119     // Generate the packet header (and find security material, if enabled)
//  120     if (mpib.macShortAddress >= 0xFFFE) {
        MOV	A,?V0 + 3
        RLC	A
        RLC	A
        ANL	A,#0xfc
        MOV	R2,A
        MOV	DPTR,#(mpib + 32)
        CLR	C
        MOVX	A,@DPTR
        SUBB	A,#-0x2
        INC	DPTR
        MOVX	A,@DPTR
        SUBB	A,#-0x1
        MOV	R0,#?V0 + 6
        JC	??mipTransmitDataRequest_5
//  121         msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_EXT, mpib.macPANId, (ADDRESS  *) &aExtendedAddress, coordPANId, pCoordAddress, (BYTE)txOptions);
        ; Setup parameters for call to function msupPrepareHeader
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	?V0 + 4,R6
        MOV	?V0 + 5,R7
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 19)
        MOV	?V0 + 4,#(aExtendedAddress & 0xff)
        MOV	?V0 + 5,#((aExtendedAddress >> 8) & 0xff)
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 21)
        MOV	DPTR,#(mpib + 28)
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 23)
        MOV	R5,#0x1
        MOV	A,#-0x40
        SJMP	??mipTransmitDataRequest_6
        CFI CFA_XSP16 add(XSP16, 15)
//  122     } else {
//  123         msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_SHORT, mpib.macPANId, (ADDRESS  *) &mpib.macShortAddress, coordPANId, pCoordAddress, txOptions);
??mipTransmitDataRequest_5:
        ; Setup parameters for call to function msupPrepareHeader
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	?V0 + 4,R6
        MOV	?V0 + 5,R7
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 19)
        MOV	?V0 + 4,#((mpib + 32) & 0xff)
        MOV	?V0 + 5,#(((mpib + 32) >> 8) & 0xff)
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 21)
        MOV	DPTR,#(mpib + 28)
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 23)
        MOV	R5,#0x1
        MOV	A,#-0x80
??mipTransmitDataRequest_6:
        ORL	A,R2
        MOV	R4,A
        MOV	R1,#0x3
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        LCALL	msupPrepareHeader
        MOV	A,#0x8
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 15)
//  124     }
//  125 
//  126     // Store the command type
//  127     pPacket->commandType = CMD_DATA_REQUEST;
        MOV	A,?V0 + 0
        ADD	A,#-0x7d
        MOV	DPL,A
        MOV	A,?V0 + 1
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x4
        MOVX	@DPTR,A
//  128 
//  129     // Command frame identifier
//  130     pPayload = pPacket->pPayload;
//  131     *(pPayload++) = CMD_DATA_REQUEST;
        MOV	A,?V0 + 0
        ADD	A,#0x1a
        MOV	DPL,A
        MOV	A,?V0 + 1
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x4
        MOVX	@DPTR,A
//  132 
//  133 #if MAC_OPT_SECURITY
//  134     // #bytes in frame counter + key sequence counter (0 or 5)
//  135     temp = msecProcessSecurityCounters(pPacket, pPayload);
//  136 
//  137     // In case of frame counter overflow or missing key
//  138     // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY
//  139     if (pPacket->securitySuite >= 8) {
//  140         mtxpReleasePacket(pPacket);
//  141         mschReleaseTask(taskNumber);
//  142         return pPacket->securitySuite;
//  143     }
//  144 
//  145     // Increment payload pointer when counters inserted
//  146     pPayload += temp;
//  147 
//  148     // Include command payload length and optional MIC (integrity code) length
//  149     temp += CMD_DATA_REQUEST_PAYLOAD_LENGTH + pPacket->securitySetup.micLength;
//  150 
//  151 #else
//  152     // No security material included, set MAC payload length
//  153     temp = CMD_DATA_REQUEST_PAYLOAD_LENGTH;
//  154 #endif
//  155 
//  156     // Set the packet length
//  157     pPacket->length = pPacket->headerLength + temp + MAC_FCS_LENGTH;
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        INC	DPTR
        MOVX	A,@DPTR

⌨️ 快捷键说明

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