📄 hal_sleep.lst
字号:
\ 000128 92E0 MOV 0xE0 /* A */.0,C
\ 00012A 85..82 MOV DPL,?XSP + 0
\ 00012D 85..83 MOV DPH,?XSP + 1
\ 000130 F0 MOVX @DPTR,A
\ 000131 C2AF CLR 0xa8.7
344
345 /* one last check for active OSAL task */
346 if (osalNextActiveTask() == NULL)
\ 000133 ; Setup parameters for call to function osalNextActiveTask
\ 000133 90.... MOV DPTR,#(osalNextActiveTask & 0xffff)
\ 000136 74.. MOV A,#((osalNextActiveTask >> 16) & 0xff)
\ 000138 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00013B EA MOV A,R2
\ 00013C 7001 JNZ ??halSleep_6
\ 00013E EB MOV A,R3
\ ??halSleep_6:
\ 00013F 6003 JZ $+5
\ 000141 02.... LJMP ??halSleep_7 & 0xFFFF
347 {
348 /* always use "deep sleep" to turn off radio VREG on CC2430 */
349 if (MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)
\ 000144 ; Setup parameters for call to function MAC_PwrOffReq
\ 000144 7902 MOV R1,#0x2
\ 000146 90.... MOV DPTR,#(MAC_PwrOffReq & 0xffff)
\ 000149 74.. MOV A,#((MAC_PwrOffReq >> 16) & 0xff)
\ 00014B 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00014E E9 MOV A,R1
\ 00014F 6003 JZ $+5
\ 000151 02.... LJMP ??halSleep_7 & 0xFFFF
350 {
351 while ( (HAL_SLEEP_MS_TO_320US(halAccumulatedSleepTime) < timeout) || (timeout == 0) )
\ ??halSleep_8:
\ 000154 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000157 78.. MOV R0,#?V0 + 0
\ 000159 12.... LCALL ?L_MOV_X
\ 00015C 90.... MOV DPTR,#__Constant_64
\ 00015F 78.. MOV R0,#?V0 + 4
\ 000161 12.... LCALL ?L_MOV_X
\ 000164 78.. MOV R0,#?V0 + 0
\ 000166 79.. MOV R1,#?V0 + 4
\ 000168 12.... LCALL ?L_MUL
\ 00016B 90.... MOV DPTR,#__Constant_1f
\ 00016E 78.. MOV R0,#?V0 + 0
\ 000170 12.... LCALL ?L_ADD_X
\ 000173 7405 MOV A,#0x5
\ 000175 78.. MOV R0,#?V0 + 0
\ 000177 12.... LCALL ?UL_SHR
\ 00017A 7401 MOV A,#0x1
\ 00017C 12.... LCALL ?XSTACK_DISP0_8
\ 00017F 78.. MOV R0,#?V0 + 4
\ 000181 12.... LCALL ?L_MOV_X
\ 000184 78.. MOV R0,#?V0 + 4
\ 000186 79.. MOV R1,#?V0 + 0
\ 000188 12.... LCALL ?UL_GT
\ 00018B 401F JC ??halSleep_9
\ 00018D 7401 MOV A,#0x1
\ 00018F 12.... LCALL ?XSTACK_DISP0_8
\ 000192 C082 PUSH DPL
\ 000194 C083 PUSH DPH
\ 000196 90.... MOV DPTR,#__Constant_0
\ 000199 78.. MOV R0,#?V0 + 0
\ 00019B 12.... LCALL ?L_MOV_X
\ 00019E D083 POP DPH
\ 0001A0 D082 POP DPL
\ 0001A2 78.. MOV R0,#?V0 + 0
\ 0001A4 12.... LCALL ?L_EQ_X
\ 0001A7 6003 JZ $+5
\ 0001A9 02.... LJMP ??halSleep_10 & 0xFFFF
352 {
353 /* get peripherals ready for sleep */
354 HalKeyEnterSleep();
\ ??halSleep_9:
\ 0001AC ; Setup parameters for call to function HalKeyEnterSleep
\ 0001AC 90.... MOV DPTR,#(HalKeyEnterSleep & 0xffff)
\ 0001AF 74.. MOV A,#((HalKeyEnterSleep >> 16) & 0xff)
\ 0001B1 12.... 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();
\ 0001B4 ; Setup parameters for call to function HalLedEnterSleep
\ 0001B4 90.... MOV DPTR,#(HalLedEnterSleep & 0xffff)
\ 0001B7 74.. MOV A,#((HalLedEnterSleep >> 16) & 0xff)
\ 0001B9 12.... 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();
\ 0001BC 53BEFB ANL 0xbe,#0xfb
\ ??halSleep_11:
\ 0001BF E5BE MOV A,0xbe
\ 0001C1 A2E5 MOV C,0xE0 /* A */.5
\ 0001C3 50FA JNC ??halSleep_11
\ 0001C5 00 NOP
\ 0001C6 75C649 MOV 0xc6,#0x49
\ ??halSleep_12:
\ 0001C9 7449 MOV A,#0x49
\ 0001CB 65C6 XRL A,0xc6
\ 0001CD 70FA JNZ ??halSleep_12
\ 0001CF 43BE04 ORL 0xbe,#0x4
365
366 /* enable sleep timer interrupt */
367 if (timeout != 0)
\ 0001D2 7401 MOV A,#0x1
\ 0001D4 12.... LCALL ?XSTACK_DISP0_8
\ 0001D7 C082 PUSH DPL
\ 0001D9 C083 PUSH DPH
\ 0001DB 90.... MOV DPTR,#__Constant_0
\ 0001DE 78.. MOV R0,#?V0 + 0
\ 0001E0 12.... LCALL ?L_MOV_X
\ 0001E3 D083 POP DPH
\ 0001E5 D082 POP DPL
\ 0001E7 78.. MOV R0,#?V0 + 0
\ 0001E9 12.... LCALL ?L_EQ_X
\ 0001EC 6051 JZ ??halSleep_13
368 {
369 if (timeout > HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ))
\ 0001EE 7401 MOV A,#0x1
\ 0001F0 12.... LCALL ?XSTACK_DISP0_8
\ 0001F3 C082 PUSH DPL
\ 0001F5 C083 PUSH DPH
\ 0001F7 90.... MOV DPTR,#__Constant_185197
\ 0001FA 78.. MOV R0,#?V0 + 0
\ 0001FC 12.... LCALL ?L_MOV_X
\ 0001FF D083 POP DPH
\ 000201 D082 POP DPL
\ 000203 78.. MOV R0,#?V0 + 0
\ 000205 12.... LCALL ?UL_GT_X
\ 000208 4017 JC ??halSleep_14
370 {
371 timeout -= HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME );
\ 00020A 90.... MOV DPTR,#__Constant_ffe7ae6a
\ 00020D 78.. MOV R0,#?V0 + 0
\ 00020F 12.... LCALL ?L_MOV_X
\ 000212 7401 MOV A,#0x1
\ 000214 12.... LCALL ?XSTACK_DISP0_8
\ 000217 78.. MOV R0,#?V0 + 0
\ 000219 12.... LCALL ?L_ADD_TO_X
372 halSleepSetTimer(HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ));
\ 00021C ; Setup parameters for call to function halSleepSetTimer
\ 00021C 90.... MOV DPTR,#__Constant_185196
\ 00021F 8005 SJMP ??halSleep_15
373 }
374 else
375 {
376 /* set sleep timer */
377 halSleepSetTimer(timeout);
\ ??halSleep_14:
\ 000221 ; Setup parameters for call to function halSleepSetTimer
\ 000221 7401 MOV A,#0x1
\ 000223 12.... LCALL ?XSTACK_DISP0_8
\ ??halSleep_15:
\ 000226 78.. MOV R0,#?V0 + 0
\ 000228 12.... LCALL ?L_MOV_X
\ 00022B AA.. MOV R2,?V0 + 0
\ 00022D AB.. MOV R3,?V0 + 1
\ 00022F AC.. MOV R4,?V0 + 2
\ 000231 AD.. MOV R5,?V0 + 3
\ 000233 90.... MOV DPTR,#(halSleepSetTimer & 0xffff)
\ 000236 74.. MOV A,#((halSleepSetTimer >> 16) & 0xff)
\ 000238 12.... LCALL ?BCALL ; Banked call to: DPTR()
378 }
379
380 /* set up sleep timer interrupt */
381 HAL_SLEEP_TIMER_CLEAR_INT();
\ 00023B C2C7 CLR 0xc0.7
382 HAL_SLEEP_TIMER_ENABLE_INT();
\ 00023D D2AD 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
391 {
392 HAL_TURN_OFF_LED1();
393 }
394 #endif
395
396 /* save interrupt enable registers and disable all interrupts */
397 HAL_SLEEP_IE_BACKUP_AND_DISABLE(ien0, ien1, ien2);
\ ??halSleep_13:
\ 00023F E5A8 MOV A,0xa8
\ 000241 F5.. MOV ?V0 + 0,A
\ 000243 E5B8 MOV A,0xb8
\ 000245 F5.. MOV ?V0 + 1,A
\ 000247 E59A MOV A,0x9a
\ 000249 F5.. MOV ?V0 + 2,A
\ 00024B 53A820 ANL 0xa8,#0x20
\ 00024E E5A8 MOV A,0xa8
\ 000250 53B820 ANL 0xb8,#0x20
\ 000253 E5B8 MOV A,0xb8
\ 000255 539A12 ANL 0x9a,#0x12
\ 000258 E59A MOV A,0x9a
398
399 /* This is to check if the stack is exceeding the disappearing
400 * RAM boundary of 0xF000. If the stack does exceed the boundary
401 * (unlikely), do not enter sleep until the stack is back to normal.
402 */
403 if ( ((uint16)(*( __idata uint16*)(CSTK_PTR)) >= 0xF000) )
\ 00025A 78.. MOV R0,#(SFB(XSP) & 0xff)
\ 00025C C3 CLR C
\ 00025D E6 MOV A,@R0
\ 00025E 9400 SUBB A,#0x0
\ 000260 08 INC R0
\ 000261 E6 MOV A,@R0
\ 000262 94F0 SUBB A,#-0x10
\ 000264 4053 JC ??halSleep_16
404 {
405 HAL_EXIT_CRITICAL_SECTION(intState);
\ 000266 85..82 MOV DPL,?XSP + 0
\ 000269 85..83 MOV DPH,?XSP + 1
\ 00026C E0 MOVX A,@DPTR
\ 00026D A2E0 MOV C,0xE0 /* A */.0
\ 00026F 92AF MOV 0xa8.7,C
406
407 /* AN044 - DELAYING EXTERNAL INTERRUPTS, do not relocate this line.
408 * it has to stay as close to PCON.IDLE = 1 as possible.
409 */
410 EXTERNAL_INTERRUPT_DELAY();
\ 000271 43FD02 ORL 0xfd,#0x2
\ 000274 D281 SETB 0x80.1
\ 000276 ; Setup parameters for call to function halSleepWait
\ 000276 7AB4 MOV R2,#-0x4c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -