📄 mac_tx_engine.lst
字号:
\ mtxCreateStartTask:
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
216 mschAddTask(mtxInfo.startTxTask, MAC_TASK_PRI_HIGHEST, mtxStartTransmission, (WORD) mtxInfo.pPacket);
\ 000005 ; Setup parameters for call to function mschAddTask
\ 000005 75.... MOV ?V0 + 0,#(mtxStartTransmission & 0xff)
\ 000008 75.... MOV ?V0 + 1,#((mtxStartTransmission >> 8) & 0xff)
\ 00000B 75.... MOV ?V0 + 2,#((mtxStartTransmission >> 16) & 0xff)
\ 00000E 78.. MOV R0,#?V0 + 0
\ 000010 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000013 90.... MOV DPTR,#mtxInfo
\ 000016 E0 MOVX A,@DPTR
\ 000017 FC MOV R4,A
\ 000018 A3 INC DPTR
\ 000019 E0 MOVX A,@DPTR
\ 00001A FD MOV R5,A
\ 00001B 7A03 MOV R2,#0x3
\ 00001D 90.... MOV DPTR,#(mtxInfo + 12)
\ 000020 E0 MOVX A,@DPTR
\ 000021 F9 MOV R1,A
\ 000022 12.... LCALL mschAddTask
\ 000025 7403 MOV A,#0x3
\ 000027 12.... LCALL ?DEALLOC_XSTACK8
217 } // mtxCreateStartTask
\ 00002A REQUIRE ?Subroutine1
\ 00002A ; // Fall through to label ?Subroutine1
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 7F03 MOV R7,#0x3
\ 000002 02.... LJMP ?FUNC_LEAVE_XDATA
218
219
220
221
\ In segment BANKED_CODE, align 1, keep-with-next
222 UINT8 mtxCalcCspTimeout(void) {
\ mtxCalcCspTimeout:
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; 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) {
\ 000005 90.... MOV DPTR,#mtxInfo
\ 000008 E0 MOVX A,@DPTR
\ 000009 2487 ADD A,#-0x79
\ 00000B F8 MOV R0,A
\ 00000C A3 INC DPTR
\ 00000D E0 MOVX A,@DPTR
\ 00000E 3400 ADDC A,#0x0
\ 000010 F9 MOV R1,A
\ 000011 8882 MOV DPL,R0
\ 000013 8983 MOV DPH,R1
\ 000015 E0 MOVX A,@DPTR
\ 000016 7003 JNZ $+5
\ 000018 02.... 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()) {
\ 00001B E5C3 MOV A,0xc3
\ 00001D A2E5 MOV C,0xE0 /* A */.5
\ 00001F 5003 JNC $+5
\ 000021 02.... LJMP ??mtxCalcCspTimeout_1 & 0xFFFF
231 if (mbcnInfo.lastSfSpec.battLifeExt && mtxInfo.pPacket->toCoord) {
\ 000024 90.... MOV DPTR,#(mbcnInfo + 9)
\ 000027 E0 MOVX A,@DPTR
\ 000028 604D JZ ??mtxCalcCspTimeout_2
\ 00002A 90.... MOV DPTR,#mtxInfo
\ 00002D E0 MOVX A,@DPTR
\ 00002E 2484 ADD A,#-0x7c
\ 000030 18 DEC R0
\ 000031 18 DEC R0
\ 000032 18 DEC R0
\ 000033 A3 INC DPTR
\ 000034 E0 MOVX A,@DPTR
\ 000035 3400 ADDC A,#0x0
\ 000037 F9 MOV R1,A
\ 000038 8882 MOV DPL,R0
\ 00003A 8983 MOV DPH,R1
\ 00003C E0 MOVX A,@DPTR
\ 00003D 6038 JZ ??mtxCalcCspTimeout_2
232 // <----------------- The CAP duration -----------------> - <--------- Used CAP ----------> - <---- Overhead ----->
233 bosLeft = (mbcnInfo.beaconDuration + mpib.macBattLifeExtPeriods) - (T2_GET_OVERFLOW_COUNTER() + 1) - (MTX_START_CSP_DELAY);
\ 00003F 90.... MOV DPTR,#(mbcnInfo + 4)
\ 000042 E0 MOVX A,@DPTR
\ 000043 F8 MOV R0,A
\ 000044 90.... MOV DPTR,#(mpib + 4)
\ 000047 E0 MOVX A,@DPTR
\ 000048 28 ADD A,R0
\ 000049 F5.. MOV ?V0 + 4,A
\ 00004B E4 CLR A
\ 00004C 3400 ADDC A,#0x0
\ 00004E F5.. MOV ?V0 + 5,A
\ 000050 75..00 MOV ?V0 + 6,#0x0
\ 000053 75..00 MOV ?V0 + 7,#0x0
\ 000056 ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
\ 000056 90.... MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
\ 000059 74.. MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
\ 00005B 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00005E 8A.. MOV ?V0 + 0,R2
\ 000060 8B.. MOV ?V0 + 1,R3
\ 000062 8C.. MOV ?V0 + 2,R4
\ 000064 8D.. MOV ?V0 + 3,R5
\ 000066 78.. MOV R0,#?V0 + 4
\ 000068 79.. MOV R1,#?V0 + 0
\ 00006A 12.... LCALL ?L_SUB
\ 00006D 90.... MOV DPTR,#__Constant_fffffffd
\ 000070 78.. MOV R0,#?V0 + 4
\ 000072 12.... LCALL ?L_ADD_X
\ 000075 8069 SJMP ??mtxCalcCspTimeout_3
234 } else {
235 // <- The CAP duration > - <--------- Used CAP ----------> - <------------- Overhead + duration -------------> - <-- Beacon margin -->
236 bosLeft = msupCalcCapDuration() - (T2_GET_OVERFLOW_COUNTER() + 1) - (MTX_START_CSP_DELAY + mtxInfo.pPacket->duration) - mbcnGetBeaconMargin();
\ ??mtxCalcCspTimeout_2:
\ 000077 ; Setup parameters for call to function msupCalcCapDuration
\ 000077 12.... LCALL msupCalcCapDuration & 0xFFFF
\ 00007A 8A.. MOV ?V0 + 4,R2
\ 00007C 8B.. MOV ?V0 + 5,R3
\ 00007E 8C.. MOV ?V0 + 6,R4
\ 000080 8D.. MOV ?V0 + 7,R5
\ 000082 ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
\ 000082 90.... MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
\ 000085 74.. MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
\ 000087 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00008A 8A.. MOV ?V0 + 0,R2
\ 00008C 8B.. MOV ?V0 + 1,R3
\ 00008E 8C.. MOV ?V0 + 2,R4
\ 000090 8D.. MOV ?V0 + 3,R5
\ 000092 ; Setup parameters for call to function mbcnGetBeaconMargin
\ 000092 90.... MOV DPTR,#(mbcnGetBeaconMargin & 0xffff)
\ 000095 74.. MOV A,#((mbcnGetBeaconMargin >> 16) & 0xff)
\ 000097 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00009A E9 MOV A,R1
\ 00009B FA MOV R2,A
\ 00009C 78.. MOV R0,#?V0 + 4
\ 00009E 79.. MOV R1,#?V0 + 0
\ 0000A0 12.... LCALL ?L_SUB
\ 0000A3 90.... MOV DPTR,#__Constant_ffffffff
\ 0000A6 78.. MOV R0,#?V0 + 4
\ 0000A8 12.... LCALL ?L_ADD_X
\ 0000AB 90.... MOV DPTR,#mtxInfo
\ 0000AE E0 MOVX A,@DPTR
\ 0000AF 2485 ADD A,#-0x7b
\ 0000B1 F8 MOV R0,A
\ 0000B2 A3 INC DPTR
\ 0000B3 E0 MOVX A,@DPTR
\ 0000B4 3400 ADDC A,#0x0
\ 0000B6 F9 MOV R1,A
\ 0000B7 8882 MOV DPL,R0
\ 0000B9 8983 MOV DPH,R1
\ 0000BB E0 MOVX A,@DPTR
\ 0000BC F8 MOV R0,A
\ 0000BD 7402 MOV A,#0x2
\ 0000BF 28 ADD A,R0
\ 0000C0 F5.. MOV ?V0 + 0,A
\ 0000C2 E4 CLR A
\ 0000C3 3400 ADDC A,#0x0
\ 0000C5 F5.. MOV ?V0 + 1,A
\ 0000C7 75..00 MOV ?V0 + 2,#0x0
\ 0000CA 75..00 MOV ?V0 + 3,#0x0
\ 0000CD 78.. MOV R0,#?V0 + 4
\ 0000CF 79.. MOV R1,#?V0 + 0
\ 0000D1 12.... LCALL ?L_SUB
\ 0000D4 8A.. MOV ?V0 + 0,R2
\ 0000D6 75..00 MOV ?V0 + 1,#0x0
\ 0000D9 78.. MOV R0,#?V0 + 4
\ 0000DB 79.. MOV R1,#?V0 + 0
\ 0000DD 12.... LCALL ?L_SUB
237 }
238 } else
239 bosLeft = 0;
240 }
241
242 // Calculate the CSP timeout
243 if (bosLeft >= CSP_TIMEOUT_RUN_FOREVER) {
\ ??mtxCalcCspTimeout_3:
\ 0000E0 90.... MOV DPTR,#__Constant_ff
\ 0000E3 78.. MOV R0,#?V0 + 0
\ 0000E5 12.... LCALL ?L_MOV_X
\ 0000E8 78.. MOV R0,#?V0 + 0
\ 0000EA 79.. MOV R1,#?V0 + 4
\ 0000EC 12.... LCALL ?SL_GT
\ 0000EF 4004 JC ??mtxCalcCspTimeout_4
244 return CSP_TIMEOUT_RUN_FOREVER;
\ ??mtxCalcCspTimeout_0:
\ 0000F1 79FF MOV R1,#-0x1
\ 0000F3 8017 SJMP ??mtxCalcCspTimeout_5
245 } else if (bosLeft < 1) {
\ ??mtxCalcCspTimeout_4:
\ 0000F5 90.... MOV DPTR,#__Constant_1
\ 0000F8 78.. MOV R0,#?V0 + 0
\ 0000FA 12.... LCALL ?L_MOV_X
\ 0000FD 78.. MOV R0,#?V0 + 0
\ 0000FF 79.. MOV R1,#?V0 + 4
\ 000101 12.... LCALL ?SL_GT
\ 000104 5004 JNC ??mtxCalcCspTimeout_6
246 return CSP_TIMEOUT_STOP;
\ ??mtxCalcCspTimeout_1:
\ 000106 7900 MOV R1,#0x0
\ 000108 8002 SJMP ??mtxCalcCspTimeout_5
247 } else {
248 return (UINT8) bosLeft;
\ ??mtxCalcCspTimeout_6:
\ 00010A A9.. MOV R1,?V0 + 4
\ ??mtxCalcCspTimeout_5:
\ 00010C 7F08 MOV R7,#0x8
\ 00010E 02.... LJMP ?BANKED_LEAVE_XDATA
249 }
250
251 } // mtxCalcCspTimeout
252
253
254
255
256 //-------------------------------------------------------------------------------------------------------
257 // void mtxResumeAfterBeacon(void)
258 //
259 // DESCRIPTION:
260 // Resumes transmission after the beacon has been received, if there is a sufficient number of
261 // backoff slot left in the CAP.
262 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
263 void mtxResumeAfterBeaconCallback(void) NEAR { mschAddTask(mschReserveTask(), MAC_TASK_PRI_HIGH, mtxResumeAfterBeaconTask, NULL); }
\ mtxResumeAfterBeaconCallback:
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -