📄 mac.lst
字号:
\ 00003A 12.... LCALL mtxpReservePacket
\ 00003D 8A.. MOV ?V0 + 2,R2
\ 00003F 8B.. MOV ?V0 + 3,R3
194 if (!pPacket) {
\ 000041 EA MOV A,R2
\ 000042 7001 JNZ ??mcpsDataRequest_1
\ 000044 EB MOV A,R3
\ ??mcpsDataRequest_1:
\ 000045 7014 JNZ ??mcpsDataRequest_2
195 if (txOptions & TX_OPT_INDIRECT) {
\ 000047 741A MOV A,#0x1a
\ 000049 12.... LCALL ?XSTACK_DISP0_8
\ 00004C E0 MOVX A,@DPTR
\ 00004D A2E2 MOV C,0xE0 /* A */.2
\ 00004F 50E9 JNC ??mcpsDataRequest_0
196 mcpsDataConfirm(TRANSACTION_OVERFLOW, msduHandle);
\ 000051 ; Setup parameters for call to function mcpsDataConfirm
\ 000051 AA.. MOV R2,?V0 + 6
\ 000053 79F1 MOV R1,#-0xf
\ ??mcpsDataRequest_3:
\ 000055 12.... LCALL mcpsDataConfirm
197 return;
\ 000058 02.... 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:
\ 00005B EA MOV A,R2
\ 00005C 2486 ADD A,#-0x7a
\ 00005E F582 MOV DPL,A
\ 000060 EB MOV A,R3
\ 000061 3400 ADDC A,#0x0
\ 000063 F583 MOV DPH,A
\ 000065 7401 MOV A,#0x1
\ 000067 F0 MOVX @DPTR,A
217
218 // Set number of retries
219 pPacket->retriesLeft = aMaxFrameRetries;
\ 000068 EA MOV A,R2
\ 000069 2491 ADD A,#-0x6f
\ 00006B F582 MOV DPL,A
\ 00006D EB MOV A,R3
\ 00006E 3400 ADDC A,#0x0
\ 000070 F583 MOV DPH,A
\ 000072 7403 MOV A,#0x3
\ 000074 F0 MOVX @DPTR,A
220
221 // Store the msdu handle
222 pPacket->msduHandle = msduHandle;
\ 000075 EA MOV A,R2
\ 000076 2482 ADD A,#-0x7e
\ 000078 F582 MOV DPL,A
\ 00007A EB MOV A,R3
\ 00007B 3400 ADDC A,#0x0
\ 00007D F583 MOV DPH,A
\ 00007F E5.. MOV A,?V0 + 6
\ 000081 F0 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);
\ 000082 ; Setup parameters for call to function msupPrepareHeader
\ 000082 7414 MOV A,#0x14
\ 000084 12.... LCALL ?XSTACK_DISP0_8
\ 000087 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00008A 8E.. MOV ?V0 + 4,R6
\ 00008C 8F.. MOV ?V0 + 5,R7
\ 00008E 78.. MOV R0,#?V0 + 4
\ 000090 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 000093 7405 MOV A,#0x5
\ 000095 12.... LCALL ?XSTACK_DISP0_8
\ 000098 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 00009B 78.. MOV R0,#?V0 + 0
\ 00009D 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000A0 7422 MOV A,#0x22
\ 0000A2 12.... LCALL ?XSTACK_DISP0_8
\ 0000A5 E0 MOVX A,@DPTR
\ 0000A6 FD MOV R5,A
\ 0000A7 7408 MOV A,#0x8
\ 0000A9 12.... LCALL ?XSTACK_DISP0_8
\ 0000AC E0 MOVX A,@DPTR
\ 0000AD FC MOV R4,A
\ 0000AE 7901 MOV R1,#0x1
\ 0000B0 12.... LCALL msupPrepareHeader
\ 0000B3 7408 MOV A,#0x8
\ 0000B5 12.... LCALL ?DEALLOC_XSTACK8
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) {
\ 0000B8 E5.. MOV A,?V0 + 7
\ 0000BA C3 CLR C
\ 0000BB 9467 SUBB A,#0x67
\ 0000BD 400D JC ??mcpsDataRequest_5
255 mtxpReleasePacket(pPacket);
\ 0000BF ; Setup parameters for call to function mtxpReleasePacket
\ 0000BF AA.. MOV R2,?V0 + 2
\ 0000C1 AB.. MOV R3,?V0 + 3
\ 0000C3 12.... LCALL mtxpReleasePacket
256 mcpsDataConfirm(FRAME_TOO_LONG, msduHandle);
\ 0000C6 ; Setup parameters for call to function mcpsDataConfirm
\ 0000C6 AA.. MOV R2,?V0 + 6
\ 0000C8 79E5 MOV R1,#-0x1b
\ 0000CA 8089 SJMP ??mcpsDataRequest_3
257 return;
258 }
259
260 // Calculate total frame length
261 pPacket->length = (BYTE)(pPacket->headerLength + temp + MAC_FCS_LENGTH);
\ ??mcpsDataRequest_5:
\ 0000CC E5.. MOV A,?V0 + 2
\ 0000CE 2402 ADD A,#0x2
\ 0000D0 FE MOV R6,A
\ 0000D1 E5.. MOV A,?V0 + 3
\ 0000D3 3400 ADDC A,#0x0
\ 0000D5 FF MOV R7,A
\ 0000D6 85..82 MOV DPL,?V0 + 2
\ 0000D9 85..83 MOV DPH,?V0 + 3
\ 0000DC A3 INC DPTR
\ 0000DD E0 MOVX A,@DPTR
\ 0000DE 25.. ADD A,?V0 + 7
\ 0000E0 2402 ADD A,#0x2
\ 0000E2 8E82 MOV DPL,R6
\ 0000E4 8F83 MOV DPH,R7
\ 0000E6 F0 MOVX @DPTR,A
262
263 // Copy data into packet buffer
264 memcpy(pPayload, pMsdu, msduLength);
\ 0000E7 ; Setup parameters for call to function memcpy
\ 0000E7 85.... MOV ?V0 + 0,?V0 + 7
\ 0000EA 75..00 MOV ?V0 + 1,#0x0
\ 0000ED 78.. MOV R0,#?V0 + 0
\ 0000EF 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 0000F2 7419 MOV A,#0x19
\ 0000F4 12.... LCALL ?XSTACK_DISP0_8
\ 0000F7 E0 MOVX A,@DPTR
\ 0000F8 FC MOV R4,A
\ 0000F9 A3 INC DPTR
\ 0000FA E0 MOVX A,@DPTR
\ 0000FB FD MOV R5,A
\ 0000FC E5.. MOV A,?V0 + 2
\ 0000FE 241A ADD A,#0x1a
\ 000100 FA MOV R2,A
\ 000101 E5.. MOV A,?V0 + 3
\ 000103 3400 ADDC A,#0x0
\ 000105 FB MOV R3,A
\ 000106 90.... MOV DPTR,#(memcpy & 0xffff)
\ 000109 74.. MOV A,#((memcpy >> 16) & 0xff)
\ 00010B 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00010E 7402 MOV A,#0x2
\ 000110 12.... LCALL ?DEALLOC_XSTACK8
265
266 // Calculate the packet duration (including ack. and IFS)
267 pPacket->duration = msupCalcPacketDuration(pPacket->length, (BOOL)(pPacket->txOptions & TX_OPT_ACK_REQ));
\ 000113 ; Setup parameters for call to function msupCalcPacketDuration
\ 000113 E5.. MOV A,?V0 + 2
\ 000115 2481 ADD A,#-0x7f
\ 000117 F582 MOV DPL,A
\ 000119 E5.. MOV A,?V0 + 3
\ 00011B 3400 ADDC A,#0x0
\ 00011D F583 MOV DPH,A
\ 00011F E0 MOVX A,@DPTR
\ 000120 A2E0 MOV C,0xE0 /* A */.0
\ 000122 E4 CLR A
\ 000123 92E0 MOV 0xE0 /* A */.0,C
\ 000125 FA MOV R2,A
\ 000126 8E82 MOV DPL,R6
\ 000128 8F83 MOV DPH,R7
\ 00012A E0 MOVX A,@DPTR
\ 00012B F9 MOV R1,A
\ 00012C 12.... LCALL msupCalcPacketDuration
\ 00012F E5.. MOV A,?V0 + 2
\ 000131 2485 ADD A,#-0x7b
\ 000133 F582 MOV DPL,A
\ 000135 E5.. MOV A,?V0 + 3
\ 000137 3400 ADDC A,#0x0
\ 000139 F583 MOV DPH,A
\ 00013B E9 MOV A,R1
\ 00013C F0 MOVX @DPTR,A
268
269 do {
270 taskNumber = mschReserveTask();
\ ??mcpsDataRequest_6:
\ 00013D ; Setup parameters for call to function mschReserveTask
\ 00013D 12.... LCALL mschReserveTask
271 } while (taskNumber == NO_TASK);
\ 000140 74FF MOV A,#-0x1
\ 000142 69 XRL A,R1
\ 000143 60F8 JZ ??mcpsDataRequest_6
272 #if MAC_OPT_FFD
273 if (txOptions & TX_OPT_INDIRECT) {
\ 000145 AC.. MOV R4,?V0 + 2
\ 000147 AD.. MOV R5,?V0 + 3
\ 000149 741A MOV A,#0x1a
\ 00014B 12.... LCALL ?XSTACK_DISP0_8
\ 00014E E0 MOVX A,@DPTR
\ 00014F A2E2 MOV C,0xE0 /* A */.2
\ 000151 5012 JNC ??mcpsDataRequest_7
274 mschAddTask(taskNumber, MAC_TASK_PRI_MEDIUM, miqAddIndirectPacket, (WORD) pPacket);
\ 000153 ; Setup parameters for call to function mschAddTask
\ 000153 75.... MOV ?V0 + 0,#(miqAddIndirectPacket & 0xff)
\ 000156 75.... MOV ?V0 + 1,#((miqAddIndirectPacket >> 8) & 0xff)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -