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

📄 mac_rx_engine.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  275     }
//  276 
//  277     // Flush the RX FIFO twice (chip bug)
//  278     ISFLUSHRX;
//  279     ISFLUSHRX;
//  280 
//  281     // Clear the FIFOP interrupt flag
//  282     CLEAR_FIFOP_INT_BIT();
//  283     CLEAR_RFIF_INT();
//  284     if (mrxInfo.state == MRX_STATE_FCS) ENABLE_FIFOP_INT_BIT();
//  285 
//  286     // Reset the RX engine state
//  287     mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;
//  288 
//  289     ENABLE_GLOBAL_INT();
//  290 
//  291 } // mrxResetRxEngine
//  292 
//  293 
//  294 
//  295 
//  296 /*******************************************************************************************************
//  297  *******************************************************************************************************
//  298  **************************          PACKET RECEPTION AND PROCESSING          **************************
//  299  *******************************************************************************************************
//  300  *******************************************************************************************************/
//  301 
//  302 
//  303 
//  304 
//  305 //-------------------------------------------------------------------------------------------------------
//  306 //  MLME_BEACON_NOTIFY_INDICATION* mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket)
//  307 //
//  308 //  DESCRIPTION:
//  309 //      Modifies a MAC_RX_PACKET structure to become a beacon notify indication.
//  310 //
//  311 //  ARGUMENTS:
//  312 //      MAC_RX_PACKET *pPacket
//  313 //          The packet that contains the beacon. This structure will be modified to contain the
//  314 //          notification.
//  315 //
//  316 //  RETURN VALUE:
//  317 //      MLME_BEACON_NOTIFY_INDICATION*
//  318 //          A pointer to the notification to be passed to the higher layer
//  319 //-------------------------------------------------------------------------------------------------------
//  320 ROOT MLME_BEACON_NOTIFY_INDICATION   * mrxMakeBeaconNotifyIndication(MAC_RX_PACKET    *pPacket) {
//  321     MLME_BEACON_NOTIFY_INDICATION   *pMBNI = (MLME_BEACON_NOTIFY_INDICATION  *) (((BYTE  *) pPacket) + 1);
//  322     MCPS_DATA_INDICATION   *pMDI = &pPacket->mdi;
//  323     PAN_DESCRIPTOR   *pPanDescriptor = &pMBNI->panDescriptor;
//  324     UINT8 n;
//  325     UINT8 payloadOffset;
//  326     UINT8 pendAddrOffset;
//  327     UINT8 pendAddrSpec;
//  328     UINT8 pendingIndex;
//  329 
//  330     // Do not change the order of these operations!!!
//  331 
//  332     // Calculate the pSDU offset
//  333     n = pMDI->pMsdu[2] & 0x07;
//  334     if (n) {
//  335         n = 3 + 1 + 3 * n;
//  336     } else {
//  337         n = 3;
//  338     }
//  339     pendAddrSpec = pMDI->pMsdu[n];
//  340     payloadOffset = (n + 1 + (sizeof(WORD) * (pendAddrSpec & 0x07)) + (sizeof(ADDRESS) * ((pendAddrSpec & 0x70) >> 4)));
//  341 
//  342     // Start by copying the payload in reverse order to avoid overwriting
//  343     msupReverseCopy(pMBNI->pSdu, pMDI->pMsdu + payloadOffset, aMaxBeaconPayloadLength);
//  344 
//  345     // Copy lots of parameters (no fields are overwritten!)
//  346     pMBNI->sduLength = pMDI->msduLength - payloadOffset;
//  347     pPanDescriptor->logicalChannel = ppib.phyCurrentChannel;
//  348     pPanDescriptor->linkQuality = pMDI->mpduLinkQuality;
//  349     pPanDescriptor->superframeSpec = *((WORD   *) pMDI->pMsdu);
//  350     pPanDescriptor->gtsPermit = !!(pMDI->pMsdu[2] & 0x80);
//  351     pPanDescriptor->securityUse = pMDI->securityUse;
//  352     pPanDescriptor->aclEntry = pMDI->aclEntry;
//  353 #if ((MAC_OPT_SECURITY) || (MAC_OPT_ACL_SIZE>0))
//  354     pPanDescriptor->securityFailure = (pPacket->securityStatus != SUCCESS);
//  355 #else
//  356     pPanDescriptor->securityFailure = pMDI->securityUse;
//  357 #endif
//  358     pMBNI->pendAddrSpec = pendAddrSpec;
//  359 
//  360     // Copy the pending addresses in the reverse order
//  361     pendingIndex = (pendAddrSpec & 0x07) + ((pendAddrSpec & 0x70) >> 4) - 1;
//  362 
//  363     // Extended addresses first
//  364     n = (pendAddrSpec & 0x70) >> 4;
//  365     while (n--) {
//  366         pendAddrOffset -= sizeof(ADDRESS);
//  367         msupReverseCopy((BYTE  *) (&pMBNI->pAddrList[pendingIndex--]), (BYTE  *) (&pMDI->pMsdu[pendAddrOffset]), sizeof(ADDRESS));
//  368     }
//  369 
//  370     // Then short addresses
//  371     n = pendAddrSpec & 0x07;
//  372     while (n--) {
//  373         pendAddrOffset -= sizeof(WORD);
//  374         msupReverseCopy((BYTE  *) (&pMBNI->pAddrList[pendingIndex--]), (BYTE  *) (&pMDI->pMsdu[pendAddrOffset]), sizeof(WORD));
//  375     }
//  376 
//  377     return pMBNI;
//  378 
//  379 } // mrxMakeBeaconNotifyIndication
//  380 
//  381 
//  382 
//  383 
//  384 //-------------------------------------------------------------------------------------------------------
//  385 //  void mrxProcessBeacon(MAC_TASK_INFO *pTask)
//  386 //
//  387 //  DESCRIPTION:
//  388 //      This task is responsible for processing beacon packets.
//  389 //
//  390 //  TASK DATA
//  391 //      A pointer to the MAC_RX_PACKET to be processed
//  392 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  393 void mrxProcessBeacon(MAC_TASK_INFO *pTask) NEAR {
mrxProcessBeacon:
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function mrxProcessBeacon
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxMakeBeaconNotifyIndication
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, memcpy
        LOCFRAME XSTACK, 24, STACK
        ARGFRAME XSTACK, 24, STACK
        FUNCALL mrxProcessBeacon, mscPanDescriptorExists
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, macSetState
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mlmeBeaconNotifyIndication
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxpReleasePacket
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxpReleasePacket
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxpReleasePacket
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mlmeSyncLossIndication
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupCompareExtendedAddress
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mtimAlignWithBeacon
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mbcnHandleBeaconModeChange
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupCalcPacketDuration
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxpReleasePacket
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mlmeSyncLossIndication
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupTransmitPanConflict
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL mrxProcessBeacon, msupTransmitPanConflict
        LOCFRAME XSTACK, 23, STACK
        ARGFRAME XSTACK, 23, STACK
        FUNCALL mrxProcessBeacon, mtimCancelCallback
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mtxResumeAfterBeacon
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mtimCancelCallback
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupCalcBeaconInterval
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mbcnGetBeaconMargin
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mrxProcessBeacon, mrxAutoIncrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupCalcCapDuration
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxDecrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mipTransmitAssocDataRequest
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, msupCompareExtendedAddress
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mipTransmitAutoDataRequest
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mrxProcessBeacon, mrxMakeBeaconNotifyIndication
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, 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: 6
        MOV	A,#-0x6
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 22)
        MOV	A,#0x4
        LCALL	?XSTACK_DISP0_8
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        MOVX	@DPTR,A
//  394     MAC_RX_PACKET *pPacket = (MAC_RX_PACKET*) pTask->taskData;
        MOV	A,#0x4
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R0
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
//  395     MLME_BEACON_NOTIFY_INDICATION *pMBNI;
//  396     MCPS_DATA_INDICATION *pMDI = &pPacket->mdi;
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        ADD	A,#0x7
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        ADDC	A,#0x0
        MOV	R1,A
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
        MOV	A,#0x4
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
     

⌨️ 快捷键说明

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