📄 mac.s51
字号:
??mlmeStartRequest_1:
; Setup parameters for call to function msupChannelValid
LCALL msupChannelValid
MOV A,R1
JZ ??mlmeStartRequest_3
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
CLR C
SUBB A,#0x10
JNC ??mlmeStartRequest_3
MOVX A,@DPTR
CLR C
SUBB A,?V0 + 3
JNC ??mlmeStartRequest_4
MOV A,#0xf
XRL A,?V0 + 3
JZ ??mlmeStartRequest_4
// 339 return INVALID_PARAMETER;
??mlmeStartRequest_3:
MOV R1,#-0x18
LJMP ??mlmeStartRequest_2
// 340
// 341 // Go ahead...
// 342 } else {
// 343
// 344 // Transmit coordinator realignment?
// 345 if (coordRealignment) {
??mlmeStartRequest_4:
MOV A,?V0 + 0
JNZ $+5
LJMP ??mlmeStartRequest_5
// 346
// 347 // Reserve a packet to use with the TX engine
// 348 do {
// 349 pPacket = mtxpReservePacket();
??mlmeStartRequest_6:
; Setup parameters for call to function mtxpReservePacket
LCALL mtxpReservePacket
MOV ?V0 + 4,R2
MOV ?V0 + 5,R3
// 350 } while (!pPacket);
MOV A,R2
JNZ ??mlmeStartRequest_7
MOV A,R3
??mlmeStartRequest_7:
JZ ??mlmeStartRequest_6
// 351
// 352 // Prepare the packet data
// 353 mbcnPrepareCoordinatorRealignment(pPacket, NULL, 0xFFFF, securityEnable, panId, logicalChannel);
; Setup parameters for call to function mbcnPrepareCoordinatorRealignment
MOV A,R6
MOV ?V0 + 0,A
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 19)
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 21)
MOV ?V0 + 0,#-0x1
MOV ?V0 + 1,#-0x1
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 23)
MOV A,R7
MOV R1,A
MOV R4,#0x0
MOV R5,#0x0
MOV DPTR,#(mbcnPrepareCoordinatorRealignment & 0xffff)
MOV A,#((mbcnPrepareCoordinatorRealignment >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x5
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
// 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:
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
// 366 } while (taskNumber == NO_TASK);
MOV A,#-0x1
XRL A,R1
JZ ??mlmeStartRequest_8
// 367 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mtxScheduleTransmission & 0xff)
MOV ?V0 + 1,#((mtxScheduleTransmission >> 8) & 0xff)
MOV ?V0 + 2,#((mtxScheduleTransmission >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 21)
MOV R4,?V0 + 4
MOV R5,?V0 + 5
MOV R2,#0x0
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
// 368
// 369 // Dirty trick: Create another task to tell us when the transmission task has completed
// 370 do {
// 371 taskNumber = mschReserveTask();
??mlmeStartRequest_9:
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
// 372 } while (taskNumber == NO_TASK);
MOV A,#-0x1
XRL A,R1
JZ ??mlmeStartRequest_9
// 373 waiting = TRUE;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV A,#0x1
MOVX @DPTR,A
// 374 mschAddTask(taskNumber, MAC_TASK_PRI_LOW, msupWaitTask, (WORD) &waiting);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(msupWaitTask & 0xff)
MOV ?V0 + 1,#((msupWaitTask >> 8) & 0xff)
MOV ?V0 + 2,#((msupWaitTask >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 21)
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x0
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
// 375 while (waiting);
??mlmeStartRequest_10:
MOVX A,@DPTR
JNZ ??mlmeStartRequest_10
// 376 }
// 377
// 378 // Set beacon and superframe order
// 379 firstBeaconNow = (BOOL)!GET_MF(MF_TRANSMIT_BEACON);
??mlmeStartRequest_5:
MOV DPTR,#(macInfo + 6)
MOVX A,@DPTR
MOV C,0xE0 /* A */.3
JC ??mlmeStartRequest_11
SETB B.0
SJMP ??mlmeStartRequest_12
??mlmeStartRequest_11:
CLR B.0
??mlmeStartRequest_12:
MOV C,B.0
CLR A
MOV 0xE0 /* A */.0,C
MOV ?V0 + 0,A
// 380 mlmeSetRequest(MAC_BEACON_ORDER, &beaconOrder);
; Setup parameters for call to function mlmeSetRequest
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x47
LCALL mlmeSetRequest
// 381
// 382 if (beaconOrder == 15) {
MOVX A,@DPTR
XRL A,#0xf
JNZ ??mlmeStartRequest_13
// 383 mpib.macSuperframeOrder = 15;
MOV A,#0xf
MOV DPTR,#(mpib + 34)
MOVX @DPTR,A
// 384 CLEAR_MF(MF_TRANSMIT_BEACON);
MOV DPTR,#(macInfo + 6)
MOVX A,@DPTR
CLR 0xE0 /* A */.3
MOVX @DPTR,A
// 385 firstBeaconNow = FALSE;
MOV ?V0 + 0,#0x0
// 386
// 387 // Release task number and TX packet, if reserved
// 388 if (mbcnInfo.txTaskNumber != NO_TASK) {
MOV DPTR,#mbcnInfo
MOVX A,@DPTR
XRL A,#0xff
JZ ??mlmeStartRequest_14
// 389 mschReleaseTask(mbcnInfo.txTaskNumber);
; Setup parameters for call to function mschReleaseTask
MOVX A,@DPTR
MOV R1,A
LCALL mschReleaseTask
// 390 mbcnInfo.txTaskNumber = NO_TASK;
MOV A,#-0x1
MOVX @DPTR,A
// 391 }
// 392 if (mbcnInfo.pTxPacket != NULL) {
??mlmeStartRequest_14:
MOV DPTR,#(mbcnInfo + 2)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV A,R2
JNZ ??mlmeStartRequest_15
MOV A,R3
??mlmeStartRequest_15:
JZ ??mlmeStartRequest_16
// 393 mtxpReleasePacket(mbcnInfo.pTxPacket);
; Setup parameters for call to function mtxpReleasePacket
LCALL mtxpReleasePacket
// 394 mbcnInfo.pTxPacket = NULL;
MOV DPTR,#(mbcnInfo + 2)
CLR A
MOVX @DPTR,A
INC DPTR
SJMP ??mlmeStartRequest_17
// 395 }
// 396 } else {
// 397 mpib.macSuperframeOrder = superframeOrder;
??mlmeStartRequest_13:
MOV A,?V0 + 3
MOV DPTR,#(mpib + 34)
??mlmeStartRequest_17:
MOVX @DPTR,A
// 398 }
// 399
// 400 // Prepare to modify the CC2430 PAN coordinator bit
// 401 mdmctrl0 = MDMCTRL0_NO_PAN_COORDINATOR;
??mlmeStartRequest_16:
MOV R3,#0xa
// 402
// 403 // PAN coordinator?
// 404 if (panCoordinator) {
MOV A,?V0 + 6
JZ ??mlmeStartRequest_18
// 405 // Set the PAN ID
// 406 mlmeSetRequest(MAC_PAN_ID, &panId);
; Setup parameters for call to function mlmeSetRequest
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x50
LCALL mlmeSetRequest
// 407
// 408 // Change the RF channel
// 409 msupSetChannel(logicalChannel, TRUE);
; Setup parameters for call to function msupSetChannel
MOV R2,#0x1
MOV A,R6
MOV R1,A
LCALL msupSetChannel
// 410
// 411 // Set PAN coordinator flags
// 412 SET_MF(MF_PAN_COORDINATOR);
MOV DPTR,#(macInfo + 6)
MOVX A,@DPTR
SETB 0xE0 /* A */.1
MOVX @DPTR,A
// 413 mdmctrl0 |= PAN_COORDINATOR_BM;
MOV R3,#0x1a
SJMP ??mlmeStartRequest_19
// 414
// 415 } else {
// 416
// 417 // Just clear the flag
// 418 CLEAR_MF(MF_PAN_COORDINATOR);
??mlmeStartRequest_18:
MOV DPTR,#(macInfo + 6)
MOVX A,@DPTR
CLR 0xE0 /* A */.1
MOVX @DPTR,A
// 419 }
// 420
// 421 // Set the coordinator flag (used in addition to the PAN coordinator flag)
// 422 SET_MF(MF_COORDINATOR);
??mlmeStartRequest_19:
MOVX A,@DPTR
SETB 0xE0 /* A */.0
MOVX @DPTR,A
// 423
// 424 // Set the MDMCTRL0.PAN_COORDINATOR bit (affects address regocnition)
// 425 WRITE_RFR16(MDMCTRL0, mdmctrl0);
MOV A,R3
MOV DPTR,#-0x20fe
MOVX @DPTR,A
MOV A,#-0x1e
MOV DPTR,#-0x20fd
MOVX @DPTR,A
// 426
// 427 // Other parameters
// 428 if (securityEnable) {
MOV A,R7
MOV DPTR,#(macInfo + 6)
JZ ??mlmeStartRequest_20
// 429 SET_MF(MF_BEACON_SECURITY);
MOVX A,@DPTR
SETB 0xE0 /* A */.2
SJMP ??mlmeStartRequest_21
// 430 } else {
// 431 CLEAR_MF(MF_BEACON_SECURITY);
??mlmeStartRequest_20:
MOVX A,@DPTR
CLR 0xE0 /* A */.2
??mlmeStartRequest_21:
MOVX @DPTR,A
// 432 }
// 433
// 434 // Set battery life extension
// 435 mlmeSetRequest(MAC_BATT_LIFE_EXT, &batteryLifeExtension);
; Setup parameters for call to function mlmeSetRequest
MOV A,#0x13
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x43
LCALL mlmeSetRequest
// 436
// 437 // Beacon now?
// 438 if (beaconOrder == 15) {
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0xf
JNZ ??mlmeStartRequest_22
// 439 mtimCancelCallback(mbcnExpirePacketsNonBeacon);
; Setup parameters for call to function mtimCancelCallback
MOV R1,#(mbcnExpirePacketsNonBeacon & 0xff)
MOV R2,#((mbcnExpirePacketsNonBeacon >> 8) & 0xff)
MOV R3,#((mbcnExpirePacketsNonBeacon >> 16) & 0xff)
LCALL mtimCancelCallback
// 440 mtimSetCallback(mbcnExpirePacketsNonBeacon, (UINT32)(aBaseSuperframeDuration / aUnitBackoffPeriod));
; Setup parameters for call to function mtimSetCallback
MOV DPTR,#__Constant_30
LCALL ?PUSH_XSTACK8_X_FOUR
CFI CFA_XSP16 add(XSP16, 22)
MOV R1,#(mbcnExpirePacketsNonBeacon & 0xff)
MOV R2,#((mbcnExpirePacketsNonBeacon >> 8) & 0xff)
MOV R3,#((mbcnExpireP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -