📄 mac_rx.s51
字号:
MOVX @DPTR,A
// 305
// 306 rxPostRxUpdates();
; Setup parameters for call to function rxPostRxUpdates
MOV DPTR,#(??rxPostRxUpdates & 0xffff)
MOV A,#((??rxPostRxUpdates >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 307 }
// 308 }
??rxHaltCleanupFinalStep_4:
SJMP ??Subroutine20_0
CFI EndBlock cfiBlock4
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine20:
CFI Block cfiBlock5 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
LCALL ?BCALL ; Banked call to: DPTR()
??Subroutine20_0:
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock5
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiCond6 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_2
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
CFI Block cfiCond7 Using cfiCommon0
CFI (cfiCond7) NoFunction
CFI (cfiCond7) Conditional ??CrossCallReturnLabel_3
CFI (cfiCond7) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond7) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond7) CFA_SP SP+-5
CFI Block cfiPicker8 Using cfiCommon1
CFI (cfiPicker8) NoFunction
CFI (cfiPicker8) Picker
LCALL ?Subroutine16 & 0xFFFF
??CrossCallReturnLabel_36:
RET
CFI EndBlock cfiCond6
CFI EndBlock cfiCond7
CFI EndBlock cfiPicker8
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine16:
CFI Block cfiCond9 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_37, ??CrossCallReturnLabel_1
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
CFI CFA_XSP16 add(XSP16, 16)
CFI Block cfiCond10 Using cfiCommon0
CFI (cfiCond10) NoFunction
CFI (cfiCond10) Conditional ??CrossCallReturnLabel_37, ??CrossCallReturnLabel_0
CFI (cfiCond10) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond10) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond10) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond10) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond10) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond10) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond10) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond10) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond10) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond10) CFA_SP SP+0
CFI (cfiCond10) CFA_XSP16 add(XSP16, 9)
CFI Block cfiCond11 Using cfiCommon0
CFI (cfiCond11) NoFunction
CFI (cfiCond11) Conditional ??CrossCallReturnLabel_36, ??CrossCallReturnLabel_3
CFI (cfiCond11) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond11) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond11) CFA_SP SP+-5
CFI Block cfiCond12 Using cfiCommon0
CFI (cfiCond12) NoFunction
CFI (cfiCond12) Conditional ??CrossCallReturnLabel_36, ??CrossCallReturnLabel_2
CFI (cfiCond12) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond12) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond12) CFA_SP SP+-5
CFI Block cfiPicker13 Using cfiCommon1
CFI (cfiPicker13) NoFunction
CFI (cfiPicker13) Picker
MOVX @DPTR,A
MOV DPTR,#??pFuncRxState
MOV A,#(??rxStartIsr & 0xff)
MOVX @DPTR,A
INC DPTR
MOV A,#((??rxStartIsr >> 8) & 0xff)
MOVX @DPTR,A
INC DPTR
MOV A,#((??rxStartIsr >> 16) & 0xff)
MOVX @DPTR,A
RET
CFI EndBlock cfiCond9
CFI EndBlock cfiCond10
CFI EndBlock cfiCond11
CFI EndBlock cfiCond12
CFI EndBlock cfiPicker13
// 309
// 310
// 311 /**************************************************************************************************
// 312 * @fn macRxThresholdIsr
// 313 *
// 314 * @brief Interrupt service routine called when bytes in FIFO reach threshold value.
// 315 * It implements a state machine for receiving a packet.
// 316 *
// 317 * @param none
// 318 *
// 319 * @return none
// 320 **************************************************************************************************
// 321 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 322 void macRxThresholdIsr(void)
macRxThresholdIsr:
CFI Block cfiBlock14 Using cfiCommon0
CFI Function macRxThresholdIsr
// 323 {
FUNCALL macRxThresholdIsr, ??rxHaltCleanupFinalStep
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 324 /* if currently reseting, do not execute receive ISR logic */
// 325 if (rxResetFlag)
MOV DPTR,#??rxResetFlag
MOVX A,@DPTR
JNZ ??macRxThresholdIsr_0
// 326 {
// 327 return;
// 328 }
// 329
// 330 /*
// 331 * Call the function that handles the current receive state.
// 332 * A flag is set for the duration of the call to indicate
// 333 * the ISR is executing. This is necessary for the reset
// 334 * logic so it does not perform a reset in the middle of
// 335 * executing the ISR.
// 336 */
// 337 rxIsrActiveFlag = 1;
MOV A,#0x1
MOV DPTR,#??rxIsrActiveFlag
MOVX @DPTR,A
// 338 (*pFuncRxState)();
; Setup parameters for indirect call
MOV DPTR,#??pFuncRxState
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPL,R1
MOV DPH,R2
LCALL ?BCALL ; Banked call to: DPTR()
// 339 rxIsrActiveFlag = 0;
CLR A
MOV DPTR,#??rxIsrActiveFlag
MOVX @DPTR,A
// 340
// 341 /* if a reset occurred during the ISR, peform cleanup here */
// 342 if (rxResetFlag)
MOV DPTR,#??rxResetFlag
MOVX A,@DPTR
JZ ??macRxThresholdIsr_0
// 343 {
// 344 rxHaltCleanupFinalStep();
; Setup parameters for call to function rxHaltCleanupFinalStep
MOV DPTR,#(??rxHaltCleanupFinalStep & 0xffff)
MOV A,#((??rxHaltCleanupFinalStep >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 345 rxResetFlag = 0;
CLR A
MOV DPTR,#??rxResetFlag
MOVX @DPTR,A
??macRxThresholdIsr_0:
SJMP ??Subroutine20_0
CFI EndBlock cfiBlock14
// 346 }
// 347 }
// 348
// 349
// 350 /*=================================================================================================
// 351 * @fn rxStartIsr
// 352 *
// 353 * @brief First ISR state for receiving a packet - compute packet length, allocate
// 354 * buffer, initialize buffer. Acknowledgements are handled immediately without
// 355 * allocating a buffer.
// 356 *
// 357 * @param none
// 358 *
// 359 * @return none
// 360 *=================================================================================================
// 361 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 362 static void rxStartIsr(void)
??rxStartIsr:
CFI Block cfiBlock15 Using cfiCommon0
CFI Function ??rxStartIsr
// 363 {
FUNCALL ??rxStartIsr, halAssertHandler
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, ??rxPostRxUpdates
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macCspForceTxDoneIfPending
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMcuAndRFIM
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMemReadRxFifo
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMemReadRxFifo
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macTxAckReceivedCallback
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macTxAckNotReceivedCallback
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, ??rxDone
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macTxAckNotReceivedCallback
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macDataRxMemAlloc
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macRxCheckPendingCallback
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, ??rxDiscardFrame
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMcuWriteRFIF
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMcuOrRFIM
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMcuOverflowCapture
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, macMcuTimerCapture
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL ??rxStartIsr, ??rxPrepPayload
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
MOV A,#-0xc
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 14)
// 364 uint8 addrLen;
// 365 uint8 ackWithPending;
// 366 uint8 dstAddrMode;
// 367 uint8 srcAddrMode;
// 368
// 369 MAC_ASSERT(!macRxActive); /* receive on top of receive */
MOV DPTR,#macRxActive
MOVX A,@DPTR
JZ ??rxStartIsr_1
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 370
// 371 /* indicate rx is active */
// 372 macRxActive = MAC_RX_ACTIVE_STARTED;
??rxStartIsr_1:
MOV A,#-0x7f
MOV DPTR,#macRxActive
MOVX @DPTR,A
// 373
// 374 /*
// 375 * For bullet proof functionality, need to see if the receiver was just turned off.
// 376 * The logic to request turning off the receiver, disables interrupts and then checks
// 377 * the value of macRxActive. If it is TRUE, the receiver will not be turned off.
// 378 *
// 379 * There is a small hole though. It's possible to attempt turning off the receiver
// 380 * in the window from when the receive interrupt fires and the point where macRxActive
// 381 * is set to TRUE. To plug this hole, the on/off status must be tested *after*
// 382 * macRxActive has been set. If the receiver is off at this point, there is nothing
// 383 * in the RX fifo and the receive is simply aborted.
// 384 *
// 385 * Also, there are some considerations in case a hard disable just happened. Usually,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -