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

📄 mac_tx_engine.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        CFI CFA_XSP16 add(XSP16, 15)
        MOV	A,R6
        MOV	R1,A
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        LCALL	mlmeCommStatusIndication
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 11)
//   98 
//   99 } // mtxCommStatusIndication
        MOV	R7,#0x4
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock0
//  100 
//  101 //-------------------------------------------------------------------------------------------------------
//  102 //  void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET *pPacket, MAC_TASK_INFO *pTask)
//  103 //
//  104 //  DESCRIPTION:
//  105 //      This function is used to avoid code duplication when finishing a packet transmission (using the
//  106 //      TX engine. This function is called by mtxScheduleTransmission(...) as the last step of the
//  107 //      transmission procedure.
//  108 //
//  109 //      This function handles failures for all transmission types, and success for all data, and some
//  110 //      MAC commands. The other MAC commands are handled by the RX engine.
//  111 //
//  112 //  PARAMETERS:
//  113 //      MAC_ENUM status
//  114 //          The result of the transmission (SUCCESS, CHANNEL_ACCESS_FAILURE, etc.)
//  115 //      MAC_TX_PACKET *pPacket
//  116 //          A pointer to the packet that was transmitted
//  117 //      MAC_TASK_INFO *pTask
//  118 //          A pointer to the task running mtxScheduleTransmission(...)
//  119 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  120 ROOT void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET   *pPacket, MAC_TASK_INFO   *pTask) {
mtxFinishTransmission:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function mtxFinishTransmission
        FUNCALL mtxFinishTransmission, mcpsDataConfirm
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, macSetState
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mlmeAssociateConfirm
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mlmeDisassociateConfirm
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, macSetState
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mlmePollConfirm
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mlmeAssociateConfirm
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mtimSetCallback
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL mtxFinishTransmission, mtimSetCallback
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL mtxFinishTransmission, mtxCommStatusIndication
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, miqSetRequested
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mschRemoveTask
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mschAddTask
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL mtxFinishTransmission, mschRemoveTask
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, STACK
        FUNCALL mtxFinishTransmission, mtxpReleasePacket
        LOCFRAME XSTACK, 17, STACK
        ARGFRAME XSTACK, 17, 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: 2
        MOV	A,#-0x2
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,R4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R5
        MOVX	@DPTR,A
        MOV	?V0 + 0,R1
        MOV	A,R2
        MOV	R6,A
        MOV	A,R3
        MOV	R7,A
//  121     BOOL isMacInternal;
//  122     BOOL handleCmdSuccess;
//  123     MAC_STATE_TYPE macState;
//  124 
//  125     // Copy some variables from the packet structure, since we'll release the packet before we make the call to
//  126     // the higher layer
//  127     isMacInternal = pPacket->txMode & MTX_MODE_MAC_INTERNAL_BM;
        MOV	A,R6
        ADD	A,#-0x7a
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        ANL	A,#0x4
        MOV	R2,A
//  128     handleCmdSuccess = (pPacket->txMode & MTX_MODE_SCAN_RELATED_BM) ||
//  129                        (pPacket->commandType == CMD_ASSOCIATION_RESPONSE) ||
//  130                        (pPacket->commandType == CMD_DISASSOCIATION_NOTIFICATION) ||
//  131                        (pPacket->commandType == CMD_COORDINATOR_REALIGNMENT);
        MOV	A,R6
        ADD	A,#-0x7d
        MOV	R0,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	R1,A
        MOVX	A,@DPTR
        MOV	C,0xE0 /* A   */.3
        JC	??mtxFinishTransmission_0
        MOV	DPL,R0
        MOV	DPH,R1
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	A,#0x2
        XRL	A,R3
        JZ	??mtxFinishTransmission_0
        MOV	A,#0x3
        XRL	A,R3
        JZ	??mtxFinishTransmission_0
        MOV	A,#0x8
        XRL	A,R3
        JNZ	??mtxFinishTransmission_1
??mtxFinishTransmission_0:
        MOV	R3,#0x1
        SJMP	??mtxFinishTransmission_2
??mtxFinishTransmission_1:
        MOV	R3,#0x0
//  132 
//  133     mtxInfo.status = MTX_STATUS_FINISHED;
??mtxFinishTransmission_2:
        MOV	A,#0x7
        MOV	DPTR,#(mtxInfo + 4)
        MOVX	@DPTR,A
//  134 
//  135     // Make the call to the higher layer
//  136     switch (pPacket->type) {
        MOV	A,R6
        ADD	A,#-0x80
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_0`:
        DB        1
        DB        2
        DW        ??mtxFinishTransmission_3
        DW        ??mtxFinishTransmission_4
        DW        ??mtxFinishTransmission_3
        DW        ??mtxFinishTransmission_5
//  137     case FT_DATA:
//  138         if (!isMacInternal) mcpsDataConfirm(status, pPacket->msduHandle);
??mtxFinishTransmission_4:
        MOV	A,R2
        JZ	$+5
        LJMP	??mtxFinishTransmission_3
        ; Setup parameters for call to function mcpsDataConfirm
        MOV	A,R6
        ADD	A,#-0x7e
        MOV	DPL,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        MOV	R2,A
        MOV	R1,?V0 + 0
        LCALL	mcpsDataConfirm
        LJMP	??mtxFinishTransmission_3
//  139         break;
//  140     case FT_MAC_COMMAND:
//  141 
//  142         // SUCCESS is usually handled by the RX engine or not at all
//  143         if ((status == SUCCESS) && !handleCmdSuccess) break;
??mtxFinishTransmission_5:
        MOV	A,?V0 + 0
        JNZ	??mtxFinishTransmission_6
        MOV	A,R3
        JNZ	$+5
        LJMP	??mtxFinishTransmission_3
//  144 
//  145         switch (pPacket->commandType) {
??mtxFinishTransmission_6:
        MOV	DPL,R0
        MOV	DPH,R1
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_1`:
        DB        1
        DB        7
        DW        ??mtxFinishTransmission_3
        DW        ??mtxFinishTransmission_7
        DW        ??mtxFinishTransmission_8
        DW        ??mtxFinishTransmission_9
        DW        ??mtxFinishTransmission_10
        DW        ??mtxFinishTransmission_3
        DW        ??mtxFinishTransmission_11
        DW        ??mtxFinishTransmission_12
        DW        ??mtxFinishTransmission_8
//  146         case CMD_ASSOCIATION_REQUEST:
//  147             macSetState(MAC_STATE_DEFAULT);
??mtxFinishTransmission_7:
        ; Setup parameters for call to function macSetState
        MOV	R1,#0x0
        LCALL	macSetState
//  148             mlmeAssociateConfirm(0xFFFF, status);
        ; Setup parameters for call to function mlmeAssociateConfirm
??mtxFinishTransmission_13:
        MOV	R1,?V0 + 0
        MOV	R2,#-0x1
        MOV	R3,#-0x1
        LCALL	mlmeAssociateConfirm
        SJMP	??mtxFinishTransmission_3
//  149             break;
//  150         case CMD_DISASSOCIATION_NOTIFICATION:
//  151             mlmeDisassociateConfirm(status);
??mtxFinishTransmission_9:
        ; Setup parameters for call to function mlmeDisassociateConfirm
        MOV	R1,?V0 + 0
        LCALL	mlmeDisassociateConfirm
        SJMP	??mtxFinishTransmission_3
//  152             break;
//  153         case CMD_DATA_REQUEST:
//  154             macState = macInfo.state;
??mtxFinishTransmission_10:
        MOV	DPTR,#macInfo
        MOVX	A,@DPTR
        MOV	?V0 + 1,A
//  155             macSetState(MAC_STATE_DEFAULT);
        ; Setup parameters for call to function macSetState
        MOV	R1,#0x0
        LCALL	macSetState
//  156             switch (macState) {
        MOV	A,?V0 + 1
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mtxFinishTransmission>_2`:
        DB        17
        DB        1
        DW        ??mtxFinishTransmission_3
        DW        ??mtxFinishTransmission_14
        DW        ??mtxFinishTransmission_13
//  157                 case MAC_STATE_TX_MANUAL_DATA_REQUEST:  mlmePollConfirm(status); break;
??mtxFinishTransmission_14:
        ; Setup parameters for call to function mlmePollConfirm
        MOV	R1,?V0 + 0
        LCALL	mlmePollConfirm
        SJMP	??mtxFinishTransmission_3
//  158                 case MAC_STATE_TX_ASSOC_DATA_REQUEST: mlmeAssociateConfirm(0xFFFF, status); break;
//  159                 default: break;
//  160             }
//  161             break;
//  162         case CMD_BEACON_REQUEST:
//  163             mtimSetCallback(mscChannelTimeout, ((UINT32) aBaseSuperframeDuration / (UINT32) aUnitBackoffPeriod) * (((UINT32) 1 << mscInfo.scanDuration) + 1));
??mtxFinishTransmission_12:
        ; Setup parameters for call to function mtimSetCallback
        MOV	?V0 + 4,#0x1
        MOV	?V0 + 5,#0x0
        MOV	?V0 + 6,#0x0
        MOV	?V0 + 7,#0x0
        MOV	DPTR,#(mscInfo + 5)
        MOVX	A,@DPTR
        MOV	R0,#?V0 + 4
        LCALL	?L_SHL
        MOV	DPTR,#__Constant_1
        MOV	R0,#?V0 + 4
        LCALL	?L_ADD_X
        MOV	DPTR,#__Constant_30
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	R0,#?V0 + 4
        MOV	R1,#?V0 + 0
        LCALL	?L_MUL
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_FOUR
        CFI CFA_XSP16 add(XSP16, 21)
??mtxFinishTransmission_15:
        MOV	R1,#(mscChannelTimeout & 0xff)
        MOV	R2,#((mscChannelTimeout >> 8) & 0xff)
        MOV	R3,#((mscChannelTimeout >> 16) & 0xff)
        LCALL	mtimSetCallback
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 17)
        SJMP	??mtxFinishTransmission_3
//  164             break;
//  165         case CMD_PAN_ID_CONFLICT_NOTIFICATION:
//  166             break;
//  167         case CMD_ORPHAN_NOTIFICATION:
//  168             mtimSetCallback(mscChannelTimeout, (UINT32) aResponseWaitTime / (UINT32) aUnitBackoffPeriod);

⌨️ 快捷键说明

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