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

📄 mac_beacon_handler.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        JNZ	??mbcnTxPeriodicalBeaconTask_11
        MOV	R1,#(mrxDecrOnCounter & 0xff)
        MOV	R2,#((mrxDecrOnCounter >> 8) & 0xff)
        MOV	R3,#((mrxDecrOnCounter >> 16) & 0xff)
        SJMP	??mbcnTxPeriodicalBeaconTask_12
??mbcnTxPeriodicalBeaconTask_11:
        MOV	R1,#(mrxForceRxOff & 0xff)
        MOV	R2,#((mrxForceRxOff >> 8) & 0xff)
        MOV	R3,#((mrxForceRxOff >> 16) & 0xff)
??mbcnTxPeriodicalBeaconTask_12:
        ; Setup parameters for call to function mtimSetCallback
        MOV	DPTR,#__Constant_4
        MOV	R0,#?V0 + 0
        LCALL	?L_ADD_X
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_FOUR
        CFI CFA_XSP16 add(XSP16, 26)
??mbcnTxPeriodicalBeaconTask_10:
        LCALL	mtimSetCallback & 0xFFFF
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 22)
//  232                     }
//  233                 }
//  234             }
//  235 
//  236             // Transform this task into an mtxStartTransmission()
//  237             pTask->state = MTX_STATE_PREPARE_PACKET;
??mbcnTxPeriodicalBeaconTask_8:
        MOV	A,#0x4
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R0
        CLR	A
        MOVX	@DPTR,A
//  238             pTask->taskData = (WORD) pPacket;
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R2
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
//  239             pTask->pTaskFunc = mtxStartTransmission;
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPH,A
        MOV	DPL,R0
        MOV	A,#(mtxStartTransmission & 0xff)
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,#((mtxStartTransmission >> 8) & 0xff)
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,#((mtxStartTransmission >> 16) & 0xff)
        MOVX	@DPTR,A
//  240             mtxInfo.beaconTransmissionInProgress = TRUE;
        MOV	A,#0x1
        MOV	DPTR,#(mtxInfo + 11)
        MOVX	@DPTR,A
//  241             mtxInfo.cspTimeout = CSP_TIMEOUT_RUN_FOREVER;
        MOV	A,#-0x1
        MOV	DPTR,#(mtxInfo + 10)
        LJMP	??mbcnTxPeriodicalBeaconTask_5
//  242 
//  243         // Disaster :(
//  244         // The prepare time was too short!!! (DEBUG: Add a breakpoint here if beacons are missing)
//  245         } else if (T2_GET_OVERFLOW_COUNTER() > oldBeaconInterval) {
??mbcnTxPeriodicalBeaconTask_6:
        ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
        MOV	DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
        MOV	A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	?V0 + 2,R4
        MOV	?V0 + 3,R5
        MOV	DPTR,#??oldBeaconInterval
        MOV	R0,#?V0 + 0
        LCALL	?UL_GT_X
        JNC	??mbcnTxPeriodicalBeaconTask_0
//  246 
//  247             // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
//  248             mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);
        ; Setup parameters for call to function mtimSetCallback
        MOV	DPTR,#__Constant_4
        LCALL	?PUSH_XSTACK8_X_FOUR
        CFI CFA_XSP16 add(XSP16, 26)
        MOV	R1,#(mtxResetBosCounter & 0xff)
        MOV	R2,#((mtxResetBosCounter >> 8) & 0xff)
        MOV	R3,#((mtxResetBosCounter >> 16) & 0xff)
        LCALL	mtimSetCallback & 0xFFFF
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 22)
//  249 
//  250             // Don't transmit the beacon
//  251             mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
        ; Setup parameters for call to function mschRemoveTask
??mbcnTxPeriodicalBeaconTask_4:
        MOV	R2,#0x3
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        MOV	R1,A
        LCALL	mschRemoveTask & 0xFFFF
//  252         }
//  253         break;
//  254     }
//  255 
//  256 } // mbcnTxPeriodicalBeaconTask
??mbcnTxPeriodicalBeaconTask_0:
        MOV	A,#0x6
        LJMP	?Subroutine1
        CFI EndBlock cfiBlock6

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
??oldBeaconInterval:
        DS 4
//  257 
//  258 
//  259 
//  260 
//  261 //-------------------------------------------------------------------------------------------------------
//  262 //  void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD ...)
//  263 //
//  264 //  DESCRIPTION:
//  265 //      This function prepares a coordinator realignment frame. If the pDestAddr argument points to an
//  266 //      extended address, the packet will be transmitted to a single device (doing orphan scanning). If
//  267 //      NULL, the packet will be broadcasted to all devices.
//  268 //
//  269 //  ARGUMENTS:
//  270 //      MAC_TX_PACKET *pPacket
//  271 //          A pointer to the packet to be transmitted
//  272 //      ADDRESS *pDestAddr
//  273 //          A pointer to the extended address of a specific device (mlmeOrphanResponse), or NULL if the
//  274 //          coordinator realignment is to be broadcasted (mlmeStartRequest)
//  275 //      WORD shortAddr
//  276 //          The short address of the orphaned device, or 0xFFFF when the coordinator realignment is
//  277 //          broadcasted
//  278 //      BOOL securityEnable
//  279 //          TBD
//  280 //      WORD newPanId
//  281 //          The PAN ID to be used in the future
//  282 //      UINT8 logicalChannel
//  283 //          The logical channel (11-26) to be used in the future
//  284 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  285 void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD shortAddr, BOOL securityEnable, WORD newPanId, UINT8 logicalChannel) NEAR {
mbcnPrepareCoordinatorRealignment:
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function mbcnPrepareCoordinatorRealignment
        FUNCALL mbcnPrepareCoordinatorRealignment, msupPrepareHeader
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnPrepareCoordinatorRealignment, msupPrepareHeader
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnPrepareCoordinatorRealignment, msupCalcPacketDuration
        LOCFRAME XSTACK, 18, STACK
        ARGFRAME XSTACK, 18, 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: 2
        MOV	A,#-0x2
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 18)
        MOV	?V0 + 2,R2
        MOV	?V0 + 3,R3
        MOV	?V0 + 4,R4
        MOV	?V0 + 5,R5
        MOV	A,#0x12
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R6,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R7,A
        MOV	A,#0x14
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	?V0 + 0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	?V0 + 1,A
        MOV	A,#0x16
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	?V0 + 7,A
//  286     WORD broadcast = 0xFFFF;
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  287     BYTE txOptions;
//  288     UINT8 temp;
//  289     BYTE   *pPayload;
//  290 
//  291     if (securityEnable == TRUE)
//  292       securityEnable = FALSE;
//  293 
//  294     // TX mode
//  295     pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
        MOV	A,R2
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,#0x1
        MOVX	@DPTR,A
//  296 
//  297     // Set the TX options
//  298     txOptions = TX_OPT_NONE;
        MOV	?V0 + 6,#0x0
//  299 
//  300 #if MAC_OPT_SECURITY
//  301     if (securityEnable) txOptions |= TX_OPT_SECURITY_ENABLE;
//  302 #endif
//  303 
//  304     // Generate the packet header
//  305     if (pDestAddr) {
        MOV	A,R4
        JNZ	??mbcnPrepareCoordinatorRealignment_0
        MOV	A,R5
??mbcnPrepareCoordinatorRealignment_0:
        JZ	??mbcnPrepareCoordinatorRealignment_1
//  306         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
//  307         txOptions |= TX_OPT_ACK_REQ;
        MOV	?V0 + 6,#0x1
//  308         msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_EXT, mpib.macPANId, (ADDRESS   *) &aExtendedAddress, broadcast, pDestAddr, txOptions);
        ; Setup parameters for call to function msupPrepareHeader
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 20)
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 22)
        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, 24)
        MOV	DPTR,#(mpib + 28)
        LCALL	?PUSH_XSTACK8_X_TWO
        CFI CFA_XSP16 add(XSP16, 26)
        MOV	R5,#0x1
        MOV	R4,#-0x34
        SJMP	??mbcnPrepareCoordinatorRealignment_2
        CFI CFA_XSP16 add(XSP16, 18)
//  309     } else {
//  310         // pPacket->retriesLeft will be ignored (no ack)
//  311         pPacket->txMode |= MTX_MODE_MAC_INTERNAL_BM;
??mbcnPrepareCoordinatorRealignment_1:
        MOV	A,#0x5
        MOVX	@DPTR,A
//  312         shortAddr = broadcast;
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        MOV	R6,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R7,A
//  313         msupPrepareHeader(pPack

⌨️ 快捷键说明

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