📄 hal_sleep.lst
字号:
\ 000278 7B00 MOV R3,#0x0
\ 00027A 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 00027D 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 00027F 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000282 53FDFD ANL 0xfd,#0xfd
\ 000285 438F02 ORL 0x8f,#0x2
411
412 /* set CC2430 power mode */
413 HAL_SLEEP_SET_POWER_MODE(halPwrMgtMode);
\ 000288 90DF60 MOV DPTR,#-0x20a0
\ 00028B E0 MOVX A,@DPTR
\ 00028C C3 CLR C
\ 00028D 9404 SUBB A,#0x4
\ 00028F 53BEFC ANL 0xbe,#0xfc
\ 000292 E5BE MOV A,0xbe
\ 000294 90.... MOV DPTR,#??halPwrMgtMode
\ 000297 E0 MOVX A,@DPTR
\ 000298 45BE ORL A,0xbe
\ 00029A F5BE MOV 0xbe,A
\ 00029C 4009 JC ??halSleep_17
\ 00029E 00 NOP
\ 00029F 00 NOP
\ 0002A0 00 NOP
\ 0002A1 7403 MOV A,#0x3
\ 0002A3 55BE ANL A,0xbe
\ 0002A5 6004 JZ ??halSleep_18
\ ??halSleep_17:
\ 0002A7 438701 ORL 0x87,#0x1
\ 0002AA 00 NOP
414 /* wake up from sleep */
415
416 HAL_ENTER_CRITICAL_SECTION(intState);
\ ??halSleep_18:
\ 0002AB A2AF MOV C,0xa8.7
\ 0002AD E4 CLR A
\ 0002AE 92E0 MOV 0xE0 /* A */.0,C
\ 0002B0 85..82 MOV DPL,?XSP + 0
\ 0002B3 85..83 MOV DPH,?XSP + 1
\ 0002B6 F0 MOVX @DPTR,A
\ 0002B7 C2AF CLR 0xa8.7
417 }
418
419 /* restore interrupt enable registers */
420 HAL_SLEEP_IE_RESTORE(ien0, ien1, ien2);
\ ??halSleep_16:
\ 0002B9 85..A8 MOV 0xa8,?V0 + 0
\ 0002BC 85..B8 MOV 0xb8,?V0 + 1
\ 0002BF 85..9A MOV 0x9a,?V0 + 2
421
422 /* disable sleep timer interrupt */
423 HAL_SLEEP_TIMER_DISABLE_INT();
\ 0002C2 C2AD CLR 0xa8.5
424
425 /* set main clock source to crystal for Rev B and Rev D only */
426 HAL_SLEEP_SET_MAIN_CLOCK_CRYSTAL();
\ 0002C4 53BEFB ANL 0xbe,#0xfb
\ ??halSleep_19:
\ 0002C7 E5BE MOV A,0xbe
\ 0002C9 A2E6 MOV C,0xE0 /* A */.6
\ 0002CB 50FA JNC ??halSleep_19
\ 0002CD 00 NOP
\ 0002CE ; Setup parameters for call to function halSleepWait
\ 0002CE 7A3F MOV R2,#0x3f
\ 0002D0 7B00 MOV R3,#0x0
\ 0002D2 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 0002D5 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 0002D7 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 0002DA 75C600 MOV 0xc6,#0x0
\ ??halSleep_20:
\ 0002DD E5C6 MOV A,0xc6
\ 0002DF 70FC JNZ ??halSleep_20
\ 0002E1 43BE04 ORL 0xbe,#0x4
427
428 /* Calculate timer elasped */
429 halAccumulatedSleepTime += (HalTimerElapsed() / TICK_COUNT);
\ 0002E4 ; Setup parameters for call to function HalTimerElapsed
\ 0002E4 90.... MOV DPTR,#(HalTimerElapsed & 0xffff)
\ 0002E7 74.. MOV A,#((HalTimerElapsed >> 16) & 0xff)
\ 0002E9 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 0002EC 8A.. MOV ?V0 + 0,R2
\ 0002EE 8B.. MOV ?V0 + 1,R3
\ 0002F0 8C.. MOV ?V0 + 2,R4
\ 0002F2 8D.. MOV ?V0 + 3,R5
\ 0002F4 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 0002F7 78.. MOV R0,#?V0 + 0
\ 0002F9 12.... LCALL ?L_ADD_TO_X
430
431 /* deduct the sleep time for the next iteration */
432 if ( osal_timeout > halAccumulatedSleepTime)
\ 0002FC 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 0002FF 8E.. MOV ?V0 + 0,R6
\ 000301 8F.. MOV ?V0 + 1,R7
\ 000303 75..00 MOV ?V0 + 2,#0x0
\ 000306 75..00 MOV ?V0 + 3,#0x0
\ 000309 78.. MOV R0,#?V0 + 0
\ 00030B 12.... LCALL ?UL_GT_X
\ 00030E 5011 JNC ??halSleep_21
433 {
434 osal_timeout -= halAccumulatedSleepTime;
\ 000310 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000313 78.. MOV R0,#?V0 + 0
\ 000315 12.... LCALL ?L_MOV_X
\ 000318 C3 CLR C
\ 000319 EE MOV A,R6
\ 00031A 95.. SUBB A,?V0 + 0
\ 00031C FE MOV R6,A
\ 00031D EF MOV A,R7
\ 00031E 95.. SUBB A,?V0 + 1
\ 000320 FF MOV R7,A
435 }
436
437 /* if the remaining time is less than the PM_MIN_SLEEP_TIME
438 * burn the remaining time in a delay loop
439 * AN044 - MINIMUM SLEEP PERIODS WITH PULL-DOWN RESISTOR
440 */
441 if ( osal_timeout < PM_MIN_SLEEP_TIME )
\ ??halSleep_21:
\ 000321 C3 CLR C
\ 000322 EE MOV A,R6
\ 000323 940E SUBB A,#0xe
\ 000325 EF MOV A,R7
\ 000326 9400 SUBB A,#0x0
\ 000328 503F JNC ??halSleep_22
442 {
443 halSleepWait(osal_timeout*1000);
\ 00032A ; Setup parameters for call to function halSleepWait
\ 00032A EE MOV A,R6
\ 00032B FA MOV R2,A
\ 00032C EF MOV A,R7
\ 00032D FB MOV R3,A
\ 00032E EA MOV A,R2
\ 00032F 75F0E8 MOV B,#-0x18
\ 000332 A4 MUL AB
\ 000333 CA XCH A,R2
\ 000334 ACF0 MOV R4,B
\ 000336 75F003 MOV B,#0x3
\ 000339 A4 MUL AB
\ 00033A 2C ADD A,R4
\ 00033B FC MOV R4,A
\ 00033C 75F0E8 MOV B,#-0x18
\ 00033F EB MOV A,R3
\ 000340 A4 MUL AB
\ 000341 2C ADD A,R4
\ 000342 FB MOV R3,A
\ 000343 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 000346 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 000348 12.... LCALL ?BCALL ; Banked call to: DPTR()
444 halAccumulatedSleepTime += osal_timeout;
\ 00034B 8E.. MOV ?V0 + 0,R6
\ 00034D 8F.. MOV ?V0 + 1,R7
\ 00034F 75..00 MOV ?V0 + 2,#0x0
\ 000352 75..00 MOV ?V0 + 3,#0x0
\ 000355 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000358 78.. MOV R0,#?V0 + 0
\ 00035A 12.... LCALL ?L_ADD_TO_X
445 osal_timeout = halAccumulatedSleepTime;
\ 00035D 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000360 78.. MOV R0,#?V0 + 0
\ 000362 12.... LCALL ?L_MOV_X
\ 000365 AE.. MOV R6,?V0 + 0
\ 000367 AF.. MOV R7,?V0 + 1
446 }
447
448 #ifdef HAL_SLEEP_DEBUG_LED
449 HAL_TURN_ON_LED3();
450 #else
451 /* use this to turn LEDs back on after sleep */
452 HalLedExitSleep();
\ ??halSleep_22:
\ 000369 ; Setup parameters for call to function HalLedExitSleep
\ 000369 90.... MOV DPTR,#(HalLedExitSleep & 0xffff)
\ 00036C 74.. MOV A,#((HalLedExitSleep >> 16) & 0xff)
\ 00036E 12.... LCALL ?BCALL ; Banked call to: DPTR()
453 #endif
454
455 /* handle peripherals; exit loop if key presses */
456 if ( HalKeyExitSleep() )
\ 000371 ; Setup parameters for call to function HalKeyExitSleep
\ 000371 90.... MOV DPTR,#(HalKeyExitSleep & 0xffff)
\ 000374 74.. MOV A,#((HalKeyExitSleep >> 16) & 0xff)
\ 000376 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000379 E9 MOV A,R1
\ 00037A 701F JNZ ??halSleep_10
457 {
458 #if defined (PM2_HOLDOFF_TIME) && (PM2_HOLDOFF_TIME > 0)
459 /* The deepest sleep alowwed is PM1 until after the timer expired
460 * AN044 - COMBINING POWER MODES
461 */
462 halSleepLevel = CC2430_PM1;
463 osal_stop_timerEx (Hal_TaskID, HAL_SLEEP_TIMER_EVENT);
464 osal_start_timerEx (Hal_TaskID, HAL_SLEEP_TIMER_EVENT, PM2_HOLDOFF_TIME);
465 #endif /* (PM2_HOLDOFF_TIME > 0) */
466 break;
467 }
468
469 /* exit loop if no timer active */
470 if ( timeout == 0 ) break;
\ 00037C 7401 MOV A,#0x1
\ 00037E 12.... LCALL ?XSTACK_DISP0_8
\ 000381 C082 PUSH DPL
\ 000383 C083 PUSH DPH
\ 000385 90.... MOV DPTR,#__Constant_0
\ 000388 78.. MOV R0,#?V0 + 0
\ 00038A 12.... LCALL ?L_MOV_X
\ 00038D D083 POP DPH
\ 00038F D082 POP DPL
\ 000391 78.. MOV R0,#?V0 + 0
\ 000393 12.... LCALL ?L_EQ_X
\ 000396 6003 JZ $+5
\ 000398 02.... LJMP ??halSleep_8 & 0xFFFF
471 }
472
473 /* power on the MAC; blocks until completion */
474 MAC_PwrOnReq();
\ ??halSleep_10:
\ 00039B ; Setup parameters for call to function MAC_PwrOnReq
\ 00039B 90.... MOV DPTR,#(MAC_PwrOnReq & 0xffff)
\ 00039E 74.. MOV A,#((MAC_PwrOnReq >> 16) & 0xff)
\ 0003A0 12.... LCALL ?BCALL ; Banked call to: DPTR()
475
476 /* adjust OSAL timers */
477 osal_adjust_timers();
\ 0003A3 ; Setup parameters for call to function osal_adjust_timers
\ 0003A3 90.... MOV DPTR,#(osal_adjust_timers & 0xffff)
\ 0003A6 74.. MOV A,#((osal_adjust_timers >> 16)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -