📄 mac_tx_engine.lst
字号:
\ 00003A 89.. MOV ?V0 + 1,R1
93 pSrcAddr = (ADDRESS *) ((BYTE *) pDstAddr + ((dstAddrMode == DEST_ADDR_SHORT) ?
94 2 : 8) + ((*(pPacket->pHeader) & INTRA_PAN_BM) ? 0 : 2));
\ 00003C 7408 MOV A,#0x8
\ 00003E 6F XRL A,R7
\ 00003F 7004 JNZ ??mtxCommStatusIndication_0
\ 000041 7802 MOV R0,#0x2
\ 000043 8002 SJMP ??mtxCommStatusIndication_1
\ ??mtxCommStatusIndication_0:
\ 000045 7808 MOV R0,#0x8
\ ??mtxCommStatusIndication_1:
\ 000047 8C82 MOV DPL,R4
\ 000049 8D83 MOV DPH,R5
\ 00004B A3 INC DPTR
\ 00004C A3 INC DPTR
\ 00004D A3 INC DPTR
\ 00004E E0 MOVX A,@DPTR
\ 00004F A2E6 MOV C,0xE0 /* A */.6
\ 000051 5004 JNC ??mtxCommStatusIndication_2
\ 000053 7C00 MOV R4,#0x0
\ 000055 8002 SJMP ??mtxCommStatusIndication_3
\ ??mtxCommStatusIndication_2:
\ 000057 7C02 MOV R4,#0x2
\ ??mtxCommStatusIndication_3:
\ 000059 E5.. MOV A,?V0 + 0
\ 00005B 28 ADD A,R0
\ 00005C F8 MOV R0,A
\ 00005D E9 MOV A,R1
\ 00005E 3400 ADDC A,#0x0
\ 000060 F9 MOV R1,A
\ 000061 EC MOV A,R4
\ 000062 28 ADD A,R0
\ 000063 FC MOV R4,A
\ 000064 E4 CLR A
\ 000065 39 ADDC A,R1
\ 000066 FD MOV R5,A
95
96 // Make the call to the higher layer
97 mlmeCommStatusIndication(*((WORD *) pTemp), srcAddrMode, pSrcAddr, dstAddrMode, pDstAddr, status);
\ 000067 ; Setup parameters for call to function mlmeCommStatusIndication
\ 000067 78.. MOV R0,#?V0 + 2
\ 000069 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 00006C 78.. MOV R0,#?V0 + 0
\ 00006E 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000071 EF MOV A,R7
\ 000072 F5.. MOV ?V0 + 0,A
\ 000074 78.. MOV R0,#?V0 + 0
\ 000076 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000079 EE MOV A,R6
\ 00007A F9 MOV R1,A
\ 00007B 8A82 MOV DPL,R2
\ 00007D 8B83 MOV DPH,R3
\ 00007F E0 MOVX A,@DPTR
\ 000080 FA MOV R2,A
\ 000081 A3 INC DPTR
\ 000082 E0 MOVX A,@DPTR
\ 000083 FB MOV R3,A
\ 000084 12.... LCALL mlmeCommStatusIndication
\ 000087 7404 MOV A,#0x4
\ 000089 12.... LCALL ?DEALLOC_XSTACK8
98
99 } // mtxCommStatusIndication
\ 00008C 7F04 MOV R7,#0x4
\ 00008E 02.... LJMP ?FUNC_LEAVE_XDATA
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 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
120 ROOT void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET *pPacket, MAC_TASK_INFO *pTask) {
\ mtxFinishTransmission:
\ 000000 74F1 MOV A,#-0xf
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 15
\ 000005 ; Auto size: 2
\ 000005 74FE MOV A,#-0x2
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 85..82 MOV DPL,?XSP + 0
\ 00000D 85..83 MOV DPH,?XSP + 1
\ 000010 EC MOV A,R4
\ 000011 F0 MOVX @DPTR,A
\ 000012 A3 INC DPTR
\ 000013 ED MOV A,R5
\ 000014 F0 MOVX @DPTR,A
\ 000015 89.. MOV ?V0 + 0,R1
\ 000017 EA MOV A,R2
\ 000018 FE MOV R6,A
\ 000019 EB MOV A,R3
\ 00001A FF 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;
\ 00001B EE MOV A,R6
\ 00001C 2486 ADD A,#-0x7a
\ 00001E F582 MOV DPL,A
\ 000020 EF MOV A,R7
\ 000021 3400 ADDC A,#0x0
\ 000023 F583 MOV DPH,A
\ 000025 E0 MOVX A,@DPTR
\ 000026 5404 ANL A,#0x4
\ 000028 FA 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);
\ 000029 EE MOV A,R6
\ 00002A 2483 ADD A,#-0x7d
\ 00002C F8 MOV R0,A
\ 00002D EF MOV A,R7
\ 00002E 3400 ADDC A,#0x0
\ 000030 F9 MOV R1,A
\ 000031 E0 MOVX A,@DPTR
\ 000032 A2E3 MOV C,0xE0 /* A */.3
\ 000034 4015 JC ??mtxFinishTransmission_0
\ 000036 8882 MOV DPL,R0
\ 000038 8983 MOV DPH,R1
\ 00003A E0 MOVX A,@DPTR
\ 00003B FB MOV R3,A
\ 00003C 7402 MOV A,#0x2
\ 00003E 6B XRL A,R3
\ 00003F 600A JZ ??mtxFinishTransmission_0
\ 000041 7403 MOV A,#0x3
\ 000043 6B XRL A,R3
\ 000044 6005 JZ ??mtxFinishTransmission_0
\ 000046 7408 MOV A,#0x8
\ 000048 6B XRL A,R3
\ 000049 7004 JNZ ??mtxFinishTransmission_1
\ ??mtxFinishTransmission_0:
\ 00004B 7B01 MOV R3,#0x1
\ 00004D 8002 SJMP ??mtxFinishTransmission_2
\ ??mtxFinishTransmission_1:
\ 00004F 7B00 MOV R3,#0x0
132
133 mtxInfo.status = MTX_STATUS_FINISHED;
\ ??mtxFinishTransmission_2:
\ 000051 7407 MOV A,#0x7
\ 000053 90.... MOV DPTR,#(mtxInfo + 4)
\ 000056 F0 MOVX @DPTR,A
134
135 // Make the call to the higher layer
136 switch (pPacket->type) {
\ 000057 EE MOV A,R6
\ 000058 2480 ADD A,#-0x80
\ 00005A F582 MOV DPL,A
\ 00005C EF MOV A,R7
\ 00005D 3400 ADDC A,#0x0
\ 00005F F583 MOV DPH,A
\ 000061 E0 MOVX A,@DPTR
\ 000062 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for mtxFinishTransmission>_0`:
\ 000065 01 DB 1
\ 000066 02 DB 2
\ 000067 .... DW ??mtxFinishTransmission_3
\ 000069 .... DW ??mtxFinishTransmission_4
\ 00006B .... DW ??mtxFinishTransmission_3
\ 00006D .... DW ??mtxFinishTransmission_5
137 case FT_DATA:
138 if (!isMacInternal) mcpsDataConfirm(status, pPacket->msduHandle);
\ ??mtxFinishTransmission_4:
\ 00006F EA MOV A,R2
\ 000070 6003 JZ $+5
\ 000072 02.... LJMP ??mtxFinishTransmission_3
\ 000075 ; Setup parameters for call to function mcpsDataConfirm
\ 000075 EE MOV A,R6
\ 000076 2482 ADD A,#-0x7e
\ 000078 F582 MOV DPL,A
\ 00007A EF MOV A,R7
\ 00007B 3400 ADDC A,#0x0
\ 00007D F583 MOV DPH,A
\ 00007F E0 MOVX A,@DPTR
\ 000080 FA MOV R2,A
\ 000081 A9.. MOV R1,?V0 + 0
\ 000083 12.... LCALL mcpsDataConfirm
\ 000086 02.... 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:
\ 000089 E5.. MOV A,?V0 + 0
\ 00008B 7006 JNZ ??mtxFinishTransmission_6
\ 00008D EB MOV A,R3
\ 00008E 7003 JNZ $+5
\ 000090 02.... LJMP ??mtxFinishTransmission_3
144
145 switch (pPacket->commandType) {
\ ??mtxFinishTransmission_6:
\ 000093 8882 MOV DPL,R0
\ 000095 8983 MOV DPH,R1
\ 000097 E0 MOVX A,@DPTR
\ 000098 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for mtxFinishTransmission>_1`:
\ 00009B 01 DB 1
\ 00009C 07 DB 7
\ 00009D .... DW ??mtxFinishTransmission_3
\ 00009F .... DW ??mtxFinishTransmission_7
\ 0000A1 .... DW ??mtxFinishTransmission_8
\ 0000A3 .... DW ??mtxFinishTransmission_9
\ 0000A5 .... DW ??mtxFinishTransmission_10
\ 0000A7 .... DW ??mtxFinishTransmission_3
\ 0000A9 .... DW ??mtxFinishTransmission_11
\ 0000AB .... DW ??mtxFinishTransmission_12
\ 0000AD .... DW ??mtxFinishTransmission_8
146 case CMD_ASSOCIATION_REQUEST:
147 macSetState(MAC_STATE_DEFAULT);
\ ??mtxFinishTransmission_7:
\ 0000AF ; Setup parameters for call to function macSetState
\ 0000AF 7900 MOV R1,#0x0
\ 0000B1 12.... LCALL macSetState
148 mlmeAssociateConfirm(0xFFFF, status);
\ 0000B4 ; Setup parameters for call to function mlmeAssociateConfirm
\ ??mtxFinishTransmission_13:
\ 0000B4 A9.. MOV R1,?V0 + 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -