⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_rx_engine.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//   58 //  DESCRIPTION:
//   59 //      Increments the "RX on" counter, and turns on RX on a 0 -> 1 transition
//   60 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   61 void mrxIncrOnCounter(void) NEAR {
mrxIncrOnCounter:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function mrxIncrOnCounter
        FUNCALL mrxIncrOnCounter, msupIsTxActive
        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
//   62     DISABLE_GLOBAL_INT();
        CLR	0xa8.7
//   63     if (!mrxInfo.onCounter) {
        MOV	DPTR,#(mrxInfo + 13)
        MOVX	A,@DPTR
        JNZ	??mrxIncrOnCounter_0
//   64         CSP_INDICATE_RX_ON(TRUE);
        MOV	A,#0x1
        MOV	DPTR,#-0x20eb
        MOVX	@DPTR,A
//   65         if (!msupIsTxActive()) {
        ; Setup parameters for call to function msupIsTxActive
        LCALL	msupIsTxActive & 0xFFFF
        MOV	A,R1
        JNZ	??mrxIncrOnCounter_0
//   66             ISRXON;
        MOV	0xe1,#-0x1e
//   67         }
//   68     }
//   69     mrxInfo.onCounter++;
??mrxIncrOnCounter_0:
        MOV	DPTR,#(mrxInfo + 13)
        MOVX	A,@DPTR
        INC	A
        SJMP	?Subroutine0
        CFI EndBlock cfiBlock0
//   70     ENABLE_GLOBAL_INT();
//   71 } // mrxIncrOnCounter
//   72 
//   73 
//   74 
//   75 
//   76 //-------------------------------------------------------------------------------------------------------
//   77 //  void mrxAutoIncrOnCounter(void)
//   78 //
//   79 //  DESCRIPTION:
//   80 //      Increments the "RX on" counter, but does not turn on RX on a 0 -> 1 transition. This function
//   81 //      should be used when issuing the STXON(CCA) or SACK(PEND) command strobes.
//   82 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   83 void mrxAutoIncrOnCounter(void) NEAR {
mrxAutoIncrOnCounter:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function mrxAutoIncrOnCounter
        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
//   84     DISABLE_GLOBAL_INT();
        CLR	0xa8.7
//   85     mrxInfo.onCounter++;
        MOV	DPTR,#(mrxInfo + 13)
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
//   86     CSP_INDICATE_RX_ON(TRUE);
        MOV	A,#0x1
        MOV	DPTR,#-0x20eb
        SJMP	?Subroutine0
        CFI EndBlock cfiBlock1
//   87     ENABLE_GLOBAL_INT();
//   88 } // mrxAutoIncrOnCounter
//   89 
//   90 
//   91 
//   92 
//   93 //-------------------------------------------------------------------------------------------------------
//   94 //  void mrxDecrOnCounter(void)
//   95 //
//   96 //  DESCRIPTION:
//   97 //      Decrements the "RX on" counter, and turns off RX on a 1 -> 0 transition if SFD is low. If SFD is
//   98 //      high, the turn-off operation is delayed by one backoff period by using a callback.
//   99 //
//  100 //      Note: Because of the CSP handling, this function must only be called at the start of a backoff
//  101 //      period
//  102 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  103 void mrxDecrOnCounter(void) NEAR {
mrxDecrOnCounter:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function mrxDecrOnCounter
        FUNCALL mrxDecrOnCounter, msupIsSfdActive
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL mrxDecrOnCounter, msupIsTxActive
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL mrxDecrOnCounter, msupIsCspInCriticalSection
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL mrxDecrOnCounter, mtimSetCallback
        LOCFRAME ISTACK, 2, STACK
        LOCFRAME XSTACK, 4, STACK
        ARGFRAME ISTACK, 2, STACK
        ARGFRAME XSTACK, 4, 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
//  104 
//  105     DISABLE_GLOBAL_INT();
        CLR	0xa8.7
//  106 
//  107     // Decrement counter and check for 1->0
//  108     if (mrxInfo.onCounter) mrxInfo.onCounter--;
        MOV	DPTR,#(mrxInfo + 13)
        MOVX	A,@DPTR
        JZ	??mrxDecrOnCounter_0
        DEC	A
        MOVX	@DPTR,A
//  109     if (mrxInfo.onCounter == 0) {
??mrxDecrOnCounter_0:
        MOVX	A,@DPTR
        JNZ	??mrxDecrOnCounter_1
//  110 
//  111         // Avoid interrupting RX or TX (come back later when busy)
//  112         if (msupIsSfdActive() || msupIsTxActive() || msupIsCspInCriticalSection()) {
        ; Setup parameters for call to function msupIsSfdActive
        LCALL	msupIsSfdActive & 0xFFFF
        MOV	A,R1
        JNZ	??mrxDecrOnCounter_2
        ; Setup parameters for call to function msupIsTxActive
        LCALL	msupIsTxActive & 0xFFFF
        MOV	A,R1
        JNZ	??mrxDecrOnCounter_2
        ; Setup parameters for call to function msupIsCspInCriticalSection
        LCALL	msupIsCspInCriticalSection & 0xFFFF
        MOV	A,R1
        JZ	??mrxDecrOnCounter_3
//  113             mrxInfo.onCounter++;
??mrxDecrOnCounter_2:
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
//  114             mtimSetCallback(mrxDecrOnCounter, 1);
        ; Setup parameters for call to function mtimSetCallback
        MOV	DPTR,#__Constant_1
        LCALL	?PUSH_XSTACK8_X_FOUR
        CFI CFA_XSP16 add(XSP16, 4)
        MOV	R1,#(mrxDecrOnCounter & 0xff)
        MOV	R2,#((mrxDecrOnCounter >> 8) & 0xff)
        MOV	R3,#((mrxDecrOnCounter >> 16) & 0xff)
        LCALL	mtimSetCallback & 0xFFFF
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 XSP16+0
        SJMP	??mrxDecrOnCounter_1
//  115         } else {
//  116             ISRFOFF;
??mrxDecrOnCounter_3:
        MOV	0xe1,#-0x1b
//  117             CSP_INDICATE_RX_ON(FALSE);
        CLR	A
        MOV	DPTR,#-0x20eb
        MOVX	@DPTR,A
//  118         }
//  119     }
//  120     ENABLE_GLOBAL_INT();
??mrxDecrOnCounter_1:
        SJMP	??Subroutine0_0
        CFI EndBlock cfiBlock2
//  121 
//  122 } // mrxDecrOnCounter

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+-5
        CFI DPL0 Frame(CFA_SP, 4)
        CFI DPH0 Frame(CFA_SP, 5)
        MOVX	@DPTR,A
??Subroutine0_0:
        SETB	0xa8.7
??Subroutine0_1:
        POP	DPH
        CFI CFA_SP SP+-4
        CFI DPH0 SameValue
        POP	DPL
        CFI CFA_SP SP+-3
        CFI DPL0 SameValue
        LJMP	?BRET
        CFI EndBlock cfiBlock3
//  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 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  134 void mrxRxEnableRequestOff(void) NEAR {
mrxRxEnableRequestOff:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function mrxRxEnableRequestOff
        FUNCALL mrxRxEnableRequestOff, mrxDecrOnCounter
        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
//  135     mrxDecrOnCounter();
        ; Setup parameters for call to function mrxDecrOnCounter
        MOV	DPTR,#(mrxDecrOnCounter & 0xffff)
        MOV	A,#((mrxDecrOnCounter >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  136 } // mrxRxEnableRequestOff
        SJMP	??Subroutine0_1
        CFI EndBlock cfiBlock4
//  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 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  151 void mrxRxEnableRequestTask(MAC_TASK_INFO   *pTask) NEAR {
mrxRxEnableRequestTask:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function mrxRxEnableRequestTask
        FUNCALL mrxRxEnableRequestTask, mtimCancelCallback
        LOCFRAME XSTACK, 12, STACK
        ARGFRAME XSTACK, 12, STACK
        FUNCALL mrxRxEnableRequestTask, mrxDecrOnCounter
        LOCFRAME XSTACK, 12, STACK
        ARGFRAME XSTACK, 12, STACK
        FUNCALL mrxRxEnableRequestTask, mtimSetCallback
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mrxRxEnableRequestTask, mrxIncrOnCounter
        LOCFRAME XSTACK, 12, STACK
        ARGFRAME XSTACK, 12, STACK
        FUNCALL mrxRxEnableRequestTask, mschRemoveTask
        LOCFRAME XSTACK, 12, STACK
        ARGFRAME XSTACK, 12, STACK
        FUNCALL mrxRxEnableRequestTask, mlmeRxEnableConfirm
        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
        MOV	A,R2
        MOV	R6,A
        MOV	A,R3
        MOV	R7,A
//  152     MAC_ENUM status;
//  153 
//  154     // Only implemented for non-beacon PANs
//  155     if (mpib.macBeaconOrder == 15) {
        MOV	DPTR,#(mpib + 8)
        MOVX	A,@DPTR
        XRL	A,#0xf
        JNZ	??mrxRxEnableRequestTask_0
//  156 
//  157         // Turn off?
//  158         if (mrxInfo.rxEnableOnDuration == 0) {
        MOV	DPTR,#(mrxInfo + 16)
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	DPTR,#__Constant_0
        MOV	R0,#?V0 + 0
        LCALL	?L_EQ_X
        JNZ	??mrxRxEnableRequestTask_1
//  159             if (mtimCancelCallback(mrxRxEnableRequestOff)) {
        ; Setup parameters for call to function mtimCancelCallback
        MOV	R1,#(mrxRxEnableRequestOff & 0xff)
        MOV	R2,#((mrxRxEnableRequestOff >> 8) & 0xff)
        MOV	R3,#((mrxRxEnableRequestOff >> 16) & 0xff)
        LCALL	mtimCancelCallback & 0xFFFF
        MOV	A,R1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -