📄 mac_beacon_handler.lst
字号:
\ 000139 7A.. MOV R2,#((mtxResetBosCounter >> 8) & 0xff)
\ 00013B 7B.. MOV R3,#((mtxResetBosCounter >> 16) & 0xff)
\ 00013D 12.... LCALL mtimSetCallback & 0xFFFF
\ 000140 7404 MOV A,#0x4
\ 000142 12.... LCALL ?DEALLOC_XSTACK8
212
213 // Resume transmission of direct packets after the beacon transmission
214 if (mtxInfo.waitForBeacon)
\ 000145 7402 MOV A,#0x2
\ 000147 12.... LCALL ?XSTACK_DISP0_8
\ 00014A E0 MOVX A,@DPTR
\ 00014B 2485 ADD A,#-0x7b
\ 00014D FE MOV R6,A
\ 00014E A3 INC DPTR
\ 00014F E0 MOVX A,@DPTR
\ 000150 3400 ADDC A,#0x0
\ 000152 FF MOV R7,A
\ 000153 90.... MOV DPTR,#(mtxInfo + 5)
\ 000156 E0 MOVX A,@DPTR
\ 000157 6029 JZ ??mbcnTxPeriodicalBeaconTask_7
215 mtimSetCallback(mtxResumeAfterBeaconCallback, (INT32)(pPacket->duration + MBCN_TX_STARTUP_OVERHEAD));
\ 000159 ; Setup parameters for call to function mtimSetCallback
\ 000159 8E82 MOV DPL,R6
\ 00015B 8F83 MOV DPH,R7
\ 00015D E0 MOVX A,@DPTR
\ 00015E F8 MOV R0,A
\ 00015F 7404 MOV A,#0x4
\ 000161 28 ADD A,R0
\ 000162 F5.. MOV ?V0 + 0,A
\ 000164 E4 CLR A
\ 000165 3400 ADDC A,#0x0
\ 000167 F5.. MOV ?V0 + 1,A
\ 000169 75..00 MOV ?V0 + 2,#0x0
\ 00016C 75..00 MOV ?V0 + 3,#0x0
\ 00016F 78.. MOV R0,#?V0 + 0
\ 000171 12.... LCALL ?PUSH_XSTACK_I_FOUR
\ 000174 79.. MOV R1,#(mtxResumeAfterBeaconCallback & 0xff)
\ 000176 7A.. MOV R2,#((mtxResumeAfterBeaconCallback >> 8) & 0xff)
\ 000178 7B.. MOV R3,#((mtxResumeAfterBeaconCallback >> 16) & 0xff)
\ 00017A 12.... LCALL mtimSetCallback & 0xFFFF
\ 00017D 7404 MOV A,#0x4
\ 00017F 12.... LCALL ?DEALLOC_XSTACK8
216
217 // Set the RX interval (if any)
218 if (mpib.macSuperframeOrder != 15) {
\ ??mbcnTxPeriodicalBeaconTask_7:
\ 000182 90.... MOV DPTR,#(mpib + 34)
\ 000185 E0 MOVX A,@DPTR
\ 000186 640F XRL A,#0xf
\ 000188 7003 JNZ $+5
\ 00018A 02.... LJMP ??mbcnTxPeriodicalBeaconTask_8 & 0xFFFF
219 if (mpib.macRxOnWhenIdle) {
\ 00018D 90.... MOV DPTR,#(mpib + 31)
\ 000190 E0 MOVX A,@DPTR
\ 000191 7003 JNZ $+5
\ 000193 02.... LJMP ??mbcnTxPeriodicalBeaconTask_8 & 0xFFFF
220
221 // On:
222 mrxAutoIncrOnCounter();
\ 000196 ; Setup parameters for call to function mrxAutoIncrOnCounter
\ 000196 90.... MOV DPTR,#(mrxAutoIncrOnCounter & 0xffff)
\ 000199 74.. MOV A,#((mrxAutoIncrOnCounter >> 16) & 0xff)
\ 00019B 12.... LCALL ?BCALL ; Banked call to: DPTR()
223
224 // TBD: Move this stuff to mtxResetBosCounter?
225 // Off:
226 if (mpib.macBattLifeExt) {
\ 00019E 90.... MOV DPTR,#(mpib + 3)
\ 0001A1 E0 MOVX A,@DPTR
\ 0001A2 603B JZ ??mbcnTxPeriodicalBeaconTask_9
227 // Soft off
228 mtimSetCallback(mrxDecrOnCounter, (INT32) pPacket->duration + mpib.macBattLifeExtPeriods + MBCN_TX_STARTUP_OVERHEAD);
\ 0001A4 ; Setup parameters for call to function mtimSetCallback
\ 0001A4 8E82 MOV DPL,R6
\ 0001A6 8F83 MOV DPH,R7
\ 0001A8 E0 MOVX A,@DPTR
\ 0001A9 F5.. MOV ?V0 + 0,A
\ 0001AB 75..00 MOV ?V0 + 1,#0x0
\ 0001AE 75..00 MOV ?V0 + 2,#0x0
\ 0001B1 75..00 MOV ?V0 + 3,#0x0
\ 0001B4 90.... MOV DPTR,#(mpib + 4)
\ 0001B7 E0 MOVX A,@DPTR
\ 0001B8 F5.. MOV ?V0 + 4,A
\ 0001BA 75..00 MOV ?V0 + 5,#0x0
\ 0001BD 75..00 MOV ?V0 + 6,#0x0
\ 0001C0 75..00 MOV ?V0 + 7,#0x0
\ 0001C3 78.. MOV R0,#?V0 + 0
\ 0001C5 79.. MOV R1,#?V0 + 4
\ 0001C7 12.... LCALL ?L_ADD
\ 0001CA 90.... MOV DPTR,#__Constant_4
\ 0001CD 78.. MOV R0,#?V0 + 0
\ 0001CF 12.... LCALL ?L_ADD_X
\ 0001D2 78.. MOV R0,#?V0 + 0
\ 0001D4 12.... LCALL ?PUSH_XSTACK_I_FOUR
\ 0001D7 79.. MOV R1,#(mrxDecrOnCounter & 0xff)
\ 0001D9 7A.. MOV R2,#((mrxDecrOnCounter >> 8) & 0xff)
\ 0001DB 7B.. MOV R3,#((mrxDecrOnCounter >> 16) & 0xff)
\ 0001DD 8032 SJMP ??mbcnTxPeriodicalBeaconTask_10
229 } else {
230 // Force when the superframe is shorter than the beacon interval
231 mtimSetCallback((mpib.macBeaconOrder == mpib.macSuperframeOrder) ? mrxDecrOnCounter : mrxForceRxOff, (INT32) msupCalcSuperframeDuration() + MBCN_TX_STARTUP_OVERHEAD);
\ ??mbcnTxPeriodicalBeaconTask_9:
\ 0001DF ; Setup parameters for call to function msupCalcSuperframeDuration
\ 0001DF 12.... LCALL msupCalcSuperframeDuration & 0xFFFF
\ 0001E2 8A.. MOV ?V0 + 0,R2
\ 0001E4 8B.. MOV ?V0 + 1,R3
\ 0001E6 8C.. MOV ?V0 + 2,R4
\ 0001E8 8D.. MOV ?V0 + 3,R5
\ 0001EA 90.... MOV DPTR,#(mpib + 8)
\ 0001ED E0 MOVX A,@DPTR
\ 0001EE FA MOV R2,A
\ 0001EF 90.... MOV DPTR,#(mpib + 34)
\ 0001F2 E0 MOVX A,@DPTR
\ 0001F3 6A XRL A,R2
\ 0001F4 7008 JNZ ??mbcnTxPeriodicalBeaconTask_11
\ 0001F6 79.. MOV R1,#(mrxDecrOnCounter & 0xff)
\ 0001F8 7A.. MOV R2,#((mrxDecrOnCounter >> 8) & 0xff)
\ 0001FA 7B.. MOV R3,#((mrxDecrOnCounter >> 16) & 0xff)
\ 0001FC 8006 SJMP ??mbcnTxPeriodicalBeaconTask_12
\ ??mbcnTxPeriodicalBeaconTask_11:
\ 0001FE 79.. MOV R1,#(mrxForceRxOff & 0xff)
\ 000200 7A.. MOV R2,#((mrxForceRxOff >> 8) & 0xff)
\ 000202 7B.. MOV R3,#((mrxForceRxOff >> 16) & 0xff)
\ ??mbcnTxPeriodicalBeaconTask_12:
\ 000204 ; Setup parameters for call to function mtimSetCallback
\ 000204 90.... MOV DPTR,#__Constant_4
\ 000207 78.. MOV R0,#?V0 + 0
\ 000209 12.... LCALL ?L_ADD_X
\ 00020C 78.. MOV R0,#?V0 + 0
\ 00020E 12.... LCALL ?PUSH_XSTACK_I_FOUR
\ ??mbcnTxPeriodicalBeaconTask_10:
\ 000211 12.... LCALL mtimSetCallback & 0xFFFF
\ 000214 7404 MOV A,#0x4
\ 000216 12.... LCALL ?DEALLOC_XSTACK8
232 }
233 }
234 }
235
236 // Transform this task into an mtxStartTransmission()
237 pTask->state = MTX_STATE_PREPARE_PACKET;
\ ??mbcnTxPeriodicalBeaconTask_8:
\ 000219 7404 MOV A,#0x4
\ 00021B 12.... LCALL ?XSTACK_DISP0_8
\ 00021E E0 MOVX A,@DPTR
\ 00021F F8 MOV R0,A
\ 000220 A3 INC DPTR
\ 000221 E0 MOVX A,@DPTR
\ 000222 F583 MOV DPH,A
\ 000224 8882 MOV DPL,R0
\ 000226 E4 CLR A
\ 000227 F0 MOVX @DPTR,A
238 pTask->taskData = (WORD) pPacket;
\ 000228 7402 MOV A,#0x2
\ 00022A 12.... LCALL ?XSTACK_DISP0_8
\ 00022D E0 MOVX A,@DPTR
\ 00022E F8 MOV R0,A
\ 00022F A3 INC DPTR
\ 000230 E0 MOVX A,@DPTR
\ 000231 F9 MOV R1,A
\ 000232 85..82 MOV DPL,?XSP + 0
\ 000235 85..83 MOV DPH,?XSP + 1
\ 000238 E0 MOVX A,@DPTR
\ 000239 FA MOV R2,A
\ 00023A A3 INC DPTR
\ 00023B E0 MOVX A,@DPTR
\ 00023C F583 MOV DPH,A
\ 00023E 8A82 MOV DPL,R2
\ 000240 A3 INC DPTR
\ 000241 A3 INC DPTR
\ 000242 A3 INC DPTR
\ 000243 E8 MOV A,R0
\ 000244 F0 MOVX @DPTR,A
\ 000245 A3 INC DPTR
\ 000246 E9 MOV A,R1
\ 000247 F0 MOVX @DPTR,A
239 pTask->pTaskFunc = mtxStartTransmission;
\ 000248 85..82 MOV DPL,?XSP + 0
\ 00024B 85..83 MOV DPH,?XSP + 1
\ 00024E E0 MOVX A,@DPTR
\ 00024F F8 MOV R0,A
\ 000250 A3 INC DPTR
\ 000251 E0 MOVX A,@DPTR
\ 000252 F583 MOV DPH,A
\ 000254 8882 MOV DPL,R0
\ 000256 74.. MOV A,#(mtxStartTransmission & 0xff)
\ 000258 F0 MOVX @DPTR,A
\ 000259 A3 INC DPTR
\ 00025A 74.. MOV A,#((mtxStartTransmission >> 8) & 0xff)
\ 00025C F0 MOVX @DPTR,A
\ 00025D A3 INC DPTR
\ 00025E 74.. MOV A,#((mtxStartTransmission >> 16) & 0xff)
\ 000260 F0 MOVX @DPTR,A
240 mtxInfo.beaconTransmissionInProgress = TRUE;
\ 000261 7401 MOV A,#0x1
\ 000263 90.... MOV DPTR,#(mtxInfo + 11)
\ 000266 F0 MOVX @DPTR,A
241 mtxInfo.cspTimeout = CSP_TIMEOUT_RUN_FOREVER;
\ 000267 74FF MOV A,#-0x1
\ 000269 90.... MOV DPTR,#(mtxInfo + 10)
\ 00026C 02.... LJMP ??mbcnTxPeriodicalBeaconTask_5
242
243 // Disaster :(
244 // The prepare time was too short!!! (DEBUG: Add a breakpoint here if beacons are missing)
245 } else if (T2_GET_OVERFLOW_COUNTER() > oldBeaconInterval) {
\ ??mbcnTxPeriodicalBeaconTask_6:
\ 00026F ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
\ 00026F 90.... MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
\ 000272 74.. MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
\ 000274 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000277 8A.. MOV ?V0 + 0,R2
\ 000279 8B.. MOV ?V0 + 1,R3
\ 00027B 8C.. MOV ?V0 + 2,R4
\ 00027D 8D.. MOV ?V0 + 3,R5
\ 00027F 90.... MOV DPTR,#??oldBeaconInterval
\ 000282 78.. MOV R0,#?V0 + 0
\ 000284 12.... LCALL ?UL_GT_X
\ 000287 501F JNC ??mbcnTxPeriodicalBeaconTask_0
246
247 // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
248 mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);
\ 000289 ; Setup parameters for call to function mtimSetCallback
\ 000289 90.... MOV DPTR,#__Constant_4
\ 00028C 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 00028F 79.. MOV R1,#(mtxResetBosCounter & 0xff)
\ 000291 7A.. MOV R2,#((mtxResetBosCounter >> 8) & 0xff)
\ 000293 7B.. MOV R3,#((mtxResetBosCounter >> 16) & 0xff)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -