📄 mac_tx_engine.s51
字号:
??mtxFinishTransmission_11:
; Setup parameters for call to function mtimSetCallback
MOV DPTR,#__Constant_600
LCALL ?PUSH_XSTACK8_X_FOUR
CFI CFA_XSP16 add(XSP16, 21)
SJMP ??mtxFinishTransmission_15
CFI CFA_XSP16 add(XSP16, 17)
// 169 break;
// 170 #if MAC_OPT_FFD
// 171 case CMD_ASSOCIATION_RESPONSE:
// 172 case CMD_COORDINATOR_REALIGNMENT:
// 173 if (!isMacInternal) mtxCommStatusIndication(pPacket, status);
??mtxFinishTransmission_8:
MOV A,R2
JNZ ??mtxFinishTransmission_3
; Setup parameters for call to function mtxCommStatusIndication
MOV R1,?V0 + 0
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL mtxCommStatusIndication
// 174 break;
// 175 #endif
// 176 case CMD_GTS_REQUEST:
// 177 break;
// 178 default:
// 179 break;
// 180 }
// 181 break;
// 182 }
// 183
// 184 #if MAC_OPT_FFD
// 185 // Remove the task and the packet
// 186 if (pPacket->txOptions & TX_OPT_INDIRECT) {
??mtxFinishTransmission_3:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
ADD A,#0x8
MOV ?V0 + 0,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV ?V0 + 1,A
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 */.2
JNC ??mtxFinishTransmission_16
// 187 miqSetRequested(pPacket, FALSE);
; Setup parameters for call to function miqSetRequested
MOV R1,#0x0
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL miqSetRequested
// 188 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x3
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask
// 189 DISABLE_GLOBAL_INT();
CLR 0xa8.7
// 190
// 191 mschAddTask(pTask->taskNumber, MAC_TASK_PRI_MEDIUM, miqRemoveIndirectPacket, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(miqRemoveIndirectPacket & 0xff)
MOV ?V0 + 1,#((miqRemoveIndirectPacket >> 8) & 0xff)
MOV ?V0 + 2,#((miqRemoveIndirectPacket >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 20)
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A
MOV R2,#0x1
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 17)
// 192 ENABLE_GLOBAL_INT();
SETB 0xa8.7
SJMP ??mtxFinishTransmission_17
// 193 } else {
// 194 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
??mtxFinishTransmission_16:
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x2
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask
// 195 mtxpReleasePacket(pPacket);
; Setup parameters for call to function mtxpReleasePacket
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL mtxpReleasePacket
CFI EndBlock cfiBlock1
// 196 }
// 197 #else
// 198 // Only direct transmission from a RFD
// 199 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
// 200 mtxpReleasePacket(pPacket);
// 201 #endif
// 202
// 203
// 204 } // mtxFinishTransmission
??mtxFinishTransmission_17:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 17)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 15)
MOV R7,#0x8
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 205
// 206
// 207
// 208
// 209 //-------------------------------------------------------------------------------------------------------
// 210 // void mtxCreateStartTask(void)
// 211 //
// 212 // DESCRIPTION:
// 213 // Creates the task that starts the transmission of the packet.
// 214 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 215 ROOT void mtxCreateStartTask(void) {
mtxCreateStartTask:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function mtxCreateStartTask
FUNCALL mtxCreateStartTask, mschAddTask
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
MOV A,#-0xa
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 V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
// 216 mschAddTask(mtxInfo.startTxTask, MAC_TASK_PRI_HIGHEST, mtxStartTransmission, (WORD) mtxInfo.pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mtxStartTransmission & 0xff)
MOV ?V0 + 1,#((mtxStartTransmission >> 8) & 0xff)
MOV ?V0 + 2,#((mtxStartTransmission >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 13)
MOV DPTR,#mtxInfo
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV R2,#0x3
MOV DPTR,#(mtxInfo + 12)
MOVX A,@DPTR
MOV R1,A
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI EndBlock cfiBlock3
// 217 } // mtxCreateStartTask
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock4 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV R7,#0x3
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock4
// 218
// 219
// 220
// 221
RSEG BANKED_CODE:CODE:NOROOT(0)
// 222 UINT8 mtxCalcCspTimeout(void) {
mtxCalcCspTimeout:
CFI Block cfiBlock5 Using cfiCommon1
CFI Function mtxCalcCspTimeout
FUNCALL mtxCalcCspTimeout, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL mtxCalcCspTimeout, msupCalcCapDuration
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL mtxCalcCspTimeout, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL mtxCalcCspTimeout, mbcnGetBeaconMargin
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
// 223 INT32 bosLeft;
// 224
// 225 // Calculate the number of FULL backoff slots left in the CAP, when transmission, ack and IFS is taken into consideration
// 226 if (!mtxInfo.pPacket->slotted) {
MOV DPTR,#mtxInfo
MOVX A,@DPTR
ADD A,#-0x79
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV R1,A
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
JNZ $+5
LJMP ??mtxCalcCspTimeout_0 & 0xFFFF
// 227 // Set bosLeft high enough to avoid CSP timeout
// 228 bosLeft = CSP_TIMEOUT_RUN_FOREVER;
// 229 } else {
// 230 if (T2_IS_CAP_ACTIVE()) {
MOV A,0xc3
MOV C,0xE0 /* A */.5
JNC $+5
LJMP ??mtxCalcCspTimeout_1 & 0xFFFF
// 231 if (mbcnInfo.lastSfSpec.battLifeExt && mtxInfo.pPacket->toCoord) {
MOV DPTR,#(mbcnInfo + 9)
MOVX A,@DPTR
JZ ??mtxCalcCspTimeout_2
MOV DPTR,#mtxInfo
MOVX A,@DPTR
ADD A,#-0x7c
DEC R0
DEC R0
DEC R0
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV R1,A
MOV DPL,R0
MOV DPH,R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -