📄 hal_sleep.s51
字号:
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JZ ??halSleep_2
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_GT
JNC ??halSleep_2
// 297 {
// 298 timeout = macTimeout;
??halSleep_1:
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 0
LCALL ?L_MOV_TO_X
// 299 }
// 300 }
// 301
// 302 /* HAL_SLEEP_PM2 is entered only if the timeout is zero and
// 303 * the device is a stimulated device.
// 304 */
// 305 halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JNZ ??halSleep_2
MOV A,#0x3
MOV DPTR,#??halPwrMgtMode
MOVX @DPTR,A
SJMP ??halSleep_3
??halSleep_2:
MOV A,#0x2
MOV DPTR,#??halPwrMgtMode
MOVX @DPTR,A
MOV DPTR,#??halSleepLevel
MOVX A,@DPTR
CLR C
SUBB A,#0x2
JNC ??halSleep_4
// 306
// 307 /* The sleep mode is also controlled by halSleepLevel which
// 308 * defined the deepest level of sleep allowed. This is applied
// 309 * to timer sleep only.
// 310 */
// 311 if ( timeout > 0 && halPwrMgtMode > halSleepLevel )
// 312 {
// 313 halPwrMgtMode = halSleepLevel;
MOVX A,@DPTR
MOV DPTR,#??halPwrMgtMode
MOVX @DPTR,A
// 314 }
// 315
// 316 /* Allow PM1 only.
// 317 * AN044 - RESTRICT USE TO PM1 ONLY
// 318 */
// 319 #if defined (PM1_ONLY) && (PM1_ONLY == TRUE)
// 320 if (timeout > 0)
// 321 {
// 322 halPwrMgtMode = CC2430_PM1;
// 323 }
// 324 else
// 325 {
// 326 /* do not allow PM3 either */
// 327 return;
// 328 }
// 329 #endif
// 330
// 331 /* DEEP sleep can only be entered when zgPollRate == 0.
// 332 * This is to eliminate any possibility of entering PM3 between
// 333 * two network timers.
// 334 */
// 335 #if !defined (RTR_NWK) && defined (NWK_AUTO_POLL)
// 336 if ((timeout > HAL_SLEEP_MS_TO_320US(PM_MIN_SLEEP_TIME)) ||
// 337 (timeout == 0 && zgPollRate == 0))
??halSleep_4:
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_2d
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?UL_GT_X
JNC ??halSleep_5
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JZ $+5
LJMP ??halSleep_6 & 0xFFFF
??halSleep_3:
MOV DPTR,#zgPollRate
MOVX A,@DPTR
JNZ ??halSleep_7
INC DPTR
MOVX A,@DPTR
??halSleep_7:
JZ $+5
LJMP ??halSleep_6 & 0xFFFF
// 338 #else
// 339 if ((timeout > HAL_SLEEP_MS_TO_320US(PM_MIN_SLEEP_TIME)) ||
// 340 (timeout == 0))
// 341 #endif
// 342 {
// 343 HAL_ENTER_CRITICAL_SECTION(intState);
??halSleep_5:
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
CLR 0xa8.7
// 344
// 345 /* one last check for active OSAL task */
// 346 if (osalNextActiveTask() == NULL)
; Setup parameters for call to function osalNextActiveTask
MOV DPTR,#(osalNextActiveTask & 0xffff)
MOV A,#((osalNextActiveTask >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R2
JNZ ??halSleep_8
MOV A,R3
??halSleep_8:
JZ $+5
LJMP ??halSleep_9 & 0xFFFF
// 347 {
// 348 /* always use "deep sleep" to turn off radio VREG on CC2430 */
// 349 if (MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)
; Setup parameters for call to function MAC_PwrOffReq
MOV R1,#0x2
MOV DPTR,#(MAC_PwrOffReq & 0xffff)
MOV A,#((MAC_PwrOffReq >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JZ $+5
LJMP ??halSleep_9 & 0xFFFF
// 350 {
// 351 while ( (HAL_SLEEP_MS_TO_320US(halAccumulatedSleepTime) < timeout) || (timeout == 0) )
??halSleep_10:
MOV DPTR,#??halAccumulatedSleepTime
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV DPTR,#__Constant_64
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV R0,#?V0 + 0
MOV R1,#?V0 + 4
LCALL ?L_MUL
MOV DPTR,#__Constant_1f
MOV R0,#?V0 + 0
LCALL ?L_ADD_X
MOV A,#0x5
MOV R0,#?V0 + 0
LCALL ?UL_SHR
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_GT
JC ??halSleep_11
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JZ $+5
LJMP ??halSleep_12 & 0xFFFF
// 352 {
// 353 /* get peripherals ready for sleep */
// 354 HalKeyEnterSleep();
??halSleep_11:
; Setup parameters for call to function HalKeyEnterSleep
MOV DPTR,#(HalKeyEnterSleep & 0xffff)
MOV A,#((HalKeyEnterSleep >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 355
// 356 #ifdef HAL_SLEEP_DEBUG_LED
// 357 HAL_TURN_OFF_LED3();
// 358 #else
// 359 /* use this to turn LEDs off during sleep */
// 360 HalLedEnterSleep();
; Setup parameters for call to function HalLedEnterSleep
MOV DPTR,#(HalLedEnterSleep & 0xffff)
MOV A,#((HalLedEnterSleep >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 361 #endif
// 362
// 363 /* set main clock source to RC oscillator for Rev B and Rev D */
// 364 HAL_SLEEP_SET_MAIN_CLOCK_RC();
ANL 0xbe,#0xfb
??halSleep_13:
MOV A,0xbe
MOV C,0xE0 /* A */.5
JNC ??halSleep_13
NOP
MOV 0xc6,#0x49
??halSleep_14:
MOV A,#0x49
XRL A,0xc6
JNZ ??halSleep_14
ORL 0xbe,#0x4
// 365
// 366 /* enable sleep timer interrupt */
// 367 if (timeout != 0)
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_0
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?L_EQ_X
JZ ??halSleep_15
// 368 {
// 369 if (timeout > HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ))
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_185197
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?UL_GT_X
JC ??halSleep_16
// 370 {
// 371 timeout -= HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME );
MOV DPTR,#__Constant_ffe7ae6a
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 0
LCALL ?L_ADD_TO_X
// 372 halSleepSetTimer(HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ));
; Setup parameters for call to function halSleepSetTimer
MOV DPTR,#__Constant_185196
SJMP ??halSleep_17
// 373 }
// 374 else
// 375 {
// 376 /* set sleep timer */
// 377 halSleepSetTimer(timeout);
??halSleep_16:
; Setup parameters for call to function halSleepSetTimer
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
??halSleep_17:
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R2,?V0 + 0
MOV R3,?V0 + 1
MOV R4,?V0 + 2
MOV R5,?V0 + 3
MOV DPTR,#(halSleepSetTimer & 0xffff)
MOV A,#((halSleepSetTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 378 }
// 379
// 380 /* set up sleep timer interrupt */
// 381 HAL_SLEEP_TIMER_CLEAR_INT();
CLR 0xc0.7
// 382 HAL_SLEEP_TIMER_ENABLE_INT();
SETB 0xa8.5
// 383 }
// 384
// 385 #ifdef HAL_SLEEP_DEBUG_LED
// 386 if (halPwrMgtMode == CC2430_PM1)
// 387 {
// 388 HAL_TURN_ON_LED1();
// 389 }
// 390 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -