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

📄 mac.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  117         mpib.macSuperframeOrder = BEACON_ORDER_NO_BEACON;
        MOV	A,#0xf
        MOV	DPTR,#(mpib + 34)
        MOVX	@DPTR,A
//  118         mpib.macTransactionPersistenceTime = 0x01F4;
        MOV	DPTR,#(mpib + 35)
        MOV	A,#-0xc
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,#0x1
        MOVX	@DPTR,A
//  119         memset(mpib.pMacCoordExtendedAddress, 0xFF, sizeof(mpib.pMacCoordExtendedAddress));
        ; Setup parameters for call to function memset
        MOV	?V0 + 0,#0x8
        MOV	?V0 + 1,#0x0
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 13)
        MOV	R4,#-0x1
        MOV	R5,#0x0
        MOV	R2,#((mpib + 14) & 0xff)
        MOV	R3,#(((mpib + 14) >> 8) & 0xff)
        MOV	DPTR,#(memset & 0xffff)
        MOV	A,#((memset >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x2
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 11)
//  120         mpib.macAssociatedPanCordinator = TRUE;
        MOV	A,#0x1
        MOV	DPTR,#(mpib + 37)
        MOVX	@DPTR,A
//  121 
//  122 #if MAC_OPT_ACL_SIZE > 0
//  123         mpib.ppMacACLEntryDescriptorSet = NULL;
//  124         mpib.macACLEntryDescriptorSetSize = 0;
//  125 #endif
//  126 
//  127 #if MAC_OPT_SECURITY
//  128         mpib.macDefaultSecurity = FALSE;
//  129         mpib.macDefaultSecurityMaterialLength = 0x15;
//  130         mpib.pMacDefaultSecurityMaterial = NULL;
//  131         mpib.macDefaultSecuritySuite = 0;
//  132 #endif
//  133 
//  134 #if ((MAC_OPT_SECURITY) || (MAC_OPT_ACL_SIZE>0))
//  135         mpib.macSecurityMode = 0;
//  136 #endif
//  137     }
//  138 
//  139     // Configure CC2430 registers
//  140     mpmRestoreRegsAndRam();
??mlmeResetRequest_0:
        ; Setup parameters for call to function mpmRestoreRegsAndRam
        LCALL	mpmRestoreRegsAndRam
//  141 
//  142     // Turn the interrupts back on
//  143     EnableRfInterrupts ();
        ; Setup parameters for call to function EnableRfInterrupts
        LCALL	EnableRfInterrupts
//  144     ENABLE_TIMER2_INT();
        SETB	0xb8.2
//  145 
//  146     // Confirm
//  147     return SUCCESS;
        MOV	R1,#0x0
        MOV	R7,#0x4
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock0
//  148 
//  149 } // mlmeResetRequest
//  150 
//  151 
//  152 
//  153 
//  154 //-------------------------------------------------------------------------------------------------------
//  155 //  void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId, ADDRESS ...)
//  156 //
//  157 //  DESCRIPTION:
//  158 //      Transmit a data packet.
//  159 //
//  160 //  PARAMETERS:
//  161 //      BYTE addrModes
//  162 //          Address mode for source and destination
//  163 //          (SRC_ADDR_SHORT, SRC_ADDR_EXT or 0) | (DEST_ADDR_SHORT, DEST_ADDR_EXT or 0)
//  164 //      WORD srcPanId
//  165 //          Source PAN identifier
//  166 //      ADDRESS *pSrcAddr
//  167 //          Pointer to the source address (short or extended)
//  168 //      WORD destPanId,
//  169 //          Destination PAN identifier
//  170 //      ADDRESS *pDestAddr,
//  171 //          Pointer to the destination address (short or extended)
//  172 //      UINT8 msduLength,
//  173 //          The length of pMsdu[]
//  174 //      BYTE *pMsdu,
//  175 //          A pointer to the packet payload
//  176 //      BYTE msduHandle,
//  177 //          A handle to this packet which is used later on with mcpsPurgeRequest)( and mcpsDataConfirm()
//  178 //      BYTE txOptions
//  179 //          (TX_OPT_SECURITY_ENABLE | TX_OPT_INDIRECT | TX_OPT_GTS | TX_OPT_ACK_REQ) or TX_OPT_NONE
//  180 //          Note: Indirect transmission only available for MAC_OPT_FFD=1
//  181 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  182 ROOT void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId,
mcpsDataRequest:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function mcpsDataRequest
//  183                      ADDRESS *pDestAddr, UINT8 msduLength, BYTE *pMsdu,
//  184                      BYTE msduHandle, BYTE txOptions) {
        FUNCALL mcpsDataRequest, mtxpReservePacket
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, mcpsDataConfirm
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, msupPrepareHeader
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mcpsDataRequest, mtxpReleasePacket
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, mcpsDataConfirm
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, memcpy
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL mcpsDataRequest, msupCalcPacketDuration
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, mschReserveTask
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, STACK
        FUNCALL mcpsDataRequest, mschAddTask
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL mcpsDataRequest, mschAddTask
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, 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: 3
        MOV	A,#-0x3
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 18)
        MOV	A,R1
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	@DPTR,A
        MOV	A,#0x1
        LCALL	?XSTACK_DISP0_8
        MOV	A,R4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R5
        MOVX	@DPTR,A
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	A,#0x12
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R6,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R7,A
        MOV	A,#0x16
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	?V0 + 7,A
        MOV	A,#0x19
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	?V0 + 6,A
//  185     MAC_TX_PACKET   *pPacket;
//  186     UINT8           temp;
//  187     BYTE            *pPayload,
//  188                     taskNumber;
//  189 
//  190     // Reserve a packet to use with the TX engine
//  191 #if MAC_OPT_FFD
//  192 reservePacket:
//  193     pPacket = mtxpReservePacket();
??mcpsDataRequest_0:
        ; Setup parameters for call to function mtxpReservePacket
        LCALL	mtxpReservePacket
        MOV	?V0 + 2,R2
        MOV	?V0 + 3,R3
//  194     if (!pPacket) {
        MOV	A,R2
        JNZ	??mcpsDataRequest_1
        MOV	A,R3
??mcpsDataRequest_1:
        JNZ	??mcpsDataRequest_2
//  195         if (txOptions & TX_OPT_INDIRECT) {
        MOV	A,#0x1a
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	C,0xE0 /* A   */.2
        JNC	??mcpsDataRequest_0
//  196             mcpsDataConfirm(TRANSACTION_OVERFLOW, msduHandle);
        ; Setup parameters for call to function mcpsDataConfirm
        MOV	R2,?V0 + 6
        MOV	R1,#-0xf
??mcpsDataRequest_3:
        LCALL	mcpsDataConfirm
//  197             return;
        LJMP	??mcpsDataRequest_4
//  198         } else {
//  199             goto reservePacket;
//  200         }
//  201     }
//  202 #else // RFD
//  203     if (txOptions & TX_OPT_INDIRECT) {
//  204         mcpsDataConfirm(INVALID_PARAMETER, msduHandle);
//  205         return;
//  206     }
//  207 
//  208 reservePacket:
//  209     pPacket = mtxpReservePacket();
//  210     if (!pPacket) {
//  211         goto reservePacket;
//  212     }
//  213 #endif
//  214 
//  215     // Set transmission mode
//  216     pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
??mcpsDataRequest_2:
        MOV	A,R2
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x1
        MOVX	@DPTR,A
//  217 
//  218     // Set number of retries
//  219     pPacket->retriesLeft = aMaxFrameRetries;
        MOV	A,R2
        ADD	A,#-0x6f
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x3
        MOVX	@DPTR,A
//  220 
//  221     // Store the msdu handle
//  222     pPacket->msduHandle = msduHandle;
        MOV	A,R2
        ADD	A,#-0x7e
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,?V0 + 6
        MOVX	@DPTR,A
//  223 
//  224     // Generate the packet header (and find security material, if enabled)
//  225     msupPrepareHeader(pPacket, FT_DATA, addrModes, srcPanId, pSrcAddr, destPanId, pDestAddr, txOptions);
        ; Setup parameters for call to function msupPrepareHeader
        MOV	A,#0x14
        LCALL	?XSTACK_DISP0_8
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 20)
        MOV	?V0 + 4,R6
        MOV	?V0 + 5,R7
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 22)
        MOV	A,#0x5
        LCALL	?XSTACK_DISP0_8
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 24)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 26)
        MOV	A,#0x22
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R5,A
        MOV	A,#0x8
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R4,A
        MOV	R1,#0x1
        LCALL	msupPrepareHeader
        MOV	A,#0x8
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 18)
//  226 
//  227     pPayload = pPacket->pPayload;
//  228 
//  229 #if MAC_OPT_SECURITY
//  230     // Before calculating the PSDU length; make sure that the payload + MIC is less than aMaxMACFrameSize
//  231 
//  232     // #bytes in frame counter + key sequence counter (0 or 5)
//  233     temp = msecProcessSecurityCounters(pPacket, pPayload);
//  234 
//  235     // In case of frame counter overflow or missing key
//  236     // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY
//  237     if (pPacket->securitySuite >= 8) {
//  238         mtxpReleasePacket(pPacket);
//  239         mcpsDataConfirm(pPacket->securitySuite, msduHandle);
//  240         return;
//  241     }
//  242 
//  243     // Increment payload pointer when counters inserted
//  244     pPayload += temp;
//  245 
//  246     // Include msduLength and optional MIC (integrity code) length
//  247     temp += msduLength + pPacket->securitySetup.micLength;
//  248 
//  249 #else
//  250     temp = msduLength;
//  251 #endif
//  252 
//  253     // Is frame too long?
//  254     if (temp > aMaxMACFrameSize) {
        MOV	A,?V0 + 7
        CLR	C
        SUBB	A,#0x67
        JC	??mcpsDataRequest_5
//  255         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	R2,?V0 + 2
        MOV	R3,?V0 + 3

⌨️ 快捷键说明

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