📄 hal_sleep.lst
字号:
\ 000281 D281 SETB 0x80.1
\ 000283 ; Setup parameters for call to function halSleepWait
\ 000283 7AB4 MOV R2,#-0x4c
\ 000285 7B00 MOV R3,#0x0
\ 000287 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 00028A 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 00028C 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00028F 53FDFD ANL 0xfd,#0xfd
\ 000292 438F02 ORL 0x8f,#0x2
411
412 /* set CC2430 power mode */
413 HAL_SLEEP_SET_POWER_MODE(halPwrMgtMode);
\ 000295 90DF60 MOV DPTR,#-0x20a0
\ 000298 E0 MOVX A,@DPTR
\ 000299 C3 CLR C
\ 00029A 9404 SUBB A,#0x4
\ 00029C 53BEFC ANL 0xbe,#0xfc
\ 00029F E5BE MOV A,0xbe
\ 0002A1 90.... MOV DPTR,#??halPwrMgtMode
\ 0002A4 E0 MOVX A,@DPTR
\ 0002A5 45BE ORL A,0xbe
\ 0002A7 F5BE MOV 0xbe,A
\ 0002A9 4009 JC ??halSleep_19
\ 0002AB 00 NOP
\ 0002AC 00 NOP
\ 0002AD 00 NOP
\ 0002AE 7403 MOV A,#0x3
\ 0002B0 55BE ANL A,0xbe
\ 0002B2 6004 JZ ??halSleep_20
\ ??halSleep_19:
\ 0002B4 438701 ORL 0x87,#0x1
\ 0002B7 00 NOP
414 /* wake up from sleep */
415
416 HAL_ENTER_CRITICAL_SECTION(intState);
\ ??halSleep_20:
\ 0002B8 A2AF MOV C,0xa8.7
\ 0002BA E4 CLR A
\ 0002BB 92E0 MOV 0xE0 /* A */.0,C
\ 0002BD 85..82 MOV DPL,?XSP + 0
\ 0002C0 85..83 MOV DPH,?XSP + 1
\ 0002C3 F0 MOVX @DPTR,A
\ 0002C4 C2AF CLR 0xa8.7
417 }
418
419 /* restore interrupt enable registers */
420 HAL_SLEEP_IE_RESTORE(ien0, ien1, ien2);
\ ??halSleep_18:
\ 0002C6 85..A8 MOV 0xa8,?V0 + 0
\ 0002C9 85..B8 MOV 0xb8,?V0 + 1
\ 0002CC 85..9A MOV 0x9a,?V0 + 2
421
422 /* disable sleep timer interrupt */
423 HAL_SLEEP_TIMER_DISABLE_INT();
\ 0002CF 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();
\ 0002D1 53BEFB ANL 0xbe,#0xfb
\ ??halSleep_21:
\ 0002D4 E5BE MOV A,0xbe
\ 0002D6 A2E6 MOV C,0xE0 /* A */.6
\ 0002D8 50FA JNC ??halSleep_21
\ 0002DA 00 NOP
\ 0002DB ; Setup parameters for call to function halSleepWait
\ 0002DB 7A3F MOV R2,#0x3f
\ 0002DD 7B00 MOV R3,#0x0
\ 0002DF 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 0002E2 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 0002E4 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 0002E7 75C600 MOV 0xc6,#0x0
\ ??halSleep_22:
\ 0002EA E5C6 MOV A,0xc6
\ 0002EC 70FC JNZ ??halSleep_22
\ 0002EE 43BE04 ORL 0xbe,#0x4
427
428 /* Calculate timer elasped */
429 halAccumulatedSleepTime += (HalTimerElapsed() / TICK_COUNT);
\ 0002F1 ; Setup parameters for call to function HalTimerElapsed
\ 0002F1 90.... MOV DPTR,#(HalTimerElapsed & 0xffff)
\ 0002F4 74.. MOV A,#((HalTimerElapsed >> 16) & 0xff)
\ 0002F6 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 0002F9 8A.. MOV ?V0 + 0,R2
\ 0002FB 8B.. MOV ?V0 + 1,R3
\ 0002FD 8C.. MOV ?V0 + 2,R4
\ 0002FF 8D.. MOV ?V0 + 3,R5
\ 000301 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000304 78.. MOV R0,#?V0 + 0
\ 000306 12.... LCALL ?L_ADD_TO_X
430
431 /* deduct the sleep time for the next iteration */
432 if ( osal_timeout > halAccumulatedSleepTime)
\ 000309 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 00030C 8E.. MOV ?V0 + 0,R6
\ 00030E 8F.. MOV ?V0 + 1,R7
\ 000310 75..00 MOV ?V0 + 2,#0x0
\ 000313 75..00 MOV ?V0 + 3,#0x0
\ 000316 78.. MOV R0,#?V0 + 0
\ 000318 12.... LCALL ?UL_GT_X
\ 00031B 5011 JNC ??halSleep_23
433 {
434 osal_timeout -= halAccumulatedSleepTime;
\ 00031D 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000320 78.. MOV R0,#?V0 + 0
\ 000322 12.... LCALL ?L_MOV_X
\ 000325 C3 CLR C
\ 000326 EE MOV A,R6
\ 000327 95.. SUBB A,?V0 + 0
\ 000329 FE MOV R6,A
\ 00032A EF MOV A,R7
\ 00032B 95.. SUBB A,?V0 + 1
\ 00032D 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_23:
\ 00032E C3 CLR C
\ 00032F EE MOV A,R6
\ 000330 940E SUBB A,#0xe
\ 000332 EF MOV A,R7
\ 000333 9400 SUBB A,#0x0
\ 000335 503F JNC ??halSleep_24
442 {
443 halSleepWait(osal_timeout*1000);
\ 000337 ; Setup parameters for call to function halSleepWait
\ 000337 EE MOV A,R6
\ 000338 FA MOV R2,A
\ 000339 EF MOV A,R7
\ 00033A FB MOV R3,A
\ 00033B EA MOV A,R2
\ 00033C 75F0E8 MOV B,#-0x18
\ 00033F A4 MUL AB
\ 000340 CA XCH A,R2
\ 000341 ACF0 MOV R4,B
\ 000343 75F003 MOV B,#0x3
\ 000346 A4 MUL AB
\ 000347 2C ADD A,R4
\ 000348 FC MOV R4,A
\ 000349 75F0E8 MOV B,#-0x18
\ 00034C EB MOV A,R3
\ 00034D A4 MUL AB
\ 00034E 2C ADD A,R4
\ 00034F FB MOV R3,A
\ 000350 90.... MOV DPTR,#(halSleepWait & 0xffff)
\ 000353 74.. MOV A,#((halSleepWait >> 16) & 0xff)
\ 000355 12.... LCALL ?BCALL ; Banked call to: DPTR()
444 halAccumulatedSleepTime += osal_timeout;
\ 000358 8E.. MOV ?V0 + 0,R6
\ 00035A 8F.. MOV ?V0 + 1,R7
\ 00035C 75..00 MOV ?V0 + 2,#0x0
\ 00035F 75..00 MOV ?V0 + 3,#0x0
\ 000362 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000365 78.. MOV R0,#?V0 + 0
\ 000367 12.... LCALL ?L_ADD_TO_X
445 osal_timeout = halAccumulatedSleepTime;
\ 00036A 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 00036D 78.. MOV R0,#?V0 + 0
\ 00036F 12.... LCALL ?L_MOV_X
\ 000372 AE.. MOV R6,?V0 + 0
\ 000374 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_24:
\ 000376 ; Setup parameters for call to function HalLedExitSleep
\ 000376 90.... MOV DPTR,#(HalLedExitSleep & 0xffff)
\ 000379 74.. MOV A,#((HalLedExitSleep >> 16) & 0xff)
\ 00037B 12.... LCALL ?BCALL ; Banked call to: DPTR()
453 #endif
454
455 /* handle peripherals; exit loop if key presses */
456 if ( HalKeyExitSleep() )
\ 00037E ; Setup parameters for call to function HalKeyExitSleep
\ 00037E 90.... MOV DPTR,#(HalKeyExitSleep & 0xffff)
\ 000381 74.. MOV A,#((HalKeyExitSleep >> 16) & 0xff)
\ 000383 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000386 E9 MOV A,R1
\ 000387 701F JNZ ??halSleep_12
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;
\ 000389 7401 MOV A,#0x1
\ 00038B 12.... LCALL ?XSTACK_DISP0_8
\ 00038E C082 PUSH DPL
\ 000390 C083 PUSH DPH
\ 000392 90.... MOV DPTR,#__Constant_0
\ 000395 78.. MOV R0,#?V0 + 0
\ 000397 12.... LCALL ?L_MOV_X
\ 00039A D083 POP DPH
\ 00039C D082 POP DPL
\ 00039E 78.. MOV R0,#?V0 + 0
\ 0003A0 12.... LCALL ?L_EQ_X
\ 0003A3 6003 JZ $+5
\ 0003A5 02.... LJMP ??halSleep_10 & 0xFFFF
471 }
472
473 /* power on the MAC; blocks until completion */
474 MAC_PwrOnReq();
\ ??halSleep_12:
\ 0003A8 ; Setup parameters for call to function MAC_PwrOnReq
\ 0003A8 90.... MOV DPTR,#(MAC_PwrOnReq & 0xffff)
\ 0003AB 74.. MOV A,#((MAC_PwrOnReq >> 16) & 0xff)
\ 0003AD 12.... LCALL ?BCALL ; Banked call to: DPTR()
475
476 /* adjust OSAL timers */
477
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -