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

📄 mac_sleep.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
   \   00001F   E0           MOVX    A,@DPTR
   \   000020   A2E4         MOV     C,0xE0 /* A   */.4
   \   000022   40FB         JC      ??macSleepWakeUp_3
     77              
     78              /* power-up initialization of receive logic */
     79              macRxRadioPowerUpInit();
   \   000024                ; Setup parameters for call to function macRxRadioPowerUpInit
   \   000024   90....       MOV     DPTR,#(macRxRadioPowerUpInit & 0xffff)
   \   000027   74..         MOV     A,#((macRxRadioPowerUpInit >> 16) & 0xff)
   \   000029   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
     80            }
     81          
     82            /* turn on the oscillator */
     83            MAC_RADIO_TURN_ON_OSC();
   \                     ??macSleepWakeUp_2:
   \   00002C   E5BE         MOV     A,0xbe
   \   00002E   A2E6         MOV     C,0xE0 /* A   */.6
   \   000030   4008         JC      ??macSleepWakeUp_4
   \   000032                ; Setup parameters for call to function halAssertHandler
   \   000032   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000035   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000037   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
     84            
     85            /* update sleep state here before requesting to turn on receiver */
     86            macSleepState = MAC_SLEEP_STATE_AWAKE;
   \                     ??macSleepWakeUp_4:
   \   00003A   E4           CLR     A
   \   00003B   90....       MOV     DPTR,#macSleepState
   \   00003E   F0           MOVX    @DPTR,A
     87          
     88            /* turn on the receiver if enabled */
     89            macRxOnRequest();
   \   00003F                ; Setup parameters for call to function macRxOnRequest
   \   00003F   90....       MOV     DPTR,#(macRxOnRequest & 0xffff)
   \   000042   74..         MOV     A,#((macRxOnRequest >> 16) & 0xff)
   \   000044   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
     90          }
   \                     ??macSleepWakeUp_0:
   \   000047   D083         POP     DPH
   \   000049   D082         POP     DPL
   \   00004B   02....       LJMP    ?BRET
     91          
     92          
     93          /**************************************************************************************************
     94           * @fn          macSleep
     95           *
     96           * @brief       Puts radio into the selected sleep mode.
     97           *
     98           * @param       sleepState - selected sleep level, see #defines in .h file
     99           *
    100           * @return      TRUE if radio was successfully put into selected sleep mode.
    101           *              FALSE if it was not safe for radio to go to sleep.
    102           **************************************************************************************************
    103           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    104          uint8 macSleep(uint8 sleepState)
   \                     macSleep:
    105          {
   \   000000   74F7         MOV     A,#-0x9
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 9
   \   000005                ; Auto size: 0
   \   000005   E9           MOV     A,R1
   \   000006   FE           MOV     R6,A
    106            halIntState_t  s;
    107           
    108            /* disable interrupts until macSleepState can be set */
    109            HAL_ENTER_CRITICAL_SECTION(s);
   \   000007   A2AF         MOV     C,0xa8.7
   \   000009   E4           CLR     A
   \   00000A   92E0         MOV     0xE0 /* A   */.0,C
   \   00000C   FF           MOV     R7,A
   \   00000D   C2AF         CLR     0xa8.7
    110          
    111            /* assert checks */
    112            MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake to put it to sleep */
   \   00000F   90....       MOV     DPTR,#macSleepState
   \   000012   E0           MOVX    A,@DPTR
   \   000013   6008         JZ      ??macSleep_0
   \   000015                ; Setup parameters for call to function halAssertHandler
   \   000015   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000018   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   00001A   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    113            MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* do not sleep when scanning or in promiscuous mode */
   \                     ??macSleep_0:
   \   00001D   90....       MOV     DPTR,#macRxFilter
   \   000020   E0           MOVX    A,@DPTR
   \   000021   6008         JZ      ??macSleep_1
   \   000023                ; Setup parameters for call to function halAssertHandler
   \   000023   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000026   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000028   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    114          
    115            /* if either RX or TX is active or any RX enable flags are set, it's not OK to sleep */
    116            if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags)
   \                     ??macSleep_1:
   \   00002B   90....       MOV     DPTR,#macRxActive
   \   00002E   E0           MOVX    A,@DPTR
   \   00002F   7012         JNZ     ??macSleep_2
   \   000031   90....       MOV     DPTR,#macRxOutgoingAckFlag
   \   000034   E0           MOVX    A,@DPTR
   \   000035   700C         JNZ     ??macSleep_2
   \   000037   90....       MOV     DPTR,#macTxActive
   \   00003A   E0           MOVX    A,@DPTR
   \   00003B   7006         JNZ     ??macSleep_2
   \   00003D   90....       MOV     DPTR,#macRxEnableFlags
   \   000040   E0           MOVX    A,@DPTR
   \   000041   6009         JZ      ??macSleep_3
    117            {
    118              HAL_EXIT_CRITICAL_SECTION(s);
   \                     ??macSleep_2:
   \   000043   EF           MOV     A,R7
   \   000044   A2E0         MOV     C,0xE0 /* A   */.0
   \   000046   92AF         MOV     0xa8.7,C
    119              return(FALSE);
   \   000048   7900         MOV     R1,#0x0
   \   00004A   8036         SJMP    ??macSleep_4
    120            }
    121          
    122            /* turn off the receiver */
    123            macRxOff();
   \                     ??macSleep_3:
   \   00004C                ; Setup parameters for call to function macRxOff
   \   00004C   90....       MOV     DPTR,#(macRxOff & 0xffff)
   \   00004F   74..         MOV     A,#((macRxOff >> 16) & 0xff)
   \   000051   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    124          
    125            /* update sleep state variable */
    126            macSleepState = sleepState;
   \   000054   EE           MOV     A,R6
   \   000055   90....       MOV     DPTR,#macSleepState
   \   000058   F0           MOVX    @DPTR,A
    127          
    128            /* macSleepState is now set, re-enable interrupts */
    129            HAL_EXIT_CRITICAL_SECTION(s);
   \   000059   EF           MOV     A,R7
   \   00005A   A2E0         MOV     C,0xE0 /* A   */.0
   \   00005C   92AF         MOV     0xa8.7,C
    130            
    131            /* put MAC timer to sleep */
    132            MAC_RADIO_TIMER_SLEEP();
   \   00005E   53C3FE       ANL     0xc3,#0xfe
   \                     ??macSleep_5:
   \   000061   E5C3         MOV     A,0xc3
   \   000063   A2E0         MOV     C,0xE0 /* A   */.0
   \   000065   40FA         JC      ??macSleep_5
    133          
    134            /* put radio in selected sleep mode */
    135            if (sleepState == MAC_SLEEP_STATE_OSC_OFF)
   \   000067   7401         MOV     A,#0x1
   \   000069   6E           XRL     A,R6
   \   00006A   6014         JZ      ??macSleep_6
    136            {
    137              MAC_RADIO_TURN_OFF_OSC();
    138            }
    139            else
    140            {
    141              MAC_ASSERT(sleepState == MAC_SLEEP_STATE_RADIO_OFF); /* unknown sleep state */
   \   00006C   7402         MOV     A,#0x2
   \   00006E   6E           XRL     A,R6
   \   00006F   6008         JZ      ??macSleep_7
   \   000071                ; Setup parameters for call to function halAssertHandler
   \   000071   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000074   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000076   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    142              MAC_RADIO_TURN_OFF_POWER();
   \                     ??macSleep_7:
   \   000079   90DF17       MOV     DPTR,#-0x20e9
   \   00007C   E0           MOVX    A,@DPTR
   \   00007D   D2E3         SETB    0xE0 /* A   */.3
   \   00007F   F0           MOVX    @DPTR,A
    143            }
    144          
    145            /* radio successfully entered sleep mode */
    146            return(TRUE);
   \                     ??macSleep_6:
   \   000080   7901         MOV     R1,#0x1
   \                     ??macSleep_4:
   \   000082   7F01         MOV     R7,#0x1
   \   000084   02....       LJMP    ?BANKED_LEAVE_XDATA
    147          }

   \                                 In segment XDATA_ID, align 1, keep-with-next
   \                     `?<Initializer for macSleepState>`:
   \   000000   02           DB 2

   \                                 In segment SFR_AN, at 0xa8
   \   union <unnamed> volatile __sfr _A_IEN0
   \                     _A_IEN0:
   \   000000                DS 1
    148          
    149          
    150          
    151          /**************************************************************************************************
    152           *                                  Compile Time Integrity Checks
    153           **************************************************************************************************
    154           */
    155          #if ((MAC_SLEEP_STATE_AWAKE == MAC_SLEEP_STATE_OSC_OFF) ||  \
    156               (MAC_SLEEP_STATE_AWAKE == MAC_SLEEP_STATE_RADIO_OFF))
    157          #error "ERROR!  Non-unique state values."
    158          #endif
    159          
    160          
    161          /**************************************************************************************************
    162          */

   Maximum stack usage in bytes:

     Function                   ISTACK PSTACK XSTACK
     --------                   ------ ------ ------
     macSleep                       0      0      9
       -> halAssertHandler          0      0     18
       -> halAssertHandler          0      0     18
       -> macRxOff                  0      0     18
       -> halAssertHandler          0      0     18
     macSleepWakeUp                 2      0      0
       -> macRxRadioPowerUpInit     4      0      0
       -> halAssertHandler          4      0      0
       -> macRxOnRequest            4      0      0


   Segment part sizes:

     Function/Label                 Bytes
     --------------                 -----
     SLEEP                             1
     T2CNF                             1
     macSleepState                     1
     macSleepWakeUp                   78
     macSleep                        135
     ?<Initializer for macSleepState>
                                       1
     _A_IEN0                           1

 
 213 bytes in segment BANKED_CODE
   3 bytes in segment SFR_AN
   1 byte  in segment XDATA_I
   1 byte  in segment XDATA_ID
 
 214 bytes of CODE  memory
   0 bytes of DATA  memory (+ 3 bytes shared)
   1 byte  of XDATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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