📄 mac_indirect_queue.s51
字号:
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x5
MOVX @DPTR,A
// 491 pPacket->retriesLeft = 1;
MOV A,R6
ADD A,#-0x6f
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,#0x1
MOVX @DPTR,A
// 492
// 493 // Generate the packet header (and find security material, if enabled)
// 494 if (mpib.macShortAddress >= 0xFFFE) {
MOV DPTR,#(mpib + 32)
CLR C
MOVX A,@DPTR
SUBB A,#-0x2
INC DPTR
MOVX A,@DPTR
SUBB A,#-0x1
MOV A,?V0 + 2
JC ??miqTransmitNoDataPacket_5
// 495 msupPrepareHeader(pPacket, FT_DATA, (isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT) | SRC_ADDR_EXT, mpib.macPANId, (ADDRESS *) &aExtendedAddress, mpib.macPANId, pDestAddr, txOptions);
JZ ??miqTransmitNoDataPacket_6
MOV ?V0 + 4,#0xc
SJMP ??miqTransmitNoDataPacket_7
??miqTransmitNoDataPacket_6:
MOV ?V0 + 4,#0x8
??miqTransmitNoDataPacket_7:
MOV DPTR,#(mpib + 28)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
; Setup parameters for call to function msupPrepareHeader
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 15)
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 17)
MOV ?V0 + 0,#(aExtendedAddress & 0xff)
MOV ?V0 + 1,#((aExtendedAddress >> 8) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 19)
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 21)
MOV R5,#0x1
MOV A,?V0 + 4
ORL A,#0xc0
SJMP ??miqTransmitNoDataPacket_8
CFI CFA_XSP16 add(XSP16, 13)
// 496 } else {
// 497 msupPrepareHeader(pPacket, FT_DATA, (isExtAddr ? DEST_ADDR_EXT : DEST_ADDR_SHORT) | SRC_ADDR_SHORT, mpib.macPANId, (ADDRESS *) &mpib.macShortAddress, mpib.macPANId, pDestAddr, txOptions);
??miqTransmitNoDataPacket_5:
JZ ??miqTransmitNoDataPacket_9
MOV ?V0 + 4,#0xc
SJMP ??miqTransmitNoDataPacket_10
??miqTransmitNoDataPacket_9:
MOV ?V0 + 4,#0x8
??miqTransmitNoDataPacket_10:
MOV DPTR,#(mpib + 28)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
; Setup parameters for call to function msupPrepareHeader
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 15)
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 17)
MOV ?V0 + 0,#((mpib + 32) & 0xff)
MOV ?V0 + 1,#(((mpib + 32) >> 8) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 19)
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 21)
MOV R5,#0x1
MOV A,?V0 + 4
ORL A,#0x80
??miqTransmitNoDataPacket_8:
MOV R4,A
MOV R1,#0x1
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL msupPrepareHeader
MOV A,#0x8
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 498 }
// 499
// 500 // Calculate and set the total packet length (TBD: will security ever be used / is it allowed by the spec?)
// 501 #if MAC_OPT_SECURITY
// 502 pPacket->length = pPacket->headerLength + pPacket->securitySetup.micLength + MAC_FCS_LENGTH;
// 503 #else
// 504 pPacket->length = pPacket->headerLength + MAC_FCS_LENGTH;
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
ADD A,#0x2
MOV R1,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOVX @DPTR,A
// 505 #endif
// 506
// 507 // Calculate the packet duration (including ack. and IFS)
// 508 pPacket->duration = msupCalcPacketDuration(pPacket->length, pPacket->txOptions & TX_OPT_ACK_REQ);
; Setup parameters for call to function msupCalcPacketDuration
MOV A,R6
ADD A,#-0x7f
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
MOV C,0xE0 /* A */.0
CLR A
MOV 0xE0 /* A */.0,C
MOV R2,A
LCALL msupCalcPacketDuration
MOV A,R6
ADD A,#-0x7b
MOV DPL,A
MOV A,R7
ADDC A,#0x0
MOV DPH,A
MOV A,R1
MOVX @DPTR,A
// 509
// 510 // Initiate the transmission
// 511 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 16)
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A
MOV R2,#0x0
MOV R1,?V0 + 3
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 13)
// 512
// 513 return TRUE;
MOV R1,#0x1
??miqTransmitNoDataPacket_3:
MOV R7,#0x6
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock7
// 514 } // miqTransmitNoDataPacket
// 515
// 516
// 517
// 518
// 519 /*******************************************************************************************************
// 520 *******************************************************************************************************
// 521 ************************** INDIRECT PACKET EXPIRATION **************************
// 522 *******************************************************************************************************
// 523 *******************************************************************************************************/
// 524
// 525
// 526
// 527
// 528 //-------------------------------------------------------------------------------------------------------
// 529 // void miqDecrTimeToLive(void)
// 530 //
// 531 // DESCRIPTION:
// 532 // Decrements the "time to live" variable for all indirect packets, until it reaches zero
// 533 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 534 ROOT void miqDecrTimeToLive(void) {
miqDecrTimeToLive:
CFI Block cfiBlock8 Using cfiCommon0
CFI Function miqDecrTimeToLive
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 535 UINT8 n;
// 536 for (n = 0; n < MAC_OPT_TX_POOL_SIZE; n++) {
MOV R0,#((pMtxPacketPool + 137) & 0xff)
MOV R1,#(((pMtxPacketPool + 137) >> 8) & 0xff)
MOV R2,#0x6
// 537 DISABLE_GLOBAL_INT();
??miqDecrTimeToLive_0:
CLR 0xa8.7
// 538 if (pMtxPacketPool[n].timeToLive > 0) pMtxPacketPool[n].timeToLive--;
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
JNZ ??miqDecrTimeToLive_1
INC DPTR
MOVX A,@DPTR
??miqDecrTimeToLive_1:
JZ ??miqDecrTimeToLive_2
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
ADD A,#-0x1
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ADDC A,#-0x1
MOVX @DPTR,A
// 539 ENABLE_GLOBAL_INT();
??miqDecrTimeToLive_2:
SETB 0xa8.7
// 540 }
MOV A,R0
ADD A,#-0x6d
MOV R0,A
MOV A,R1
ADDC A,#0x0
MOV R1,A
DEC R2
MOV A,R2
JNZ ??miqDecrTimeToLive_0
// 541 } // miqDecrTimeToLive
LJMP ?Subroutine0
CFI EndBlock cfiBlock8
RSEG NEAR_CODE:CODE:NOROOT(0)
miqAddIndirectPacket:
CFI Block cfiBlock9 Using cfiCommon1
CFI Function miqAddIndirectPacket
FUNCALL miqAddIndirectPacket, msupCompareExtendedAddress
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL miqAddIndirectPacket, mschRemoveTask
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, 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: 0
MOV A,R2
MOV R4,A
MOV A,R3
MOV R5,A
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,R4
ADD A,#0x5
MOV ?V0 + 6,A
MOV A,R5
ADDC A,#0x0
MOV ?V0 + 7,A
MOV DPL,?V0 + 6
MOV DPH,A
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for miqAddIndirectPacket>_0`:
DB 0
DB 1
DW ??miqAddIndirectPacket_0
DW ??miqAddIndirectPacket_1
DW ??miqAddIndirectPacket_2
??miqAddIndirectPacket_1:
MOV A,R0
ADD A,#-0x71
MOV ?V0 + 4,A
MOV A,R1
ADDC A,#0x0
MOV ?V0 + 5,A
MOV A,#0x1
MOV DPL,?V0 + 4
MOV DPH,?V0 + 5
MOVX @DP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -