📄 mac_support.lst
字号:
318
319 } // msupSetChannel
\ ??msupSetChannel_1:
\ 000069 7F02 MOV R7,#0x2
\ 00006B 02.... LJMP ?FUNC_LEAVE_XDATA
320
321
322
323
324 /*******************************************************************************************************
325 *******************************************************************************************************
326 ************************** TX PACKET GENERATION **************************
327 *******************************************************************************************************
328 *******************************************************************************************************/
329
330
331
332
333 //-------------------------------------------------------------------------------------------------------
334 // msupPrepareHeader(MAC_TX_PACKET *pPacket, BYTE type, BYTE addrModes, WORD srcPanId, ADDRESS ...)
335 //
336 // DESCRIPTION:
337 // Packet header assembly function, used for beacon, data and command frames.
338 //
339 // PARAMETERS:
340 // MAC_TX_PACKET *pPacket
341 // The packet structure to update (this function affects the header part)
342 // BYTE type
343 // FT_BEACON, FT_DATA or FT_COMMAND
344 // BYTE addrModes
345 // Address mode for source and destination
346 // (SRC_ADDR_SHORT, SRC_ADDR_EXT or 0) | (DEST_ADDR_SHORT, DEST_ADDR_EXT or 0)
347 // WORD srcPanId
348 // Source PAN identifier
349 // ADDRESS *pSrcAddr
350 // Pointer to the source address (short or extended)
351 // WORD destPanId,
352 // Destination PAN identifier
353 // ADDRESS *pDestAddr,
354 // Pointer to the destination address (short or extended)
355 // BYTE txOptions
356 // (TX_OPT_SECURITY_ENABLE | TX_OPT_INDIRECT | TX_OPT_GTS | TX_OPT_ACK_REQ) or TX_OPT_NONE
357 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
358 ROOT __xdata_reentrant void msupPrepareHeader(MAC_TX_PACKET *pPacket, BYTE type, BYTE addrModes, WORD srcPanId,
\ msupPrepareHeader:
359 ADDRESS *pSrcAddr, WORD destPanId, ADDRESS *pDestAddr, BYTE txOptions)
360 {
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0 + 2,R2
\ 000007 8B.. MOV ?V0 + 3,R3
\ 000009 89.. MOV ?V0 + 0,R1
\ 00000B 8C.. MOV ?V0 + 6,R4
\ 00000D 740E MOV A,#0xe
\ 00000F 12.... LCALL ?XSTACK_DISP0_8
\ 000012 E0 MOVX A,@DPTR
\ 000013 FE MOV R6,A
\ 000014 A3 INC DPTR
\ 000015 E0 MOVX A,@DPTR
\ 000016 FF MOV R7,A
\ 000017 7412 MOV A,#0x12
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C E0 MOVX A,@DPTR
\ 00001D F8 MOV R0,A
\ 00001E A3 INC DPTR
\ 00001F E0 MOVX A,@DPTR
\ 000020 F9 MOV R1,A
361 BYTE temp;
362 UINT8 length = 0;
363
364 // Packet type and options
365 pPacket->type = type;
\ 000021 EA MOV A,R2
\ 000022 2480 ADD A,#-0x80
\ 000024 F582 MOV DPL,A
\ 000026 EB MOV A,R3
\ 000027 3400 ADDC A,#0x0
\ 000029 F583 MOV DPH,A
\ 00002B E5.. MOV A,?V0 + 0
\ 00002D F0 MOVX @DPTR,A
366 pPacket->txOptions = txOptions;
\ 00002E EA MOV A,R2
\ 00002F 2481 ADD A,#-0x7f
\ 000031 F582 MOV DPL,A
\ 000033 EB MOV A,R3
\ 000034 3400 ADDC A,#0x0
\ 000036 F583 MOV DPH,A
\ 000038 ED MOV A,R5
\ 000039 F0 MOVX @DPTR,A
367
368 // Frame control field
369 temp = (BYTE)(type & FRAME_TYPE_BM);
\ 00003A 7407 MOV A,#0x7
\ 00003C 55.. ANL A,?V0 + 0
\ 00003E F5.. MOV ?V0 + 1,A
370 #if MAC_OPT_SECURITY
371 pPacket->securitySetup.micLength = 0;
372
373 if (txOptions & TX_OPT_SECURITY_ENABLE) {
374 temp |= SECURITY_ENABLED_BM;
375 // Set securitySuite or securityStatus (UNAVAILABLE_KEY)
376 msecFindTxSecurityMaterial(pPacket, TRUE, ((addrModes & DEST_ADDR_BM) >> 2), destPanId, pDestAddr);
377
378 } else {
379 pPacket->securitySuite = MAC_SECURITY_NONE;
380 }
381 #else
382 pPacket->securitySuite = MAC_SECURITY_NONE;
\ 000040 EA MOV A,R2
\ 000041 2492 ADD A,#-0x6e
\ 000043 F582 MOV DPL,A
\ 000045 EB MOV A,R3
\ 000046 3400 ADDC A,#0x0
\ 000048 F583 MOV DPH,A
\ 00004A E4 CLR A
\ 00004B F0 MOVX @DPTR,A
383 #endif
384 if (txOptions & TX_OPT_ACK_REQ) temp |= ACK_REQ_BM;
\ 00004C ED MOV A,R5
\ 00004D A2E0 MOV C,0xE0 /* A */.0
\ 00004F 5006 JNC ??msupPrepareHeader_0
\ 000051 E5.. MOV A,?V0 + 1
\ 000053 D2E5 SETB 0xE0 /* A */.5
\ 000055 F5.. MOV ?V0 + 1,A
385 if (((addrModes & BOTH_ADDR_USED) == BOTH_ADDR_USED) && (srcPanId == destPanId)) temp |= INTRA_PAN_BM;
\ ??msupPrepareHeader_0:
\ 000057 7488 MOV A,#-0x78
\ 000059 55.. ANL A,?V0 + 6
\ 00005B 6488 XRL A,#0x88
\ 00005D 700E JNZ ??msupPrepareHeader_1
\ 00005F E8 MOV A,R0
\ 000060 6E XRL A,R6
\ 000061 7002 JNZ ??msupPrepareHeader_2
\ 000063 E9 MOV A,R1
\ 000064 6F XRL A,R7
\ ??msupPrepareHeader_2:
\ 000065 7006 JNZ ??msupPrepareHeader_1
\ 000067 E5.. MOV A,?V0 + 1
\ 000069 D2E6 SETB 0xE0 /* A */.6
\ 00006B F5.. MOV ?V0 + 1,A
386 pPacket->pHeader[length++] = temp;
\ ??msupPrepareHeader_1:
\ 00006D 8A82 MOV DPL,R2
\ 00006F 8B83 MOV DPH,R3
\ 000071 A3 INC DPTR
\ 000072 A3 INC DPTR
\ 000073 A3 INC DPTR
\ 000074 E5.. MOV A,?V0 + 1
\ 000076 F0 MOVX @DPTR,A
387 pPacket->pHeader[length++] = addrModes;
\ 000077 8A82 MOV DPL,R2
\ 000079 8B83 MOV DPH,R3
\ 00007B A3 INC DPTR
\ 00007C A3 INC DPTR
\ 00007D A3 INC DPTR
\ 00007E A3 INC DPTR
\ 00007F EC MOV A,R4
\ 000080 F0 MOVX @DPTR,A
388
389 // Sequence number
390 if (type == FT_BEACON) {
\ 000081 EA MOV A,R2
\ 000082 2405 ADD A,#0x5
\ 000084 FA MOV R2,A
\ 000085 EB MOV A,R3
\ 000086 3400 ADDC A,#0x0
\ 000088 FB MOV R3,A
\ 000089 E5.. MOV A,?V0 + 0
\ 00008B 700E JNZ ??msupPrepareHeader_3
391 pPacket->pHeader[length++] = mpib.macBSN++;
\ 00008D 90.... MOV DPTR,#(mpib + 13)
\ 000090 E0 MOVX A,@DPTR
\ 000091 8A82 MOV DPL,R2
\ 000093 8B83 MOV DPH,R3
\ 000095 F0 MOVX @DPTR,A
\ 000096 90.... MOV DPTR,#(mpib + 13)
\ 000099 800C SJMP ??msupPrepareHeader_4
392 } else {
393 pPacket->pHeader[length++] = mpib.macDSN++;
\ ??msupPrepareHeader_3:
\ 00009B 90.... MOV DPTR,#(mpib + 24)
\ 00009E E0 MOVX A,@DPTR
\ 00009F 8A82 MOV DPL,R2
\ 0000A1 8B83 MOV DPH,R3
\ 0000A3 F0 MOVX @DPTR,A
\ 0000A4 90.... MOV DPTR,#(mpib + 24)
\ ??msupPrepareHeader_4:
\ 0000A7 E0 MOVX A,@DPTR
\ 0000A8 04 INC A
\ 0000A9 F0 MOVX @DPTR,A
\ 0000AA 75..03 MOV ?V0 + 0,#0x3
\ 0000AD 740C MOV A,#0xc
\ 0000AF 55.. ANL A,?V0 + 6
\ 0000B1 FC MOV R4,A
\ 0000B2 7003 JNZ $+5
\ 0000B4 02.... LJMP ??msupPrepareHeader_5
\ 0000B7 E8 MOV A,R0
\ 0000B8 85..82 MOV DPL,?V0 + 2
\ 0000BB 85..83 MOV DPH,?V0 + 3
\ 0000BE A3 INC DPTR
\ 0000BF A3 INC DPTR
\ 0000C0 A3 INC DPTR
\ 0000C1 A3 INC DPTR
\ 0000C2 A3 INC DPTR
\ 0000C3 A3 INC DPTR
\ 0000C4 F0 MOVX @DPTR,A
394 }
395
396 // Destination PAN ID
397 if (addrModes & DEST_ADDR_BM) {
398 pPacket->pHeader[length++] = LOBYTE(destPanId);
399 pPacket->pHeader[length++] = HIBYTE(destPanId);
\ 0000C5 E9 MOV A,R1
\ 0000C6 85..82 MOV DPL,?V0 + 2
\ 0000C9 85..83 MOV DPH,?V0 + 3
\ 0000CC A3 INC DPTR
\ 0000CD A3 INC DPTR
\ 0000CE A3 INC DPTR
\ 0000CF A3 INC DPTR
\ 0000D0 A3 INC DPTR
\ 0000D1 A3 INC DPTR
\ 0000D2 A3 INC DPTR
\ 0000D3 F0 MOVX @DPTR,A
\ 0000D4 75..05 MOV ?V0 + 0,#0x5
400 pPacket->toCoord = mpib.macPANId == destPanId;
\ 0000D7 90.... MOV DPTR,#(mpib + 28)
\ 0000DA E0 MOVX A,@DPTR
\ 0000DB 68 XRL A,R0
\ 0000DC 7003 JNZ ??msupPrepareHeader_6
\ 0000DE A3 INC DPTR
\ 0000DF E0 MOVX A,@DPTR
\ 0000E0 69 XRL A,R1
\ ??msupPrepareHeader_6:
\ 0000E1 7004 JNZ ??msupPrepareHeader_7
\ 0000E3 7D01 MOV R5,#0x1
\ 0000E5 8002 SJMP ??msupPrepareHeader_8
\ ??msupPrepareHeader_7:
\ 0000E7 7D00 MOV R5,#0x0
\ ??msupPrepareHeader_8:
\ 0000E9 E5.. MOV A,?V0 + 2
\ 0000EB 2484 ADD A,#-0x7c
\ 0000ED F582 MOV DPL,A
\ 0000EF E5.. MOV A,?V0 + 3
\ 0000F1 3400 ADDC A,#0x0
\ 0000F3 F583 MOV DPH,A
\ 0000F5 ED MOV A,R5
\ 0000F6 F0 MOVX @DPTR,A
401 } else {
402 pPacket->toCoord = FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -