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

📄 mac_indirect_queue.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        MOV	DPH,A
        MOVX	A,@DPTR
        JNZ	??miqSetRequested_1
        INC	DPTR
        MOVX	A,@DPTR
??miqSetRequested_1:
        JZ	??miqSetRequested_2
//  350 
//  351             // Create the transmission whn the first packet is requested
//  352             if (miqInfo.requestedCounter == 0) {
        MOV	DPTR,#(miqInfo + 2)
        MOVX	A,@DPTR
        JNZ	??miqSetRequested_3
//  353                 if (mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, miqTransmitRequestedPackets, NULL)) {
        ; Setup parameters for call to function mschAddTask
        MOV	?V0 + 4,#(miqTransmitRequestedPackets & 0xff)
        MOV	?V0 + 5,#((miqTransmitRequestedPackets >> 8) & 0xff)
        MOV	?V0 + 6,#((miqTransmitRequestedPackets >> 16) & 0xff)
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 17)
        MOV	R2,#0x0
        MOV	A,R2
        PUSH	A
        CFI CFA_SP SP+-1
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        CLR	A
        MOV	R4,A
        MOV	R5,A
        POP	A
        CFI CFA_SP SP+0
        MOV	R2,A
        LCALL	mschAddTask
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 14)
        MOV	A,R1
        JZ	??miqSetRequested_2
//  354                     pPacket->requested = TRUE;
??miqSetRequested_3:
        MOV	A,#0x1
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	@DPTR,A
//  355                     miqInfo.requestedCounter++;
        MOV	DPTR,#(miqInfo + 2)
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
        SJMP	??miqSetRequested_2
//  356                 }
//  357             } else {
//  358                 pPacket->requested = TRUE;
//  359                 miqInfo.requestedCounter++;
//  360             }
//  361         }
//  362 
//  363 
//  364     // Requested -> unrequested
//  365     } else {
//  366         DISABLE_GLOBAL_INT();
??miqSetRequested_0:
        CLR	0xa8.7
//  367         if (!requested && pPacket->requested) {
        MOV	A,R1
        JNZ	??miqSetRequested_4
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	A,@DPTR
        JZ	??miqSetRequested_4
//  368             miqInfo.requestedCounter--;
        MOV	DPTR,#(miqInfo + 2)
        MOVX	A,@DPTR
        DEC	A
        MOVX	@DPTR,A
//  369             pPacket->requested = FALSE;
        CLR	A
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        MOVX	@DPTR,A
//  370         }
//  371         ENABLE_GLOBAL_INT();
??miqSetRequested_4:
        SETB	0xa8.7
//  372     }
//  373 } // miqSetRequested
??miqSetRequested_2:
        MOV	R7,#0x7
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock5
//  374 
//  375 
//  376 
//  377 
//  378 //-------------------------------------------------------------------------------------------------------
//  379 //  void miqUnrequestAll(void)
//  380 //
//  381 //  DESCRIPTION:
//  382 //      Unrequests all indirect packets
//  383 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  384 ROOT void miqUnrequestAll(void) {
miqUnrequestAll:
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function miqUnrequestAll
        FUNCALL miqUnrequestAll, miqSetRequested
        LOCFRAME XSTACK, 8, STACK
        ARGFRAME XSTACK, 8, STACK
        MOV	A,#-0x8
        LCALL	?FUNC_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 8)
        ; Saved register size: 8
        ; Auto size: 0
//  385     UINT8 n;
//  386 
//  387     for (n = 0; n < MAC_OPT_TX_POOL_SIZE; n++) {
        MOV	R6,#(pMtxPacketPool & 0xff)
        MOV	R7,#((pMtxPacketPool >> 8) & 0xff)
        MOV	?V0 + 0,#0x6
//  388         miqSetRequested(&pMtxPacketPool[n], FALSE);
??miqUnrequestAll_0:
        ; Setup parameters for call to function miqSetRequested
        MOV	R1,#0x0
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	miqSetRequested
//  389     }
        MOV	A,R6
        ADD	A,#-0x6d
        MOV	R6,A
        MOV	A,R7
        ADDC	A,#0x0
        MOV	R7,A
        DEC	?V0 + 0
        MOV	A,?V0 + 0
        JNZ	??miqUnrequestAll_0
//  390 } // miqUnrequestAll
        MOV	R7,#0x1
        LJMP	?FUNC_LEAVE_XDATA
        CFI EndBlock cfiBlock6
//  391 
//  392 
//  393 
//  394 
//  395 //--------------------------        -----------------------------------------------------------------------------
//  396 //  void                    miqTransmitRequestedPackets(MAC_TASK_INFO *pTask)
//  397 //
//  398 //  DESCRIPTION:
//  399 //      This task runs in a loop (reschedules itself), and creates the mtxScheduleTransmission tasks for
//  400 //      requested indirect packets. The task dies when there are no more requested packets.
//  401 //
//  402 //  TASK DAYA:
//  403 //      0
//  404 //-------------------------------------------------------------------------------------------------------
//  405 void miqTransmitRequestedPackets(MAC_TASK_INFO *pTask) NEAR {
//  406     UINT8 index;
//  407     MAC_TX_PACKET   *pIndirectPacket;
//  408 
//  409     if (miqInfo.requestedCounter) {
//  410 
//  411         // Search for requested packets
//  412         index = miqInfo.firstIndirectPacket;
//  413         while (index != NO_PACKET) {
//  414 
//  415             // Activate the current packet if it has been requested
//  416             pIndirectPacket = &pMtxPacketPool[index];
//  417             DISABLE_GLOBAL_INT();
//  418             if (pIndirectPacket->requested) {
//  419                 pIndirectPacket->transmissionStarted = TRUE;
//  420                 ENABLE_GLOBAL_INT();
//  421 
//  422                 // The requested bit should still be set, because it will be checked before the packet is transmitted
//  423                 if (!mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pIndirectPacket)) {
//  424                     pIndirectPacket->transmissionStarted = FALSE;
//  425                 }
//  426                 break;
//  427             }
//  428             ENABLE_GLOBAL_INT();
//  429 
//  430             // Move on to the next packet
//  431             index = pIndirectPacket->nextPacket;
//  432         }
//  433 
//  434         // Re-schedule this task, so that it runs in a loop while there are packets to be transmitted
//  435         mschRescheduleTask(pTask, 0);
//  436 
//  437     } else {
//  438         ENABLE_GLOBAL_INT();
//  439         mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
//  440     }
//  441 
//  442 } // miqTransmitRequestedPackets
//  443 
//  444 
//  445 
//  446 
//  447 //-------------------------------------------------------------------------------------------------------
//  448 //  void miqTransmitRequestedPackets(ADDRESS *pDestAddr, BOOL isExtAddr)
//  449 //
//  450 //  DESCRIPTION:
//  451 //      Transmits a packet with no payload as a response to a data request when there are no pending
//  452 //      packets in the queue.
//  453 //
//  454 //  ARGUMENTS:
//  455 //      ADDRESS *pDestAddr
//  456 //          The destination address of the packet
//  457 //      BOOL isExtAddr
//  458 //          TRUE if pDestAddr points to an extended address
//  459 //
//  460 //  RETURN VALUE:
//  461 //      BOOL
//  462 //          The packet transmission has been initiated
//  463 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  464 ROOT BOOL miqTransmitNoDataPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
miqTransmitNoDataPacket:
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function miqTransmitNoDataPacket
        FUNCALL miqTransmitNoDataPacket, mtxpReservePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL miqTransmitNoDataPacket, mschReserveTask
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL miqTransmitNoDataPacket, mtxpReleasePacket
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL miqTransmitNoDataPacket, msupPrepareHeader
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL miqTransmitNoDataPacket, msupPrepareHeader
        LOCFRAME XSTACK, 21, STACK
        ARGFRAME XSTACK, 21, STACK
        FUNCALL miqTransmitNoDataPacket, msupCalcPacketDuration
        LOCFRAME XSTACK, 13, STACK
        ARGFRAME XSTACK, 13, STACK
        FUNCALL miqTransmitNoDataPacket, mschAddTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0xd
        LCALL	?FUNC_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 13)
        ; Saved register size: 13
        ; Auto size: 0
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	?V0 + 2,R1
//  465     MAC_TX_PACKET   *pPacket;
//  466     UINT8 taskNumber;
//  467     BYTE txOptions;
//  468 
//  469     // Try to reserve a packet
//  470     pPacket = mtxpReservePacket();
        ; Setup parameters for call to function mtxpReservePacket
        LCALL	mtxpReservePacket
        MOV	?V0 + 4,R2
        MOV	?V0 + 5,R3
        MOV	R6,?V0 + 4
        MOV	R7,?V0 + 5
//  471     if (!pPacket) return FALSE;
        MOV	A,R6
        JNZ	??miqTransmitNoDataPacket_0
        MOV	A,R7
??miqTransmitNoDataPacket_0:
        JNZ	??miqTransmitNoDataPacket_1
??miqTransmitNoDataPacket_2:
        MOV	R1,#0x0
        LJMP	??miqTransmitNoDataPacket_3
//  472 
//  473     // Try to reserve a transmission task
//  474     taskNumber = mschReserveTask();
??miqTransmitNoDataPacket_1:
        ; Setup parameters for call to function mschReserveTask
        LCALL	mschReserveTask
        MOV	A,R1
        MOV	?V0 + 3,A
//  475     if (taskNumber == NO_TASK) {
        MOV	A,#-0x1
        XRL	A,?V0 + 3
        JNZ	??miqTransmitNoDataPacket_4
//  476         mtxpReleasePacket(pPacket);
        ; Setup parameters for call to function mtxpReleasePacket
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        LCALL	mtxpReleasePacket
//  477         return FALSE;
        SJMP	??miqTransmitNoDataPacket_2
//  478     }
//  479 
//  480     // Set TX options
//  481     txOptions = TX_OPT_ACK_REQ;
//  482 #if MAC_OPT_SECURITY
//  483 //TBD: Include security here?
//  484 //    if (securityEnable) {
//  485 //        txOptions |= TX_OPT_SECURITY_ENABLE;
//  486 //    }
//  487 #endif
//  488 
//  489     // TX mode
//  490     pPacket->txMode = MTX_MODE_USE_CSMACA_BM | MTX_MODE_MAC_INTERNAL_BM;
??miqTransmitNoDataPacket_4:
        MOV	A,R6
        ADD	A,#-0x7a
        MOV	DPL,A

⌨️ 快捷键说明

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