📄 mac_tx_engine.lst
字号:
\ 000005 ; Auto size: 0
\ 000005 ; Setup parameters for call to function mschAddTask
\ 000005 75.... MOV ?V0 + 0,#(mtxResumeAfterBeaconTask & 0xff)
\ 000008 75.... MOV ?V0 + 1,#((mtxResumeAfterBeaconTask >> 8) & 0xff)
\ 00000B 75.... MOV ?V0 + 2,#((mtxResumeAfterBeaconTask >> 16) & 0xff)
\ 00000E 78.. MOV R0,#?V0 + 0
\ 000010 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000013 7A02 MOV R2,#0x2
\ 000015 EA MOV A,R2
\ 000016 C0E0 PUSH A
\ 000018 ; Setup parameters for call to function mschReserveTask
\ 000018 12.... LCALL mschReserveTask & 0xFFFF
\ 00001B E4 CLR A
\ 00001C FC MOV R4,A
\ 00001D FD MOV R5,A
\ 00001E D0E0 POP A
\ 000020 FA MOV R2,A
\ 000021 12.... LCALL mschAddTask & 0xFFFF
\ 000024 7403 MOV A,#0x3
\ 000026 12.... LCALL ?DEALLOC_XSTACK8
\ 000029 7F03 MOV R7,#0x3
\ 00002B 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment NEAR_CODE, align 1, keep-with-next
264 void mtxResumeAfterBeaconTask(MAC_TASK_INFO *pTask) NEAR { mtxResumeAfterBeacon(); mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM); }
\ mtxResumeAfterBeaconTask:
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 ; Setup parameters for call to function mtxResumeAfterBeacon
\ 000009 90.... MOV DPTR,#(mtxResumeAfterBeacon & 0xffff)
\ 00000C 74.. MOV A,#((mtxResumeAfterBeacon >> 16) & 0xff)
\ 00000E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000011 ; Setup parameters for call to function mschRemoveTask
\ 000011 7A02 MOV R2,#0x2
\ 000013 8E82 MOV DPL,R6
\ 000015 8F83 MOV DPH,R7
\ 000017 A3 INC DPTR
\ 000018 A3 INC DPTR
\ 000019 A3 INC DPTR
\ 00001A A3 INC DPTR
\ 00001B A3 INC DPTR
\ 00001C A3 INC DPTR
\ 00001D A3 INC DPTR
\ 00001E A3 INC DPTR
\ 00001F E0 MOVX A,@DPTR
\ 000020 F9 MOV R1,A
\ 000021 12.... LCALL mschRemoveTask & 0xFFFF
\ 000024 7F01 MOV R7,#0x1
\ 000026 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment NEAR_CODE, align 1, keep-with-next
265 void mtxResumeAfterBeacon(void) NEAR {
\ mtxResumeAfterBeacon:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
266 if (mtxInfo.waitForBeacon) {
\ 000004 90.... MOV DPTR,#(mtxInfo + 5)
\ 000007 E0 MOVX A,@DPTR
\ 000008 604A JZ ??mtxResumeAfterBeacon_0
267
268 // Cancel beacon search when enabled (the WAIT -> OUT_OF_CAP state will turn it back on if necessary)
269 if (mtxInfo.beaconSearchEnabled) {
\ 00000A 90.... MOV DPTR,#(mtxInfo + 6)
\ 00000D E0 MOVX A,@DPTR
\ 00000E 601A JZ ??mtxResumeAfterBeacon_1
270 mrxDecrOnCounter();
\ 000010 ; Setup parameters for call to function mrxDecrOnCounter
\ 000010 90.... MOV DPTR,#(mrxDecrOnCounter & 0xffff)
\ 000013 74.. MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
\ 000015 12.... LCALL ?BCALL ; Banked call to: DPTR()
271 mtxInfo.beaconSearchEnabled = FALSE;
\ 000018 E4 CLR A
\ 000019 90.... MOV DPTR,#(mtxInfo + 6)
\ 00001C F0 MOVX @DPTR,A
272 mtxInfo.beaconSearchTimeout = FALSE;
\ 00001D 90.... MOV DPTR,#(mtxInfo + 7)
\ 000020 F0 MOVX @DPTR,A
273 mtimCancelCallback(mtxBeaconSearchTimeout);
\ 000021 ; Setup parameters for call to function mtimCancelCallback
\ 000021 79.. MOV R1,#(mtxBeaconSearchTimeout & 0xff)
\ 000023 7A.. MOV R2,#((mtxBeaconSearchTimeout >> 8) & 0xff)
\ 000025 7B.. MOV R3,#((mtxBeaconSearchTimeout >> 16) & 0xff)
\ 000027 12.... LCALL mtimCancelCallback & 0xFFFF
274 }
275
276 // Go ahead if there's sufficient CAP left (otherwise remain in the OUT_OF_CAP state)
277 if (T2_IS_CAP_ACTIVE()) {
\ ??mtxResumeAfterBeacon_1:
\ 00002A E5C3 MOV A,0xc3
\ 00002C A2E5 MOV C,0xE0 /* A */.5
\ 00002E 4024 JC ??mtxResumeAfterBeacon_0
278 mtxInfo.waitForBeacon = FALSE;
\ 000030 E4 CLR A
\ 000031 90.... MOV DPTR,#(mtxInfo + 5)
\ 000034 F0 MOVX @DPTR,A
279 mtxInfo.status = MTX_STATUS_WAITING;
\ 000035 90.... MOV DPTR,#(mtxInfo + 4)
\ 000038 F0 MOVX @DPTR,A
280 mtxInfo.cspTimeout = mtxCalcCspTimeout();
\ 000039 ; Setup parameters for call to function mtxCalcCspTimeout
\ 000039 90.... MOV DPTR,#(mtxCalcCspTimeout & 0xffff)
\ 00003C 74.. MOV A,#((mtxCalcCspTimeout >> 16) & 0xff)
\ 00003E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000041 E9 MOV A,R1
\ 000042 90.... MOV DPTR,#(mtxInfo + 10)
\ 000045 F0 MOVX @DPTR,A
281
282 if (mtxInfo.cspTimeout) {
\ 000046 6006 JZ ??mtxResumeAfterBeacon_2
283 mtxCreateStartTask();
\ 000048 ; Setup parameters for call to function mtxCreateStartTask
\ 000048 12.... LCALL mtxCreateStartTask & 0xFFFF
284 mtxInfo.status = MTX_STATUS_WAITING;
\ 00004B E4 CLR A
\ 00004C 8002 SJMP ??mtxResumeAfterBeacon_3
285 } else {
286 mtxInfo.status = MTX_STATUS_OUT_OF_CAP;
\ ??mtxResumeAfterBeacon_2:
\ 00004E 7408 MOV A,#0x8
\ ??mtxResumeAfterBeacon_3:
\ 000050 90.... MOV DPTR,#(mtxInfo + 4)
\ 000053 F0 MOVX @DPTR,A
287 }
288 }
289 }
290 } // mtxResumeAfterBeacon
\ ??mtxResumeAfterBeacon_0:
\ 000054 REQUIRE ?Subroutine3
\ 000054 ; // Fall through to label ?Subroutine3
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 02.... LJMP ?BRET
291
292
293
\ In segment NEAR_CODE, align 1, keep-with-next
294 void mtxResetBosCounter(void) NEAR {
\ mtxResetBosCounter:
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
295
296 // New CAP begins
297 T2_SET_OVERFLOW_COUNTER(0x00000);
\ 000005 75A100 MOV 0xa1,#0x0
\ 000008 75A200 MOV 0xa2,#0x0
\ 00000B 75A300 MOV 0xa3,#0x0
298 T2_SET_OVERFLOW_COUNTER_COMPARE_VALUE(msupCalcCapDuration());
\ 00000E ; Setup parameters for call to function msupCalcCapDuration
\ 00000E 12.... LCALL msupCalcCapDuration & 0xFFFF
\ 000011 EA MOV A,R2
\ 000012 F59C MOV 0x9c,A
\ 000014 ; Setup parameters for call to function msupCalcCapDuration
\ 000014 12.... LCALL msupCalcCapDuration & 0xFFFF
\ 000017 EB MOV A,R3
\ 000018 F59D MOV 0x9d,A
\ 00001A E59E MOV A,0x9e
\ 00001C FE MOV R6,A
\ 00001D ; Setup parameters for call to function msupCalcCapDuration
\ 00001D 12.... LCALL msupCalcCapDuration & 0xFFFF
\ 000020 EC MOV A,R4
\ 000021 540F ANL A,#0xf
\ 000023 C0E0 PUSH A
\ 000025 74F0 MOV A,#-0x10
\ 000027 5E ANL A,R6
\ 000028 FA MOV R2,A
\ 000029 D0E0 POP A
\ 00002B 4A ORL A,R2
\ 00002C F59E MOV 0x9e,A
299 T2_SET_CAP_ACTIVE();
\ 00002E 53C3DF ANL 0xc3,#0xdf
300
301 // Schedule the next beacon handler
302 if (mpib.macBeaconOrder != 15) {
\ 000031 90.... MOV DPTR,#(mpib + 8)
\ 000034 E0 MOVX A,@DPTR
\ 000035 640F XRL A,#0xf
\ 000037 6026 JZ ??mtxResetBosCounter_0
303 mtimSetCallback(mbcnTxPeriodicalBeacon, msupCalcBeaconInterval() - MBCN_TX_STARTUP_OVERHEAD - MBCN_TX_PREPARE_TIME);
\ 000039 ; Setup parameters for call to function mtimSetCallback
\ 000039 ; Setup parameters for call to function msupCalcBeaconInterval
\ 000039 12.... LCALL msupCalcBeaconInterval & 0xFFFF
\ 00003C 8A.. MOV ?V0 + 0,R2
\ 00003E 8B.. MOV ?V0 + 1,R3
\ 000040 8C.. MOV ?V0 + 2,R4
\ 000042 8D.. MOV ?V0 + 3,R5
\ 000044 90.... MOV DPTR,#__Constant_fffffff8
\ 000047 78.. MOV R0,#?V0 + 0
\ 000049 12.... LCALL ?L_ADD_X
\ 00004C 78.. MOV R0,#?V0 + 0
\ 00004E 12.... LCALL ?PUSH_XSTACK_I_FOUR
\ 000051 79.. MOV R1,#(mbcnTxPeriodicalBeacon & 0xff)
\ 000053 7A.. MOV R2,#((mbcnTxPeriodicalBeacon >> 8) & 0xff)
\ 000055 7B.. MOV R3,#((mbcnTxPeriodicalBeacon >> 16) & 0xff)
\ 000057 12.... LCALL mtimSetCallback & 0xFFFF
\ 00005A 7404 MOV A,#0x4
\ 00005C 12.... LCALL ?DEALLOC_XSTACK8
304 }
305 }
\ ??mtxResetBosCounter_0:
\ 00005F 7F04 MOV R7,#0x4
\ 000061 02.... LJMP ?BANKED_LEAVE_XDATA
306
307
308
309
310 //-------------------------------------------------------------------------------------------------------
311 // void mtxAckTimeout(void)
312 //
313 // DESCRIPTION:
314 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
315 void mtxAckTimeout(void) NEAR {
\ mtxAckTimeout:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
316
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -