📄 hal_sleep.lst
字号:
343 HAL_ENTER_CRITICAL_SECTION(intState);
\ ??halSleep_5:
\ 000132 A2AF MOV C,0xa8.7
\ 000134 E4 CLR A
\ 000135 92E0 MOV 0xE0 /* A */.0,C
\ 000137 85..82 MOV DPL,?XSP + 0
\ 00013A 85..83 MOV DPH,?XSP + 1
\ 00013D F0 MOVX @DPTR,A
\ 00013E C2AF CLR 0xa8.7
344
345 /* one last check for active OSAL task */
346 if (osalNextActiveTask() == NULL)
\ 000140 ; Setup parameters for call to function osalNextActiveTask
\ 000140 90.... MOV DPTR,#(osalNextActiveTask & 0xffff)
\ 000143 74.. MOV A,#((osalNextActiveTask >> 16) & 0xff)
\ 000145 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000148 EA MOV A,R2
\ 000149 7001 JNZ ??halSleep_8
\ 00014B EB MOV A,R3
\ ??halSleep_8:
\ 00014C 6003 JZ $+5
\ 00014E 02.... 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)
\ 000151 ; Setup parameters for call to function MAC_PwrOffReq
\ 000151 7902 MOV R1,#0x2
\ 000153 90.... MOV DPTR,#(MAC_PwrOffReq & 0xffff)
\ 000156 74.. MOV A,#((MAC_PwrOffReq >> 16) & 0xff)
\ 000158 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00015B E9 MOV A,R1
\ 00015C 6003 JZ $+5
\ 00015E 02.... LJMP ??halSleep_9 & 0xFFFF
350 {
351 while ( (HAL_SLEEP_MS_TO_320US(halAccumulatedSleepTime) < timeout) || (timeout == 0) )
\ ??halSleep_10:
\ 000161 90.... MOV DPTR,#??halAccumulatedSleepTime
\ 000164 78.. MOV R0,#?V0 + 0
\ 000166 12.... LCALL ?L_MOV_X
\ 000169 90.... MOV DPTR,#__Constant_64
\ 00016C 78.. MOV R0,#?V0 + 4
\ 00016E 12.... LCALL ?L_MOV_X
\ 000171 78.. MOV R0,#?V0 + 0
\ 000173 79.. MOV R1,#?V0 + 4
\ 000175 12.... LCALL ?L_MUL
\ 000178 90.... MOV DPTR,#__Constant_1f
\ 00017B 78.. MOV R0,#?V0 + 0
\ 00017D 12.... LCALL ?L_ADD_X
\ 000180 7405 MOV A,#0x5
\ 000182 78.. MOV R0,#?V0 + 0
\ 000184 12.... LCALL ?UL_SHR
\ 000187 7401 MOV A,#0x1
\ 000189 12.... LCALL ?XSTACK_DISP0_8
\ 00018C 78.. MOV R0,#?V0 + 4
\ 00018E 12.... LCALL ?L_MOV_X
\ 000191 78.. MOV R0,#?V0 + 4
\ 000193 79.. MOV R1,#?V0 + 0
\ 000195 12.... LCALL ?UL_GT
\ 000198 401F JC ??halSleep_11
\ 00019A 7401 MOV A,#0x1
\ 00019C 12.... LCALL ?XSTACK_DISP0_8
\ 00019F C082 PUSH DPL
\ 0001A1 C083 PUSH DPH
\ 0001A3 90.... MOV DPTR,#__Constant_0
\ 0001A6 78.. MOV R0,#?V0 + 0
\ 0001A8 12.... LCALL ?L_MOV_X
\ 0001AB D083 POP DPH
\ 0001AD D082 POP DPL
\ 0001AF 78.. MOV R0,#?V0 + 0
\ 0001B1 12.... LCALL ?L_EQ_X
\ 0001B4 6003 JZ $+5
\ 0001B6 02.... LJMP ??halSleep_12 & 0xFFFF
352 {
353 /* get peripherals ready for sleep */
354 HalKeyEnterSleep();
\ ??halSleep_11:
\ 0001B9 ; Setup parameters for call to function HalKeyEnterSleep
\ 0001B9 90.... MOV DPTR,#(HalKeyEnterSleep & 0xffff)
\ 0001BC 74.. MOV A,#((HalKeyEnterSleep >> 16) & 0xff)
\ 0001BE 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();
\ 0001C1 ; Setup parameters for call to function HalLedEnterSleep
\ 0001C1 90.... MOV DPTR,#(HalLedEnterSleep & 0xffff)
\ 0001C4 74.. MOV A,#((HalLedEnterSleep >> 16) & 0xff)
\ 0001C6 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();
\ 0001C9 53BEFB ANL 0xbe,#0xfb
\ ??halSleep_13:
\ 0001CC E5BE MOV A,0xbe
\ 0001CE A2E5 MOV C,0xE0 /* A */.5
\ 0001D0 50FA JNC ??halSleep_13
\ 0001D2 00 NOP
\ 0001D3 75C649 MOV 0xc6,#0x49
\ ??halSleep_14:
\ 0001D6 7449 MOV A,#0x49
\ 0001D8 65C6 XRL A,0xc6
\ 0001DA 70FA JNZ ??halSleep_14
\ 0001DC 43BE04 ORL 0xbe,#0x4
365
366 /* enable sleep timer interrupt */
367 if (timeout != 0)
\ 0001DF 7401 MOV A,#0x1
\ 0001E1 12.... LCALL ?XSTACK_DISP0_8
\ 0001E4 C082 PUSH DPL
\ 0001E6 C083 PUSH DPH
\ 0001E8 90.... MOV DPTR,#__Constant_0
\ 0001EB 78.. MOV R0,#?V0 + 0
\ 0001ED 12.... LCALL ?L_MOV_X
\ 0001F0 D083 POP DPH
\ 0001F2 D082 POP DPL
\ 0001F4 78.. MOV R0,#?V0 + 0
\ 0001F6 12.... LCALL ?L_EQ_X
\ 0001F9 6051 JZ ??halSleep_15
368 {
369 if (timeout > HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ))
\ 0001FB 7401 MOV A,#0x1
\ 0001FD 12.... LCALL ?XSTACK_DISP0_8
\ 000200 C082 PUSH DPL
\ 000202 C083 PUSH DPH
\ 000204 90.... MOV DPTR,#__Constant_185197
\ 000207 78.. MOV R0,#?V0 + 0
\ 000209 12.... LCALL ?L_MOV_X
\ 00020C D083 POP DPH
\ 00020E D082 POP DPL
\ 000210 78.. MOV R0,#?V0 + 0
\ 000212 12.... LCALL ?UL_GT_X
\ 000215 4017 JC ??halSleep_16
370 {
371 timeout -= HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME );
\ 000217 90.... MOV DPTR,#__Constant_ffe7ae6a
\ 00021A 78.. MOV R0,#?V0 + 0
\ 00021C 12.... LCALL ?L_MOV_X
\ 00021F 7401 MOV A,#0x1
\ 000221 12.... LCALL ?XSTACK_DISP0_8
\ 000224 78.. MOV R0,#?V0 + 0
\ 000226 12.... LCALL ?L_ADD_TO_X
372 halSleepSetTimer(HAL_SLEEP_MS_TO_320US( MAX_SLEEP_TIME ));
\ 000229 ; Setup parameters for call to function halSleepSetTimer
\ 000229 90.... MOV DPTR,#__Constant_185196
\ 00022C 8005 SJMP ??halSleep_17
373 }
374 else
375 {
376 /* set sleep timer */
377 halSleepSetTimer(timeout);
\ ??halSleep_16:
\ 00022E ; Setup parameters for call to function halSleepSetTimer
\ 00022E 7401 MOV A,#0x1
\ 000230 12.... LCALL ?XSTACK_DISP0_8
\ ??halSleep_17:
\ 000233 78.. MOV R0,#?V0 + 0
\ 000235 12.... LCALL ?L_MOV_X
\ 000238 AA.. MOV R2,?V0 + 0
\ 00023A AB.. MOV R3,?V0 + 1
\ 00023C AC.. MOV R4,?V0 + 2
\ 00023E AD.. MOV R5,?V0 + 3
\ 000240 90.... MOV DPTR,#(halSleepSetTimer & 0xffff)
\ 000243 74.. MOV A,#((halSleepSetTimer >> 16) & 0xff)
\ 000245 12.... LCALL ?BCALL ; Banked call to: DPTR()
378 }
379
380 /* set up sleep timer interrupt */
381 HAL_SLEEP_TIMER_CLEAR_INT();
\ 000248 C2C7 CLR 0xc0.7
382 HAL_SLEEP_TIMER_ENABLE_INT();
\ 00024A 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_15:
\ 00024C E5A8 MOV A,0xa8
\ 00024E F5.. MOV ?V0 + 0,A
\ 000250 E5B8 MOV A,0xb8
\ 000252 F5.. MOV ?V0 + 1,A
\ 000254 E59A MOV A,0x9a
\ 000256 F5.. MOV ?V0 + 2,A
\ 000258 53A820 ANL 0xa8,#0x20
\ 00025B E5A8 MOV A,0xa8
\ 00025D 53B820 ANL 0xb8,#0x20
\ 000260 E5B8 MOV A,0xb8
\ 000262 539A12 ANL 0x9a,#0x12
\ 000265 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) )
\ 000267 78.. MOV R0,#(SFB(XSP) & 0xff)
\ 000269 C3 CLR C
\ 00026A E6 MOV A,@R0
\ 00026B 9400 SUBB A,#0x0
\ 00026D 08 INC R0
\ 00026E E6 MOV A,@R0
\ 00026F 94F0 SUBB A,#-0x10
\ 000271 4053 JC ??halSleep_18
404 {
405 HAL_EXIT_CRITICAL_SECTION(intState);
\ 000273 85..82 MOV DPL,?XSP + 0
\ 000276 85..83 MOV DPH,?XSP + 1
\ 000279 E0 MOVX A,@DPTR
\ 00027A A2E0 MOV C,0xE0 /* A */.0
\ 00027C 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();
\ 00027E 43FD02 ORL 0xfd,#0x2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -