mac_sleep.lst

来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 532 行 · 第 1/3 页

LST
532
字号
   \   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 + =
减小字号Ctrl + -
显示快捷键?