📄 mac_power_management.s51
字号:
MOV R3,A
MOV R2,?V0 + 0
MOV A,R7
MOV R1,A
LCALL mpmResumeMacAfterPowerDown
// 332
// 333 }
MOV A,#0x1
CFI EndBlock cfiBlock9
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock10 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI Invalid
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 8)
CFI Valid
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock10
// 334
// 335
// 336 //-------------------------------------------------------------------------------------------------------
// 337 // ROOT void mpmPowerDownMac (BYTE *rxOnWhenIdle)
// 338 //
// 339 // DESCRIPTION:
// 340 // Stops MAC prosessing and turns the radio off.
// 341 //
// 342 // ARGUMENTS:
// 343 // BYTE rxOnWhenIdle
// 344 // Contains the value of rxOnWhenIdle prior to power down
// 345 //
// 346 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 347 ROOT void mpmPowerDownMac (BYTE *rxOnWhenIdle)
mpmPowerDownMac:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function mpmPowerDownMac
// 348 {
FUNCALL mpmPowerDownMac, mlmeGetRequest
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 1, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 1, STACK
FUNCALL mpmPowerDownMac, mlmeSetRequest
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 1, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 1, STACK
FUNCALL mpmPowerDownMac, mpmSetRequest
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 1, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 1, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 1
MOV A,#-0x1
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 1)
// 349 BYTE setAttributeValue;
// 350
// 351 mlmeGetRequest (MAC_RX_ON_WHEN_IDLE, rxOnWhenIdle);
; Setup parameters for call to function mlmeGetRequest
MOV R1,#0x52
LCALL mlmeGetRequest
// 352
// 353 setAttributeValue = FALSE;
CLR A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 354 mlmeSetRequest (MAC_RX_ON_WHEN_IDLE, &setAttributeValue);
; Setup parameters for call to function mlmeSetRequest
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x52
LCALL mlmeSetRequest
// 355
// 356 // Power down
// 357 mpmSetRequest(MPM_CC2430_XOSC_AND_VREG_OFF);
; Setup parameters for call to function mpmSetRequest
MOV R1,#0x2
LCALL mpmSetRequest
// 358 while (mpmGetState() != MPM_CC2430_XOSC_AND_VREG_OFF);
??mpmPowerDownMac_0:
MOV DPTR,#mpmInfo
MOVX A,@DPTR
XRL A,#0x2
JNZ ??mpmPowerDownMac_0
// 359
// 360 }
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 XSP16+0
LJMP ??Subroutine0_0
CFI EndBlock cfiBlock11
// 361
// 362 //-------------------------------------------------------------------------------------------------------
// 363 // void mpmResumeMacAfterPowerDown (RESUME_MODE resumeMode,
// 364 // BOOL synchronousStart,
// 365 // BOOL rxOnWhenIdle)
// 366 //
// 367 // DESCRIPTION:
// 368 // Resumes the mac protocol after a power down
// 369 //
// 370 // ARGUMENTS:
// 371 // RESUME_MODE resumeMode
// 372 // Depends on how much of the MAC variables that was preserved during power down. In power control
// 373 // PM1 or when all data are places in upper 4 kRAM, RESUME_MODE_ALL_PRESERVED can be used. The
// 374 // XDATA segment and the PM0_XDATA segment must be located in upper 4 kRAM.
// 375 // If the PM0_XDATA segment is located in lower 4 kRAM and XDATA in upper 4 kRAM,
// 376 // the RESUME_MODE_PARTS_PRESERVED must be used.
// 377 // RESUME_MODE_ALL_PRESERVED, restarts only timer2. The fastest and less power consuming mode
// 378 // RESUME_MODE_PARTS_PRESERVED restarts timer2, the task and memory pool system
// 379 //
// 380 // BOOL synchronousStart
// 381 // FALSE Start timer2 immediate
// 382 // TRUE Start timer2 synchronous with external 32.768 kHz clock
// 383 //
// 384 // BOOL rxOnWhenIdle
// 385 // FALSE RX is off
// 386 // TRUE Turn RX on
// 387 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 388 ROOT void mpmResumeMacAfterPowerDown (RESUME_MODE resumeMode,
mpmResumeMacAfterPowerDown:
CFI Block cfiBlock12 Using cfiCommon0
CFI Function mpmResumeMacAfterPowerDown
// 389 BOOL synchronousStart,
// 390 BOOL rxOnWhenIdle)
// 391 {
FUNCALL mpmResumeMacAfterPowerDown, mtimStartSync
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mpmSetRequest
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, InitializeCommonStorage
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, InitializeDma
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, InitializeRfInterrupts
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mschInit
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mtimInit
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mpmSetRequest
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mrxpInit
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mtxpInit
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, miqInit
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mschReserveTask
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mtimSetCallback
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL mpmResumeMacAfterPowerDown, mlmeSetRequest
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mlmeSyncRequest
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, EnableRfInterrupts
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mpmResumeMacAfterPowerDown, mlmeSetRequest
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
MOV A,R1
MOV R7,A
MOV ?V0 + 0,R2
MOV A,R3
MOV R6,A
// 392 BYTE setAttributeValue;
// 393 WORD mdmctrl0;
// 394
// 395 switch (resumeMode)
MOV A,R7
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for mpmResumeMacAfterPowerDown>_0`:
DB 0
DB 1
DW ??mpmResumeMacAfterPowerDown_0
DW ??mpmResumeMacAfterPowerDown_1
DW ??mpmResumeMacAfterPowerDown_2
// 396 {
// 397 case RESUME_MODE_ALL_PRESERVED:
// 398 DISABLE_GLOBAL_INT();
??mpmResumeMacAfterPowerDown_1:
CLR 0xa8.7
// 399
// 400 if (synchronousStart == FALSE)
MOV A,R2
JNZ ??mpmResumeMacAfterPowerDown_3
// 401 T2_START_NOSYNC ();
ANL 0xc3,#0xfd
ORL 0xc3,#0x1
SJMP ??mpmResumeMacAfterPowerDown_4
// 402 else
// 403 mtimStartSync ();
??mpmResumeMacAfterPowerDown_3:
; Setup parameters for call to function mtimStartSync
LCALL mtimStartSync
// 404
// 405 ENABLE_TIMER2_INT();
??mpmResumeMacAfterPowerDown_4:
SETB 0xb8.2
// 406 macInfo.state = MAC_STATE_DEFAULT;
CLR A
MOV DPTR,#macInfo
MOVX @DPTR,A
// 407
// 408 // Power up radio
// 409 mpmSetRequest(MPM_CC2430_ON);
; Setup parameters for call to function mpmSetRequest
MOV R1,A
LCALL mpmSetRequest
// 410 while (mpmGetState() != MPM_CC2430_ON);
??mpmResumeMacAfterPowerDown_5:
MOV DPTR,#mpmInfo
MOVX A,@DPTR
JNZ ??mpmResumeMacAfterPowerDown_5
// 411 DISABLE_TIMER2_INT();
CLR 0xb8.2
SJMP ??mpmResumeMacAfterPowerDown_0
// 412 break;
// 413
// 414 case RESUME_MODE_PARTS_PRESERVED:
// 415 DISABLE_GLOBAL_INT();
??mpmResumeMacAfterPowerDown_2:
CLR 0xa8.7
// 416 InitializeCommonStorage ();
; Setup parameters for call to function InitializeCommonStorage
LCALL InitializeCommonStorage
// 417 InitializeDma ();
; Setup parameters for call to function InitializeDma
LCALL InitializeDma
// 418 InitializeRfInterrupts ();
; Setup parameters for call to function InitializeRfInterrupts
LCALL InitializeRfInterrupts
// 419 mschInit();
; Setup parameters for call to function mschInit
LCALL mschInit
// 420 mtimInit(synchronousStart);
; Setup parameters for call to function mtimInit
MOV R1,?V0 + 0
LCALL mtimInit
// 421 ENABLE_TIMER2_INT();
SETB 0xb8.2
// 422 macInfo.state = MAC_STATE_DEFAULT;
CLR A
MOV DPTR,#macInfo
MOVX @DPTR,A
// 423
// 424 // Power up radio
// 425 mpmSetRequest(MPM_CC2430_ON);
; Setup parameters for call to function mpmSetRequest
MOV R1,A
LCALL mpmSetRequest
// 426 while (mpmGetState() != MPM_CC2430_ON);
??mpmResumeMacAfterPowerDown_6:
MOV DPTR,#mpmInfo
MOVX A,@DPTR
JNZ ??mpmResumeMacAfterPowerDown_6
// 427
// 428 DISABLE_TIMER2_INT();
CLR 0xb8.2
// 429
// 430 // Initialize variables in the various modules
// 431 mrxpInit();
; Setup parameters for call to function mrxpInit
LCALL mrxpInit
// 432 mtxpInit();
; Setup parameters for call to function mtxpInit
LCALL mtxpInit
// 433 #if MAC_OPT_FFD
// 434 miqInit();
; Setup parameters for call to function miqInit
LCALL miqInit
// 435 #endif
// 436 mtxInfo.startTxTask = mschReserveTask();
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
MOV A,R1
MOV DPTR,#(mtxInfo + 12)
MOVX @DPTR,A
// 437 mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;
CLR A
MOV DPTR,#(mrxInfo + 12)
MOVX @DPTR,A
// 438 mbcnInfo.rxTaskNumber = NO_TASK;
MOV A,#-0x1
MOV DPTR,#(mbcnInfo + 1)
MOVX @DPTR,A
// 439 mbcnInfo.txTaskNumber = NO_TASK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -