⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_sleep.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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 + -