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

📄 hal_sleep.lst

📁 CC2431无线定位程序非常有参考价值
💻 LST
📖 第 1 页 / 共 5 页
字号:
    262           * @brief       This function is called from the OSAL task loop using and existing OSAL
    263           *              interface.  It sets the low power mode of the MAC and the CC2430.
    264           *
    265           * input parameters
    266           *
    267           * @param       osal_timeout - Next OSAL timer timeout.
    268           *
    269           * output parameters
    270           *
    271           * None.
    272           *
    273           * @return      None.
    274           **************************************************************************************************
    275           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    276          void halSleep( uint16 osal_timeout )
   \                     halSleep:
    277          {
   \   000000   74F0         MOV     A,#-0x10
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 16
   \   000005                ; Auto size: 5
   \   000005   74FB         MOV     A,#-0x5
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
   \   00000A   EA           MOV     A,R2
   \   00000B   FE           MOV     R6,A
   \   00000C   EB           MOV     A,R3
   \   00000D   FF           MOV     R7,A
    278            uint32        timeout;
    279            uint32        macTimeout;
    280            halIntState_t intState, ien0, ien1, ien2;
    281          
    282            halAccumulatedSleepTime = 0;
   \   00000E   90....       MOV     DPTR,#__Constant_0
   \   000011   78..         MOV     R0,#?V0 + 0
   \   000013   12....       LCALL   ?L_MOV_X
   \   000016   90....       MOV     DPTR,#??halAccumulatedSleepTime
   \   000019   78..         MOV     R0,#?V0 + 0
   \   00001B   12....       LCALL   ?L_MOV_TO_X
    283          
    284            /* get next OSAL timer expiration converted to 320 usec units */
    285            timeout = HAL_SLEEP_MS_TO_320US(osal_timeout);
   \   00001E   8E..         MOV     ?V0 + 4,R6
   \   000020   8F..         MOV     ?V0 + 5,R7
   \   000022   75..00       MOV     ?V0 + 6,#0x0
   \   000025   75..00       MOV     ?V0 + 7,#0x0
   \   000028   90....       MOV     DPTR,#__Constant_64
   \   00002B   78..         MOV     R0,#?V0 + 0
   \   00002D   12....       LCALL   ?L_MOV_X
   \   000030   78..         MOV     R0,#?V0 + 4
   \   000032   79..         MOV     R1,#?V0 + 0
   \   000034   12....       LCALL   ?L_MUL
   \   000037   90....       MOV     DPTR,#__Constant_1f
   \   00003A   78..         MOV     R0,#?V0 + 4
   \   00003C   12....       LCALL   ?L_ADD_X
   \   00003F   7405         MOV     A,#0x5
   \   000041   78..         MOV     R0,#?V0 + 4
   \   000043   12....       LCALL   ?UL_SHR
   \   000046   7401         MOV     A,#0x1
   \   000048   12....       LCALL   ?XSTACK_DISP0_8
   \   00004B   78..         MOV     R0,#?V0 + 4
   \   00004D   12....       LCALL   ?L_MOV_TO_X
    286            if (timeout == 0)
   \   000050   7401         MOV     A,#0x1
   \   000052   12....       LCALL   ?XSTACK_DISP0_8
   \   000055   C082         PUSH    DPL
   \   000057   C083         PUSH    DPH
   \   000059   90....       MOV     DPTR,#__Constant_0
   \   00005C   78..         MOV     R0,#?V0 + 0
   \   00005E   12....       LCALL   ?L_MOV_X
   \   000061   D083         POP     DPH
   \   000063   D082         POP     DPL
   \   000065   78..         MOV     R0,#?V0 + 0
   \   000067   12....       LCALL   ?L_EQ_X
   \   00006A   90....       MOV     DPTR,#(MAC_PwrNextTimeout & 0xffff)
   \   00006D   700F         JNZ     ??halSleep_0
    287            {
    288              timeout = MAC_PwrNextTimeout();
   \   00006F                ; Setup parameters for call to function MAC_PwrNextTimeout
   \   00006F   74..         MOV     A,#((MAC_PwrNextTimeout >> 16) & 0xff)
   \   000071   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000074   8A..         MOV     ?V0 + 0,R2
   \   000076   8B..         MOV     ?V0 + 1,R3
   \   000078   8C..         MOV     ?V0 + 2,R4
   \   00007A   8D..         MOV     ?V0 + 3,R5
   \   00007C   802A         SJMP    ??halSleep_1
    289            }
    290            else
    291            {
    292              /* get next MAC timer expiration */
    293              macTimeout = MAC_PwrNextTimeout();
   \                     ??halSleep_0:
   \   00007E                ; Setup parameters for call to function MAC_PwrNextTimeout
   \   00007E   74..         MOV     A,#((MAC_PwrNextTimeout >> 16) & 0xff)
   \   000080   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000083   8A..         MOV     ?V0 + 0,R2
   \   000085   8B..         MOV     ?V0 + 1,R3
   \   000087   8C..         MOV     ?V0 + 2,R4
   \   000089   8D..         MOV     ?V0 + 3,R5
    294          
    295              /* get lesser of two timeouts */
    296              if ((macTimeout != 0) && (macTimeout < timeout))
   \   00008B   90....       MOV     DPTR,#__Constant_0
   \   00008E   78..         MOV     R0,#?V0 + 0
   \   000090   12....       LCALL   ?L_EQ_X
   \   000093   6041         JZ      ??halSleep_2
   \   000095   7401         MOV     A,#0x1
   \   000097   12....       LCALL   ?XSTACK_DISP0_8
   \   00009A   78..         MOV     R0,#?V0 + 4
   \   00009C   12....       LCALL   ?L_MOV_X
   \   00009F   78..         MOV     R0,#?V0 + 4
   \   0000A1   79..         MOV     R1,#?V0 + 0
   \   0000A3   12....       LCALL   ?UL_GT
   \   0000A6   502E         JNC     ??halSleep_2
    297              {
    298                timeout = macTimeout;
   \                     ??halSleep_1:
   \   0000A8   7401         MOV     A,#0x1
   \   0000AA   12....       LCALL   ?XSTACK_DISP0_8
   \   0000AD   78..         MOV     R0,#?V0 + 0
   \   0000AF   12....       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;
   \   0000B2   7401         MOV     A,#0x1
   \   0000B4   12....       LCALL   ?XSTACK_DISP0_8
   \   0000B7   C082         PUSH    DPL
   \   0000B9   C083         PUSH    DPH
   \   0000BB   90....       MOV     DPTR,#__Constant_0
   \   0000BE   78..         MOV     R0,#?V0 + 0
   \   0000C0   12....       LCALL   ?L_MOV_X
   \   0000C3   D083         POP     DPH
   \   0000C5   D082         POP     DPL
   \   0000C7   78..         MOV     R0,#?V0 + 0
   \   0000C9   12....       LCALL   ?L_EQ_X
   \   0000CC   7008         JNZ     ??halSleep_2
   \   0000CE   7403         MOV     A,#0x3
   \   0000D0   90....       MOV     DPTR,#??halPwrMgtMode
   \   0000D3   F0           MOVX    @DPTR,A
   \   0000D4   804F         SJMP    ??halSleep_3
   \                     ??halSleep_2:
   \   0000D6   7402         MOV     A,#0x2
   \   0000D8   90....       MOV     DPTR,#??halPwrMgtMode
   \   0000DB   F0           MOVX    @DPTR,A
   \   0000DC   90....       MOV     DPTR,#??halSleepLevel
   \   0000DF   E0           MOVX    A,@DPTR
   \   0000E0   C3           CLR     C
   \   0000E1   9402         SUBB    A,#0x2
   \   0000E3   5005         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;
   \   0000E5   E0           MOVX    A,@DPTR
   \   0000E6   90....       MOV     DPTR,#??halPwrMgtMode
   \   0000E9   F0           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:
   \   0000EA   7401         MOV     A,#0x1
   \   0000EC   12....       LCALL   ?XSTACK_DISP0_8
   \   0000EF   C082         PUSH    DPL
   \   0000F1   C083         PUSH    DPH
   \   0000F3   90....       MOV     DPTR,#__Constant_2d
   \   0000F6   78..         MOV     R0,#?V0 + 0
   \   0000F8   12....       LCALL   ?L_MOV_X
   \   0000FB   D083         POP     DPH
   \   0000FD   D082         POP     DPL
   \   0000FF   78..         MOV     R0,#?V0 + 0
   \   000101   12....       LCALL   ?UL_GT_X
   \   000104   502C         JNC     ??halSleep_5
   \   000106   7401         MOV     A,#0x1
   \   000108   12....       LCALL   ?XSTACK_DISP0_8
   \   00010B   C082         PUSH    DPL
   \   00010D   C083         PUSH    DPH
   \   00010F   90....       MOV     DPTR,#__Constant_0
   \   000112   78..         MOV     R0,#?V0 + 0
   \   000114   12....       LCALL   ?L_MOV_X
   \   000117   D083         POP     DPH
   \   000119   D082         POP     DPL
   \   00011B   78..         MOV     R0,#?V0 + 0
   \   00011D   12....       LCALL   ?L_EQ_X
   \   000120   6003         JZ      $+5
   \   000122   02....       LJMP    ??halSleep_6 & 0xFFFF
   \                     ??halSleep_3:
   \   000125   90....       MOV     DPTR,#zgPollRate
   \   000128   E0           MOVX    A,@DPTR
   \   000129   7002         JNZ     ??halSleep_7
   \   00012B   A3           INC     DPTR
   \   00012C   E0           MOVX    A,@DPTR
   \                     ??halSleep_7:
   \   00012D   6003         JZ      $+5
   \   00012F   02....       LJMP    ??halSleep_6 & 0xFFFF
    338          #else
    339            if ((timeout > HAL_SLEEP_MS_TO_320US(PM_MIN_SLEEP_TIME)) ||
    340                (timeout == 0))
    341          #endif
    342            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -