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

📄 mac_rx_engine.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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 + -