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 + -
显示快捷键?