📄 mac_rx_engine.s51
字号:
JZ ??mrxRxEnableRequestTask_0
// 160 mrxDecrOnCounter();
; Setup parameters for call to function mrxDecrOnCounter
MOV DPTR,#(mrxDecrOnCounter & 0xffff)
MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
SJMP ??mrxRxEnableRequestTask_2
// 161 status = SUCCESS;
// 162 } else {
// 163 status = INVALID_PARAMETER;
??mrxRxEnableRequestTask_0:
MOV ?V0 + 0,#-0x18
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:
; Setup parameters for call to function mtimSetCallback
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_FOUR
CFI CFA_XSP16 add(XSP16, 16)
MOV R1,#(mrxRxEnableRequestOff & 0xff)
MOV R2,#((mrxRxEnableRequestOff >> 8) & 0xff)
MOV R3,#((mrxRxEnableRequestOff >> 16) & 0xff)
LCALL mtimSetCallback & 0xFFFF
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 12)
MOV A,R1
JZ ??mrxRxEnableRequestTask_4
// 171 mrxIncrOnCounter();
; Setup parameters for call to function mrxIncrOnCounter
MOV DPTR,#(mrxIncrOnCounter & 0xffff)
MOV A,#((mrxIncrOnCounter >> 16) & 0xff)
??mrxRxEnableRequestTask_2:
LCALL ?BCALL ; Banked call to: DPTR()
// 172 status = SUCCESS;
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:
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x0
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
// 187 mlmeRxEnableConfirm(status);
; Setup parameters for call to function mlmeRxEnableConfirm
MOV R1,?V0 + 0
LCALL mlmeRxEnableConfirm & 0xFFFF
// 188
// 189 } // mrxRxEnableRequestTask
??mrxRxEnableRequestTask_4:
SJMP ??Subroutine1_0
CFI EndBlock cfiBlock5
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock6 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
LCALL mrxpReleasePacket & 0xFFFF
??Subroutine1_0:
MOV R7,#0x4
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock6
// 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 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 200 void mrxForceRxOff(void) NEAR {
mrxForceRxOff:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function mrxForceRxOff
FUNCALL mrxForceRxOff, mschReserveTask
LOCFRAME ISTACK, 1, STACK
LOCFRAME XSTACK, 14, STACK
ARGFRAME ISTACK, 1, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL mrxForceRxOff, mschAddTask
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
MOV A,#-0xb
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 0
// 201 if (macInfo.state & MAC_STATE_SCAN_BM) return;
MOV DPTR,#macInfo
MOVX A,@DPTR
MOV C,0xE0 /* A */.6
JC ??mrxForceRxOff_0
// 202 mschAddTask(mschReserveTask(), MAC_TASK_PRI_HIGHEST, mrxForceRxOffTask, MRX_RESET_ON_COUNTER);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mrxForceRxOffTask & 0xff)
MOV ?V0 + 1,#((mrxForceRxOffTask >> 8) & 0xff)
MOV ?V0 + 2,#((mrxForceRxOffTask >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 14)
MOV R2,#0x3
MOV A,R2
PUSH A
CFI CFA_SP SP+-1
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask & 0xFFFF
MOV R4,#0x1
CLR A
MOV R5,A
POP A
CFI CFA_SP SP+0
MOV R2,A
LCALL mschAddTask & 0xFFFF
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
// 203 } // mrxForceRxOff
??mrxForceRxOff_0:
MOV R7,#0x3
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock7
// 204
// 205
// 206
// 207
// 208 //-------------------------------------------------------------------------------------------------------
// 209 // void mrxForceRxOffTask(MAC_TASK_INFO *pTask)
// 210 //
// 211 // DESCRIPTION:
// 212 // This task forces RX off by issuing a SRFOFF command strobe, regardless of whether the SFD pin
// 213 // state. If SFD was high before the command was issued, an RX engine cleanup is performed.
// 214 //
// 215 // TASK DATA:
// 216 // Flags (MRX_RESET_ON_COUNTER)
// 217 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 218 void mrxForceRxOffTask(MAC_TASK_INFO *pTask) NEAR {
mrxForceRxOffTask:
CFI Block cfiBlock8 Using cfiCommon0
CFI Function mrxForceRxOffTask
FUNCALL mrxForceRxOffTask, mrxResetRxEngine
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL mrxForceRxOffTask, mschRemoveTask
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 219 DISABLE_GLOBAL_INT();
CLR 0xa8.7
// 220 if (pTask->taskData & MRX_RESET_ON_COUNTER) mrxInfo.onCounter = 0;
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV C,0xE0 /* A */.0
JNC ??mrxForceRxOffTask_0
CLR A
MOV DPTR,#(mrxInfo + 13)
MOVX @DPTR,A
// 221 ISRFOFF;
??mrxForceRxOffTask_0:
MOV 0xe1,#-0x1b
// 222 mrxResetRxEngine();
; Setup parameters for call to function mrxResetRxEngine
LCALL mrxResetRxEngine & 0xFFFF
// 223 ENABLE_GLOBAL_INT();
SETB 0xa8.7
// 224 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x2
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
CFI EndBlock cfiBlock8
// 225 } // mrxForceRxOffTask
REQUIRE ?Subroutine2
; // Fall through to label ?Subroutine2
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine2:
CFI Block cfiBlock9 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock9
// 226
// 227
// 228
// 229
// 230 static ROOT void mrxStartPayloadDmaTransfer(void) {
// 231 pDma1234Configs[DMA_RFRX_CHANNEL - 1].destMsb = HIBYTE(mrxInfo.pPacket->mdi.pMsdu);
// 232 pDma1234Configs[DMA_RFRX_CHANNEL - 1].destLsb = LOBYTE(mrxInfo.pPacket->mdi.pMsdu);
// 233 pDma1234Configs[DMA_RFRX_CHANNEL - 1].lenLsb = mrxInfo.length;
// 234
// 235 while (RXFIFOCNT < 2);
// 236
// 237 DMA_ARM_CHANNEL(DMA_RFRX_CHANNEL);
// 238 DMA_START_CHANNEL(DMA_RFRX_CHANNEL);
// 239
// 240 DISABLE_FIFOP_INT_BIT();
// 241 }
// 242
// 243
// 244
// 245
// 246 //-------------------------------------------------------------------------------------------------------
// 247 // void mrxResetRxEngine(void)
// 248 //
// 249 // DESCRIPTION:
// 250 // Resets the RX engine by clearing the RX FIFO, freeing any recently acquired resources, and
// 251 // resetting the RX engine state.
// 252 //-------------------------------------------------------------------------------------------------------
// 253 ROOT void mrxResetRxEngine(void) {
// 254 DISABLE_GLOBAL_INT();
// 255
// 256 // Free resources
// 257 switch (mrxInfo.state) {
// 258 case MRX_STATE_LEN_FCF_SEQ:
// 259 // Nothing happened yet, so just flush the FIFO
// 260 break;
// 261 case MRX_STATE_FCS:
// 262 DMA_ABORT_CHANNEL(DMA_RFRX_CHANNEL);
// 263 // No break here!
// 264
// 265 case MRX_STATE_ADDR:
// 266 mschReleaseTask(mrxInfo.taskNumber);
// 267 mrxInfo.taskNumber = NO_TASK;
// 268 mrxpReleasePacket(mrxInfo.pPacket);
// 269 mrxInfo.pPacket = NULL;
// 270 // No break here!
// 271
// 272 case MRX_STATE_DISCARD:
// 273 mrxDecrOnCounter();
// 274 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -