📄 mac_sleep.lst
字号:
\ 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 + -