📄 mac_rx_engine.lst
字号:
\ mrxDecrOnCounter:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
104
105 DISABLE_GLOBAL_INT();
\ 000004 C2AF CLR 0xa8.7
106
107 // Decrement counter and check for 1->0
108 if (mrxInfo.onCounter) mrxInfo.onCounter--;
\ 000006 90.... MOV DPTR,#(mrxInfo + 13)
\ 000009 E0 MOVX A,@DPTR
\ 00000A 6002 JZ ??mrxDecrOnCounter_0
\ 00000C 14 DEC A
\ 00000D F0 MOVX @DPTR,A
109 if (mrxInfo.onCounter == 0) {
\ ??mrxDecrOnCounter_0:
\ 00000E E0 MOVX A,@DPTR
\ 00000F 7033 JNZ ??mrxDecrOnCounter_1
110
111 // Avoid interrupting RX or TX (come back later when busy)
112 if (msupIsSfdActive() || msupIsTxActive() || msupIsCspInCriticalSection()) {
\ 000011 ; Setup parameters for call to function msupIsSfdActive
\ 000011 12.... LCALL msupIsSfdActive & 0xFFFF
\ 000014 E9 MOV A,R1
\ 000015 700C JNZ ??mrxDecrOnCounter_2
\ 000017 ; Setup parameters for call to function msupIsTxActive
\ 000017 12.... LCALL msupIsTxActive & 0xFFFF
\ 00001A E9 MOV A,R1
\ 00001B 7006 JNZ ??mrxDecrOnCounter_2
\ 00001D ; Setup parameters for call to function msupIsCspInCriticalSection
\ 00001D 12.... LCALL msupIsCspInCriticalSection & 0xFFFF
\ 000020 E9 MOV A,R1
\ 000021 6019 JZ ??mrxDecrOnCounter_3
113 mrxInfo.onCounter++;
\ ??mrxDecrOnCounter_2:
\ 000023 E0 MOVX A,@DPTR
\ 000024 04 INC A
\ 000025 F0 MOVX @DPTR,A
114 mtimSetCallback(mrxDecrOnCounter, 1);
\ 000026 ; Setup parameters for call to function mtimSetCallback
\ 000026 90.... MOV DPTR,#__Constant_1
\ 000029 12.... LCALL ?PUSH_XSTACK8_X_FOUR
\ 00002C 79.. MOV R1,#(mrxDecrOnCounter & 0xff)
\ 00002E 7A.. MOV R2,#((mrxDecrOnCounter >> 8) & 0xff)
\ 000030 7B.. MOV R3,#((mrxDecrOnCounter >> 16) & 0xff)
\ 000032 12.... LCALL mtimSetCallback & 0xFFFF
\ 000035 7404 MOV A,#0x4
\ 000037 12.... LCALL ?DEALLOC_XSTACK8
\ 00003A 8008 SJMP ??mrxDecrOnCounter_1
115 } else {
116 ISRFOFF;
\ ??mrxDecrOnCounter_3:
\ 00003C 75E1E5 MOV 0xe1,#-0x1b
117 CSP_INDICATE_RX_ON(FALSE);
\ 00003F E4 CLR A
\ 000040 90DF15 MOV DPTR,#-0x20eb
\ 000043 F0 MOVX @DPTR,A
118 }
119 }
120 ENABLE_GLOBAL_INT();
\ ??mrxDecrOnCounter_1:
\ 000044 80.. SJMP ??Subroutine0_0
121
122 } // mrxDecrOnCounter
123
124
125
126
127 //-------------------------------------------------------------------------------------------------------
128 // void mrxRxEnableRequestOff(void)
129 //
130 // DESCRIPTION:
131 // Used in connection with mrxRxEnableRequestTask() to make sure that a mtimCancelCallback operation
132 // only removes callbacks initiated by mrxRxEnableRequestTask()
133 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
134 void mrxRxEnableRequestOff(void) NEAR {
\ mrxRxEnableRequestOff:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
135 mrxDecrOnCounter();
\ 000004 ; Setup parameters for call to function mrxDecrOnCounter
\ 000004 90.... MOV DPTR,#(mrxDecrOnCounter & 0xffff)
\ 000007 74.. MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
\ 000009 12.... LCALL ?BCALL ; Banked call to: DPTR()
136 } // mrxRxEnableRequestOff
\ 00000C 80.. SJMP ??Subroutine0_1
137
138
139
140
141 //-------------------------------------------------------------------------------------------------------
142 // void mrxRxEnableRequestTask(MAC_TASK_INFO *pTask)
143 //
144 // DESCRIPTION:
145 // The task created by mlmeRxEnableRequest() to turn on RX for a period of time. The current version
146 // only supports non-beacon PANs.
147 //
148 // TASK DATA
149 // 0
150 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
151 void mrxRxEnableRequestTask(MAC_TASK_INFO *pTask) NEAR {
\ mrxRxEnableRequestTask:
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
152 MAC_ENUM status;
153
154 // Only implemented for non-beacon PANs
155 if (mpib.macBeaconOrder == 15) {
\ 000009 90.... MOV DPTR,#(mpib + 8)
\ 00000C E0 MOVX A,@DPTR
\ 00000D 640F XRL A,#0xf
\ 00000F 7025 JNZ ??mrxRxEnableRequestTask_0
156
157 // Turn off?
158 if (mrxInfo.rxEnableOnDuration == 0) {
\ 000011 90.... MOV DPTR,#(mrxInfo + 16)
\ 000014 78.. MOV R0,#?V0 + 0
\ 000016 12.... LCALL ?L_MOV_X
\ 000019 90.... MOV DPTR,#__Constant_0
\ 00001C 78.. MOV R0,#?V0 + 0
\ 00001E 12.... LCALL ?L_EQ_X
\ 000021 7018 JNZ ??mrxRxEnableRequestTask_1
159 if (mtimCancelCallback(mrxRxEnableRequestOff)) {
\ 000023 ; Setup parameters for call to function mtimCancelCallback
\ 000023 79.. MOV R1,#(mrxRxEnableRequestOff & 0xff)
\ 000025 7A.. MOV R2,#((mrxRxEnableRequestOff >> 8) & 0xff)
\ 000027 7B.. MOV R3,#((mrxRxEnableRequestOff >> 16) & 0xff)
\ 000029 12.... LCALL mtimCancelCallback & 0xFFFF
\ 00002C E9 MOV A,R1
\ 00002D 6007 JZ ??mrxRxEnableRequestTask_0
160 mrxDecrOnCounter();
\ 00002F ; Setup parameters for call to function mrxDecrOnCounter
\ 00002F 90.... MOV DPTR,#(mrxDecrOnCounter & 0xffff)
\ 000032 74.. MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
\ 000034 8020 SJMP ??mrxRxEnableRequestTask_2
161 status = SUCCESS;
162 } else {
163 status = INVALID_PARAMETER;
\ ??mrxRxEnableRequestTask_0:
\ 000036 75..E8 MOV ?V0 + 0,#-0x18
\ 000039 8021 SJMP ??mrxRxEnableRequestTask_3
164 }
165
166 // Turn on + off after timeot?
167 } else {
168
169 // If there's a timer available to turn RX off, then turn it on now
170 if (mtimSetCallback(mrxRxEnableRequestOff, (INT32)mrxInfo.rxEnableOnDuration)) {
\ ??mrxRxEnableRequestTask_1:
\ 00003B ; Setup parameters for call to function mtimSetCallback
\ 00003B 78.. MOV R0,#?V0 + 0
\ 00003D 12.... LCALL ?PUSH_XSTACK_I_FOUR
\ 000040 79.. MOV R1,#(mrxRxEnableRequestOff & 0xff)
\ 000042 7A.. MOV R2,#((mrxRxEnableRequestOff >> 8) & 0xff)
\ 000044 7B.. MOV R3,#((mrxRxEnableRequestOff >> 16) & 0xff)
\ 000046 12.... LCALL mtimSetCallback & 0xFFFF
\ 000049 7404 MOV A,#0x4
\ 00004B 12.... LCALL ?DEALLOC_XSTACK8
\ 00004E E9 MOV A,R1
\ 00004F 6023 JZ ??mrxRxEnableRequestTask_4
171 mrxIncrOnCounter();
\ 000051 ; Setup parameters for call to function mrxIncrOnCounter
\ 000051 90.... MOV DPTR,#(mrxIncrOnCounter & 0xffff)
\ 000054 74.. MOV A,#((mrxIncrOnCounter >> 16) & 0xff)
\ ??mrxRxEnableRequestTask_2:
\ 000056 12.... LCALL ?BCALL ; Banked call to: DPTR()
172 status = SUCCESS;
\ 000059 75..00 MOV ?V0 + 0,#0x0
173
174 } else {
175 // Come back later!
176 return;
177 }
178 }
179
180 // Not implemented for beacon-enabled PANs
181 } else {
182 status = INVALID_PARAMETER;
183 }
184
185 // Remove the task and confirm to the higher layer
186 mschRemoveTask(pTask->priority, 0);
\ ??mrxRxEnableRequestTask_3:
\ 00005C ; Setup parameters for call to function mschRemoveTask
\ 00005C 7A00 MOV R2,#0x0
\ 00005E 8E82 MOV DPL,R6
\ 000060 8F83 MOV DPH,R7
\ 000062 A3 INC DPTR
\ 000063 A3 INC DPTR
\ 000064 A3 INC DPTR
\ 000065 A3 INC DPTR
\ 000066 A3 INC DPTR
\ 000067 A3 INC DPTR
\ 000068 A3 INC DPTR
\ 000069 A3 INC DPTR
\ 00006A E0 MOVX A,@DPTR
\ 00006B F9 MOV R1,A
\ 00006C 12.... LCALL mschRemoveTask & 0xFFFF
187 mlmeRxEnableConfirm(status);
\ 00006F ; Setup parameters for call to function mlmeRxEnableConfirm
\ 00006F A9.. MOV R1,?V0 + 0
\ 000071 12.... LCALL mlmeRxEnableConfirm & 0xFFFF
188
189 } // mrxRxEnableRequestTask
\ ??mrxRxEnableRequestTask_4:
\ 000074 80.. SJMP ??Subroutine1_0
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 12.... LCALL mrxpReleasePacket & 0xFFFF
\ ??Subroutine1_0:
\ 000003 7F04 MOV R7,#0x4
\ 000005 02.... LJMP ?BANKED_LEAVE_XDATA
190
191
192
193
194 //-------------------------------------------------------------------------------------------------------
195 // void mrxForceRxOff(void)
196 //
197 // DESCRIPTION:
198 // Creates the task that forces RX off at the end of a superframe, if we're not in scan mode.
199 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
200 void mrxForceRxOff(void) NEAR {
\ mrxForceRxOff:
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
201 if (macInfo.state & MAC_STATE_SCAN_BM) return;
\ 000005 90.... MOV DPTR,#macInfo
\ 000008 E0 MOVX A,@DPTR
\ 000009 A2E6 MOV C,0xE0 /* A */.6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -