📄 mac_beacon_handler.lst
字号:
\ mbcnTxPeriodicalBeaconTask:
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 6
\ 000005 74FA MOV A,#-0x6
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 85..82 MOV DPL,?XSP + 0
\ 00000D 85..83 MOV DPH,?XSP + 1
\ 000010 EA MOV A,R2
\ 000011 F0 MOVX @DPTR,A
\ 000012 A3 INC DPTR
\ 000013 EB MOV A,R3
\ 000014 F0 MOVX @DPTR,A
169 static UINT32 oldBeaconInterval;
170 MAC_TX_PACKET *pPacket = mbcnInfo.pTxPacket;
\ 000015 90.... MOV DPTR,#(mbcnInfo + 2)
\ 000018 E0 MOVX A,@DPTR
\ 000019 F8 MOV R0,A
\ 00001A A3 INC DPTR
\ 00001B E0 MOVX A,@DPTR
\ 00001C F9 MOV R1,A
\ 00001D 7402 MOV A,#0x2
\ 00001F 12.... LCALL ?XSTACK_DISP0_8
\ 000022 E8 MOV A,R0
\ 000023 F0 MOVX @DPTR,A
\ 000024 A3 INC DPTR
\ 000025 E9 MOV A,R1
\ 000026 F0 MOVX @DPTR,A
171
172 switch (pTask->state) {
\ 000027 85..82 MOV DPL,?XSP + 0
\ 00002A 85..83 MOV DPH,?XSP + 1
\ 00002D E0 MOVX A,@DPTR
\ 00002E 2408 ADD A,#0x8
\ 000030 FE MOV R6,A
\ 000031 A3 INC DPTR
\ 000032 E0 MOVX A,@DPTR
\ 000033 3400 ADDC A,#0x0
\ 000035 FF MOV R7,A
\ 000036 85..82 MOV DPL,?XSP + 0
\ 000039 85..83 MOV DPH,?XSP + 1
\ 00003C E0 MOVX A,@DPTR
\ 00003D 2405 ADD A,#0x5
\ 00003F F8 MOV R0,A
\ 000040 A3 INC DPTR
\ 000041 E0 MOVX A,@DPTR
\ 000042 3400 ADDC A,#0x0
\ 000044 F9 MOV R1,A
\ 000045 7404 MOV A,#0x4
\ 000047 12.... LCALL ?XSTACK_DISP0_8
\ 00004A E8 MOV A,R0
\ 00004B F0 MOVX @DPTR,A
\ 00004C A3 INC DPTR
\ 00004D E9 MOV A,R1
\ 00004E F0 MOVX @DPTR,A
\ 00004F 7404 MOV A,#0x4
\ 000051 12.... LCALL ?XSTACK_DISP0_8
\ 000054 E0 MOVX A,@DPTR
\ 000055 F8 MOV R0,A
\ 000056 A3 INC DPTR
\ 000057 E0 MOVX A,@DPTR
\ 000058 F583 MOV DPH,A
\ 00005A 8882 MOV DPL,R0
\ 00005C E0 MOVX A,@DPTR
\ 00005D 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for mbcnTxPeriodicalBeaconTask>_0`:
\ 000060 00 DB 0
\ 000061 01 DB 1
\ 000062 .... DW ??mbcnTxPeriodicalBeaconTask_0
\ 000064 .... DW ??mbcnTxPeriodicalBeaconTask_1
\ 000066 .... DW ??mbcnTxPeriodicalBeaconTask_2
173 case MBCN_SET_NEXT_CALLBACK_PREPTX:
174
175 // Set the RF channel
176 msupSetChannel(ppib.phyCurrentChannel, FALSE);
\ ??mbcnTxPeriodicalBeaconTask_1:
\ 000068 ; Setup parameters for call to function msupSetChannel
\ 000068 7A00 MOV R2,#0x0
\ 00006A 90.... MOV DPTR,#ppib
\ 00006D E0 MOVX A,@DPTR
\ 00006E F9 MOV R1,A
\ 00006F 12.... LCALL msupSetChannel & 0xFFFF
177
178 // Update buffered PIB attributes
179 oldBeaconInterval = msupCalcBeaconInterval();
\ 000072 ; Setup parameters for call to function msupCalcBeaconInterval
\ 000072 12.... LCALL msupCalcBeaconInterval & 0xFFFF
\ 000075 8A.. MOV ?V0 + 0,R2
\ 000077 8B.. MOV ?V0 + 1,R3
\ 000079 8C.. MOV ?V0 + 2,R4
\ 00007B 8D.. MOV ?V0 + 3,R5
\ 00007D 90.... MOV DPTR,#??oldBeaconInterval
\ 000080 78.. MOV R0,#?V0 + 0
\ 000082 12.... LCALL ?L_MOV_TO_X
180 mbcnUpdateBufferedPibAttributes();
\ 000085 ; Setup parameters for call to function mbcnUpdateBufferedPibAttributes
\ 000085 90.... MOV DPTR,#(mbcnUpdateBufferedPibAttributes & 0xffff)
\ 000088 74.. MOV A,#((mbcnUpdateBufferedPibAttributes >> 16) & 0xff)
\ 00008A 12.... LCALL ?BCALL ; Banked call to: DPTR()
181
182 // Transmit the beacon, unless we're in scan mode (just increment the sequence number)
183 if (macInfo.state & MAC_STATE_SCAN_BM) {
\ 00008D 90.... MOV DPTR,#macInfo
\ 000090 E0 MOVX A,@DPTR
\ 000091 A2E6 MOV C,0xE0 /* A */.6
\ 000093 5009 JNC ??mbcnTxPeriodicalBeaconTask_3
184 mpib.macBSN++;
\ 000095 90.... MOV DPTR,#(mpib + 13)
\ 000098 E0 MOVX A,@DPTR
\ 000099 04 INC A
\ 00009A F0 MOVX @DPTR,A
185 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
\ 00009B ; Setup parameters for call to function mschRemoveTask
\ 00009B 02.... LJMP ??mbcnTxPeriodicalBeaconTask_4
186
187 } else {
188
189 // TBD: Set mpib.macBeaconTxTime (here?)
190
191 // Unrequest all indirect packets, and decrement timeToLive
192 miqUnrequestAll();
\ ??mbcnTxPeriodicalBeaconTask_3:
\ 00009E ; Setup parameters for call to function miqUnrequestAll
\ 00009E 12.... LCALL miqUnrequestAll & 0xFFFF
193 miqDecrTimeToLive();
\ 0000A1 ; Setup parameters for call to function miqDecrTimeToLive
\ 0000A1 12.... LCALL miqDecrTimeToLive & 0xFFFF
194
195 // Create the task that later on will remove expired packets
196 mschAddTask(mschReserveTask(), MAC_TASK_PRI_MEDIUM, miqExpireIndirectPacketsTask, NULL);
\ 0000A4 ; Setup parameters for call to function mschAddTask
\ 0000A4 75.... MOV ?V0 + 0,#(miqExpireIndirectPacketsTask & 0xff)
\ 0000A7 75.... MOV ?V0 + 1,#((miqExpireIndirectPacketsTask >> 8) & 0xff)
\ 0000AA 75.... MOV ?V0 + 2,#((miqExpireIndirectPacketsTask >> 16) & 0xff)
\ 0000AD 78.. MOV R0,#?V0 + 0
\ 0000AF 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000B2 7A01 MOV R2,#0x1
\ 0000B4 EA MOV A,R2
\ 0000B5 C0E0 PUSH A
\ 0000B7 ; Setup parameters for call to function mschReserveTask
\ 0000B7 12.... LCALL mschReserveTask & 0xFFFF
\ 0000BA E4 CLR A
\ 0000BB FC MOV R4,A
\ 0000BC FD MOV R5,A
\ 0000BD D0E0 POP A
\ 0000BF FA MOV R2,A
\ 0000C0 12.... LCALL mschAddTask & 0xFFFF
\ 0000C3 7403 MOV A,#0x3
\ 0000C5 12.... LCALL ?DEALLOC_XSTACK8
197
198 // Generate the beacon frame
199 mbcnPrepareBeacon(pPacket);
\ 0000C8 ; Setup parameters for call to function mbcnPrepareBeacon
\ 0000C8 7402 MOV A,#0x2
\ 0000CA 12.... LCALL ?XSTACK_DISP0_8
\ 0000CD E0 MOVX A,@DPTR
\ 0000CE FA MOV R2,A
\ 0000CF A3 INC DPTR
\ 0000D0 E0 MOVX A,@DPTR
\ 0000D1 FB MOV R3,A
\ 0000D2 90.... MOV DPTR,#(mbcnPrepareBeacon & 0xffff)
\ 0000D5 74.. MOV A,#((mbcnPrepareBeacon >> 16) & 0xff)
\ 0000D7 12.... LCALL ?BCALL ; Banked call to: DPTR()
200 pPacket->slotted = TRUE;
\ 0000DA 7402 MOV A,#0x2
\ 0000DC 12.... LCALL ?XSTACK_DISP0_8
\ 0000DF E0 MOVX A,@DPTR
\ 0000E0 2487 ADD A,#-0x79
\ 0000E2 F8 MOV R0,A
\ 0000E3 A3 INC DPTR
\ 0000E4 E0 MOVX A,@DPTR
\ 0000E5 3400 ADDC A,#0x0
\ 0000E7 F9 MOV R1,A
\ 0000E8 8882 MOV DPL,R0
\ 0000EA 8983 MOV DPH,R1
\ 0000EC 7401 MOV A,#0x1
\ 0000EE F0 MOVX @DPTR,A
201 pTask->state = MBCN_START_TRANSMISSION;
\ 0000EF 7404 MOV A,#0x4
\ 0000F1 12.... LCALL ?XSTACK_DISP0_8
\ 0000F4 E0 MOVX A,@DPTR
\ 0000F5 F8 MOV R0,A
\ 0000F6 A3 INC DPTR
\ 0000F7 E0 MOVX A,@DPTR
\ 0000F8 F583 MOV DPH,A
\ 0000FA 8882 MOV DPL,R0
\ 0000FC 7401 MOV A,#0x1
\ ??mbcnTxPeriodicalBeaconTask_5:
\ 0000FE F0 MOVX @DPTR,A
\ 0000FF 02.... LJMP ??mbcnTxPeriodicalBeaconTask_0 & 0xFFFF
202 }
203 break;
204
205 case MBCN_START_TRANSMISSION:
206
207 // Remain in this state until the beacon transmission can begin
208 if (T2_GET_OVERFLOW_COUNTER() == (oldBeaconInterval - MBCN_TX_STARTUP_OVERHEAD)) {
\ ??mbcnTxPeriodicalBeaconTask_2:
\ 000102 ; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
\ 000102 90.... MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
\ 000105 74.. MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
\ 000107 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00010A 8A.. MOV ?V0 + 4,R2
\ 00010C 8B.. MOV ?V0 + 5,R3
\ 00010E 8C.. MOV ?V0 + 6,R4
\ 000110 8D.. MOV ?V0 + 7,R5
\ 000112 90.... MOV DPTR,#__Constant_fffffffc
\ 000115 78.. MOV R0,#?V0 + 0
\ 000117 12.... LCALL ?L_MOV_X
\ 00011A 7583.. MOV DPH,#((??oldBeaconInterval >> 8) & 0xff)
\ 00011D 7582.. MOV DPL,#(??oldBeaconInterval & 0xff)
\ 000120 78.. MOV R0,#?V0 + 0
\ 000122 12.... LCALL ?L_ADD_X
\ 000125 78.. MOV R0,#?V0 + 4
\ 000127 79.. MOV R1,#?V0 + 0
\ 000129 12.... LCALL ?L_EQ
\ 00012C 6003 JZ $+5
\ 00012E 02.... LJMP ??mbcnTxPeriodicalBeaconTask_6 & 0xFFFF
209
210 // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
211 mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);
\ 000131 ; Setup parameters for call to function mtimSetCallback
\ 000131 90.... MOV DPTR,#__Constant_4
\ 000134 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 000137 79.. MOV R1,#(mtxResetBosCounter & 0xff)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -