📄 mac.lst
字号:
\ 000159 75.... MOV ?V0 + 2,#((miqAddIndirectPacket >> 16) & 0xff)
\ 00015C 78.. MOV R0,#?V0 + 0
\ 00015E 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000161 7A01 MOV R2,#0x1
\ 000163 8010 SJMP ??mcpsDataRequest_8
275 } else {
276 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
\ ??mcpsDataRequest_7:
\ 000165 ; Setup parameters for call to function mschAddTask
\ 000165 75.... MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
\ 000168 75.... MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
\ 00016B 75.... MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
\ 00016E 78.. MOV R0,#?V0 + 0
\ 000170 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 000173 7A00 MOV R2,#0x0
\ ??mcpsDataRequest_8:
\ 000175 12.... LCALL mschAddTask
\ 000178 7403 MOV A,#0x3
\ 00017A 12.... LCALL ?DEALLOC_XSTACK8
\ ??mcpsDataRequest_4:
\ 00017D 7403 MOV A,#0x3
\ 00017F 12.... LCALL ?DEALLOC_XSTACK8
\ 000182 REQUIRE ?Subroutine0
\ 000182 ; // Fall through to label ?Subroutine0
277 }
278
279 #else // RFD
280 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
281 #endif
282
283 } // mcpsDataRequest
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 7F08 MOV R7,#0x8
\ 000002 02.... LJMP ?FUNC_LEAVE_XDATA
284
285
286
287
288 //-------------------------------------------------------------------------------------------------------
289 // MAC_ENUM mlmeStartRequest(WORD panId, UINT8 logicalChannel, UINT8 beaconOrder, UINT8 ...)
290 //
291 // DESCRIPTION:
292 // As a coordinator: Start or stop transmitting beacons.
293 //
294 // PARAMETERS:
295 // WORD panId
296 // The new PAN identifier
297 // UINT8 logicalChannel
298 // The channel to operate on (11-26)
299 // UINT8 beaconOrder
300 // The beacon order, which defines the beacon interval (0-14 for beacon PAN, 15 for non-beacon PAN)
301 // UINT8 superframeOrder
302 // The superframe order, which defines the superframe duration (that is the active period of the
303 // beacon interval). superframeOrder must be <= beaconOrder
304 // BOOL panCoordinator
305 // TRUE if this node should be the PAN coordinator
306 // BOOL batteryLifeExtension
307 // Enable battery life extension
308 // BOOL coordRealignment
309 // Transmit a coordinator realignment frame before making the changes
310 // BOOL securityEnable
311 // Security is enabled?
312 //
313 // RETURN VALUE:
314 // MAC_ENUM
315 // SUCCESS, NO_SHORT_ADDRESS or INVALID_PARAMETER
316 //-------------------------------------------------------------------------------------------------------
317 #if MAC_OPT_FFD
\ In segment NEAR_CODE, align 1, keep-with-next
318 ROOT MAC_ENUM mlmeStartRequest(WORD panId,
\ mlmeStartRequest:
319 UINT8 logicalChannel,
320 UINT8 beaconOrder,
321 UINT8 superframeOrder,
322 BOOL panCoordinator,
323 BOOL batteryLifeExtension,
324 BOOL coordRealignment,
325 BOOL securityEnable)
326 {
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 4
\ 000005 74FC MOV A,#-0x4
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A 7402 MOV A,#0x2
\ 00000C 12.... LCALL ?XSTACK_DISP0_8
\ 00000F EA MOV A,R2
\ 000010 F0 MOVX @DPTR,A
\ 000011 A3 INC DPTR
\ 000012 EB MOV A,R3
\ 000013 F0 MOVX @DPTR,A
\ 000014 EC MOV A,R4
\ 000015 85..82 MOV DPL,?XSP + 0
\ 000018 85..83 MOV DPH,?XSP + 1
\ 00001B F0 MOVX @DPTR,A
\ 00001C E9 MOV A,R1
\ 00001D FE MOV R6,A
\ 00001E 8D.. MOV ?V0 + 3,R5
\ 000020 7412 MOV A,#0x12
\ 000022 12.... LCALL ?XSTACK_DISP0_8
\ 000025 E0 MOVX A,@DPTR
\ 000026 F5.. MOV ?V0 + 6,A
\ 000028 7414 MOV A,#0x14
\ 00002A 12.... LCALL ?XSTACK_DISP0_8
\ 00002D E0 MOVX A,@DPTR
\ 00002E F5.. MOV ?V0 + 0,A
\ 000030 7415 MOV A,#0x15
\ 000032 12.... LCALL ?XSTACK_DISP0_8
\ 000035 E0 MOVX A,@DPTR
\ 000036 FF MOV R7,A
327 BOOL firstBeaconNow;
328 WORD mdmctrl0;
329 BOOL waiting;
330 MAC_TX_PACKET *pPacket;
331 BYTE taskNumber;
332
333 // Is the short address OK?
334 if (mpib.macShortAddress == 0xFFFF) {
\ 000037 90.... MOV DPTR,#(mpib + 32)
\ 00003A E0 MOVX A,@DPTR
\ 00003B 64FF XRL A,#0xff
\ 00003D 7004 JNZ ??mlmeStartRequest_0
\ 00003F A3 INC DPTR
\ 000040 E0 MOVX A,@DPTR
\ 000041 64FF XRL A,#0xff
\ ??mlmeStartRequest_0:
\ 000043 7005 JNZ ??mlmeStartRequest_1
335 return NO_SHORT_ADDRESS;
\ 000045 79EC MOV R1,#-0x14
\ 000047 02.... LJMP ??mlmeStartRequest_2
336
337 // Are the parameters OK?
338 } else if ((!msupChannelValid(logicalChannel)) || (beaconOrder > BEACON_ORDER_NO_BEACON) || ((superframeOrder > beaconOrder) && (superframeOrder != BEACON_ORDER_NO_BEACON))) {
\ ??mlmeStartRequest_1:
\ 00004A ; Setup parameters for call to function msupChannelValid
\ 00004A 12.... LCALL msupChannelValid
\ 00004D E9 MOV A,R1
\ 00004E 6018 JZ ??mlmeStartRequest_3
\ 000050 85..82 MOV DPL,?XSP + 0
\ 000053 85..83 MOV DPH,?XSP + 1
\ 000056 E0 MOVX A,@DPTR
\ 000057 C3 CLR C
\ 000058 9410 SUBB A,#0x10
\ 00005A 500C JNC ??mlmeStartRequest_3
\ 00005C E0 MOVX A,@DPTR
\ 00005D C3 CLR C
\ 00005E 95.. SUBB A,?V0 + 3
\ 000060 500B JNC ??mlmeStartRequest_4
\ 000062 740F MOV A,#0xf
\ 000064 65.. XRL A,?V0 + 3
\ 000066 6005 JZ ??mlmeStartRequest_4
339 return INVALID_PARAMETER;
\ ??mlmeStartRequest_3:
\ 000068 79E8 MOV R1,#-0x18
\ 00006A 02.... LJMP ??mlmeStartRequest_2
340
341 // Go ahead...
342 } else {
343
344 // Transmit coordinator realignment?
345 if (coordRealignment) {
\ ??mlmeStartRequest_4:
\ 00006D E5.. MOV A,?V0 + 0
\ 00006F 7003 JNZ $+5
\ 000071 02.... LJMP ??mlmeStartRequest_5
346
347 // Reserve a packet to use with the TX engine
348 do {
349 pPacket = mtxpReservePacket();
\ ??mlmeStartRequest_6:
\ 000074 ; Setup parameters for call to function mtxpReservePacket
\ 000074 12.... LCALL mtxpReservePacket
\ 000077 8A.. MOV ?V0 + 4,R2
\ 000079 8B.. MOV ?V0 + 5,R3
350 } while (!pPacket);
\ 00007B EA MOV A,R2
\ 00007C 7001 JNZ ??mlmeStartRequest_7
\ 00007E EB MOV A,R3
\ ??mlmeStartRequest_7:
\ 00007F 60F3 JZ ??mlmeStartRequest_6
351
352 // Prepare the packet data
353 mbcnPrepareCoordinatorRealignment(pPacket, NULL, 0xFFFF, securityEnable, panId, logicalChannel);
\ 000081 ; Setup parameters for call to function mbcnPrepareCoordinatorRealignment
\ 000081 EE MOV A,R6
\ 000082 F5.. MOV ?V0 + 0,A
\ 000084 78.. MOV R0,#?V0 + 0
\ 000086 12.... LCALL ?PUSH_XSTACK_I_ONE
\ 000089 7403 MOV A,#0x3
\ 00008B 12.... LCALL ?XSTACK_DISP0_8
\ 00008E 12.... LCALL ?PUSH_XSTACK8_X_TWO
\ 000091 75..FF MOV ?V0 + 0,#-0x1
\ 000094 75..FF MOV ?V0 + 1,#-0x1
\ 000097 78.. MOV R0,#?V0 + 0
\ 000099 12.... LCALL ?PUSH_XSTACK_I_TWO
\ 00009C EF MOV A,R7
\ 00009D F9 MOV R1,A
\ 00009E 7C00 MOV R4,#0x0
\ 0000A0 7D00 MOV R5,#0x0
\ 0000A2 90.... MOV DPTR,#(mbcnPrepareCoordinatorRealignment & 0xffff)
\ 0000A5 74.. MOV A,#((mbcnPrepareCoordinatorRealignment >> 16) & 0xff)
\ 0000A7 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 0000AA 7405 MOV A,#0x5
\ 0000AC 12.... LCALL ?DEALLOC_XSTACK8
354 #if MAC_OPT_SECURITY
355 // In case of frame counter overflow or missing key
356 // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY
357 if (pPacket->securitySuite >= 8) {
358 mtxpReleasePacket(pPacket);
359 return pPacket->securitySuite;
360 }
361 #endif
362
363 // Initiate the transmission
364 do {
365 taskNumber = mschReserveTask();
\ ??mlmeStartRequest_8:
\ 0000AF ; Setup parameters for call to function mschReserveTask
\ 0000AF 12.... LCALL mschReserveTask
366 } while (taskNumber == NO_TASK);
\ 0000B2 74FF MOV A,#-0x1
\ 0000B4 69 XRL A,R1
\ 0000B5 60F8 JZ ??mlmeStartRequest_8
367 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
\ 0000B7 ; Setup parameters for call to function mschAddTask
\ 0000B7 75.... MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
\ 0000BA 75.... MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
\ 0000BD 75.... MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
\ 0000C0 78.. MOV R0,#?V0 + 0
\ 0000C2 12.... LCALL ?PUSH_XSTACK_I_THREE
\ 0000C5 AC.. MOV R4,?V0 + 4
\ 0000C7 AD.. MOV R5,?V0 + 5
\ 0000C9 7A00 MOV R2,#0x0
\ 0000CB 12.... LCALL mschAddTask
\ 0000CE 7403 MOV A,#0x3
\ 0000D0 12.... LCALL ?DEALLOC_XSTACK8
368
369 // Dirty trick: Create another task to tell us when the transmission task has completed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -