📄 mac_csp_tx.s51
字号:
MOV A,R2
CLR C
SUBB A,#0x2
JC ??macCspTxGoSlotted_0
// 540 {
// 541 CSPX = backoffCountdown - 1;
MOV A,#-0x1
ADD A,R2
MOV DPTR,#-0x20ee
MOVX @DPTR,A
// 542 }
// 543
// 544 HAL_EXIT_CRITICAL_SECTION(s);
??macCspTxGoSlotted_0:
MOV A,R3
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 545 }
SJMP ??Subroutine0_1
CFI EndBlock cfiBlock9
// 546
// 547
// 548 /**************************************************************************************************
// 549 * @fn macCspForceTxDoneIfPending
// 550 *
// 551 * @brief The function clears out any pending TX done logic. Used by receive logic
// 552 * to make sure its ISR does not prevent transmit from completing in a reasonable
// 553 * amount of time.
// 554 *
// 555 * @param none
// 556 *
// 557 * @return none
// 558 **************************************************************************************************
// 559 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 560 void macCspForceTxDoneIfPending(void)
macCspForceTxDoneIfPending:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function macCspForceTxDoneIfPending
// 561 {
FUNCALL macCspForceTxDoneIfPending, macMcuAndRFIM
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL macCspForceTxDoneIfPending, macCspTxIntIsr
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL macCspForceTxDoneIfPending, macTxDoneCallback
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
// 562 ///////////////////////////////////////////////////////////////////////////////////////
// 563 // REV_B_WORKAROUND : work workaround for chip bug #273. The instruction DECZ might
// 564 // be incorrectly executed twice, resulting an illegal value for CSPZ.
// 565 // Delete when Rev B is obsolete.
// 566 ///////////////////////////////////////////////////////////////////////////////////////
// 567 #ifndef _REMOVE_REV_B_WORKAROUNDS
// 568 if (CSPZ >= 0xF8) { CSPZ = 0; }
MOV DPTR,#-0x20ec
MOVX A,@DPTR
CLR C
SUBB A,#-0x8
JC ??macCspForceTxDoneIfPending_0
CLR A
MOVX @DPTR,A
// 569 #endif
// 570 ///////////////////////////////////////////////////////////////////////////////////////
// 571
// 572 if ((CSPZ == CSPZ_CODE_TX_DONE) && MAC_MCU_CSP_STOP_INTERRUPT_IS_ENABLED())
??macCspForceTxDoneIfPending_0:
MOVX A,@DPTR
JNZ ??macCspForceTxDoneIfPending_1
MOV A,0x91
MOV C,0xE0 /* A */.1
JNC ??macCspForceTxDoneIfPending_1
// 573 {
// 574 MAC_MCU_CSP_STOP_DISABLE_INTERRUPT();
; Setup parameters for call to function macMcuAndRFIM
MOV R1,#-0x3
MOV DPTR,#(macMcuAndRFIM & 0xffff)
MOV A,#((macMcuAndRFIM >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 575 if (MAC_MCU_CSP_INT_INTERRUPT_IS_ENABLED())
MOV A,0x91
MOV C,0xE0 /* A */.0
JNC ??macCspForceTxDoneIfPending_2
// 576 {
// 577 macCspTxIntIsr();
; Setup parameters for call to function macCspTxIntIsr
MOV DPTR,#(macCspTxIntIsr & 0xffff)
MOV A,#((macCspTxIntIsr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 578 }
// 579 macTxDoneCallback();
??macCspForceTxDoneIfPending_2:
; Setup parameters for call to function macTxDoneCallback
MOV DPTR,#(macTxDoneCallback & 0xffff)
MOV A,#((macTxDoneCallback >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 580 }
// 581 }
??macCspForceTxDoneIfPending_1:
LJMP ??Subroutine0_1 & 0xFFFF
CFI EndBlock cfiBlock10
// 582
// 583
// 584 /**************************************************************************************************
// 585 * @fn macCspTxRequestAckTimeoutCallback
// 586 *
// 587 * @brief Requests a callback after the ACK timeout period has expired. At that point,
// 588 * the function macTxAckTimeoutCallback() is called via an interrupt.
// 589 *
// 590 * @param none
// 591 *
// 592 * @return none
// 593 **************************************************************************************************
// 594 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 595 void macCspTxRequestAckTimeoutCallback(void)
macCspTxRequestAckTimeoutCallback:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function macCspTxRequestAckTimeoutCallback
// 596 {
FUNCALL macCspTxRequestAckTimeoutCallback, halAssertHandler
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL macCspTxRequestAckTimeoutCallback, halAssertHandler
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL macCspTxRequestAckTimeoutCallback, halAssertHandler
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL macCspTxRequestAckTimeoutCallback, macMcuWriteRFIF
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL macCspTxRequestAckTimeoutCallback, macMcuOrRFIM
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, 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: 0
// 597 uint8 startSymbol;
// 598 uint8 symbols;
// 599 uint8 rollovers;
// 600
// 601 MAC_ASSERT(!(RFIM & IM_CSP_STOP)); /* already an active CSP program */
MOV A,0x91
MOV C,0xE0 /* A */.1
JNC ??macCspTxRequestAckTimeoutCallback_0
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 602
// 603 /* record current symbol count */
// 604 startSymbol = CSP_WEVENT_READ_COUNT_SYMBOLS();
??macCspTxRequestAckTimeoutCallback_0:
MOV A,0xa6
MOV R2,0xa7
MOV DPL,R2
MOV R0,DPL
MOV R1,#0x0
MOV R2,#0x2
MOV R3,#0x0
LCALL ?S_DIV_MOD
MOV A,R0
MOV ?V0 + 0,A
// 605
// 606 /* set symbol timeout from PIB */
// 607 symbols = macPib.ackWaitDuration;
MOV DPTR,#macPib
MOVX A,@DPTR
MOV R6,A
// 608
// 609 /* make sure delay value is not too small for logic to handle */
// 610 MAC_ASSERT(symbols > MAC_A_UNIT_BACKOFF_PERIOD); /* symbols timeout period must be great than a backoff */
CLR C
SUBB A,#0x15
JNC ??macCspTxRequestAckTimeoutCallback_1
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 611
// 612 /* subtract out symbols left in current backoff period */
// 613 symbols = symbols - (MAC_A_UNIT_BACKOFF_PERIOD - startSymbol);
??macCspTxRequestAckTimeoutCallback_1:
MOV A,#-0x14
ADD A,?V0 + 0
ADD A,R6
MOV R6,A
// 614
// 615 /* calculate rollovers needed for remaining symbols */
// 616 rollovers = symbols / MAC_A_UNIT_BACKOFF_PERIOD;
MOV B,#0x14
DIV AB
MOV R7,A
// 617
// 618 /* calculate symbols that still need counted after last rollover */
// 619 symbols = symbols - (rollovers * MAC_A_UNIT_BACKOFF_PERIOD);
MOV B,#0x14
MUL AB
XCH A,R6
SUBB A,R6
MOV R6,A
// 620
// 621 /* add one to rollovers to account for symbols remaining in the current backoff period */
// 622 rollovers++;
INC R7
// 623
// 624 /* set up parameters for CSP program */
// 625 CSPZ = CSPZ_CODE_TX_ACK_TIME_OUT;
MOV A,#0x2
MOV DPTR,#-0x20ec
MOVX @DPTR,A
// 626 CSPX = rollovers;
MOV A,R7
MOV DPTR,#-0x20ee
MOVX @DPTR,A
// 627 CSP_WEVENT_SET_TRIGGER_SYMBOLS(symbols);
MOV A,R6
CLR C
SUBB A,#0x15
JC ??macCspTxRequestAckTimeoutCallback_2
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
??macCspTxRequestAckTimeoutCallback_2:
MOV A,R6
CLR C
RLC A
MOV 0x94,A
MOV A,0x94
JNZ ??macCspTxRequestAckTimeoutCallback_3
MOV 0x94,#0x1
// 628
// 629 /* clear the currently loaded CSP, this generates a stop interrupt which must be cleared */
// 630 CSP_STOP_AND_CLEAR_PROGRAM();
??macCspTxRequestAckTimeoutCallback_3:
MOV 0xe1,#-0x1
// 631 MAC_MCU_CSP_STOP_CLEAR_INTERRUPT();
; Setup parameters for call to function macMcuWriteRFIF
MOV R1,#-0x3
MOV DPTR,#(macMcuWriteRFIF & 0xffff)
MOV A,#((macMcuWriteRFIF >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 632
// 633 /*--------------------------
// 634 * load CSP program
// 635 */
// 636 RFST = WAITX;
MOV 0xe1,#-0x45
// 637 RFST = WEVENT;
MOV 0xe1,#-0x48
// 638 /*--------------------------
// 639 */
// 640
// 641 /* run CSP program */
// 642 MAC_MCU_CSP_STOP_ENABLE_INTERRUPT();
; Setup parameters for call to function macMcuOrRFIM
MOV R1,#0x2
MOV DPTR,#(macMcuOrRFIM & 0xffff)
MOV A,#((macMcuOrRFIM >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 643 CSP_START_PROGRAM();
MOV 0xe1,#-0x2
// 644
// 645 /*
// 646 * For bullet proof operation, must account for the boundary condition
// 647 * where a rollover occurs after count was read but before CSP program
// 648 * was started.
// 649 *
// 650 * If current symbol count is less that the symbol cou
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -