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

📄 mac_tx.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  370  * @return      none
//  371  **************************************************************************************************
//  372  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  373 void macTxStartQueuedFrame(void)
macTxStartQueuedFrame:
        CFI Block cfiBlock12 Using cfiCommon0
        CFI Function macTxStartQueuedFrame
//  374 {
        FUNCALL macTxStartQueuedFrame, halAssertHandler
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macTxStartQueuedFrame, ??txGo
        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
//  375   halIntState_t  s;
//  376 
//  377   MAC_ASSERT(!macRxActive && !macRxOutgoingAckFlag); /* queued frames should not transmit in middle of a receive */
        MOV	DPTR,#macRxActive
        MOVX	A,@DPTR
        JNZ	??macTxStartQueuedFrame_0
        MOV	DPTR,#macRxOutgoingAckFlag
        MOVX	A,@DPTR
        JZ	??macTxStartQueuedFrame_1
??macTxStartQueuedFrame_0:
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  378   
//  379   /*
//  380    *  Critical sections around the state change prevents any sort of race condition
//  381    *  with macTxFrame().  This guarantees function txGo() will only be be called once.
//  382    */
//  383   HAL_ENTER_CRITICAL_SECTION(s);
??macTxStartQueuedFrame_1:
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        CLR	0xa8.7
//  384   if (macTxActive == MAC_TX_ACTIVE_QUEUED)
        MOV	DPTR,#macTxActive
        MOVX	A,@DPTR
        XRL	A,#0x2
        JNZ	??macTxStartQueuedFrame_2
//  385   {
//  386     macTxActive = MAC_TX_ACTIVE_GO;
        MOV	A,#-0x7d
        LCALL	?Subroutine2 & 0xFFFF
//  387     HAL_EXIT_CRITICAL_SECTION(s);
//  388     txGo();
??CrossCallReturnLabel_5:
        LCALL	?BCALL               ; Banked call to: DPTR()
        SJMP	??macTxStartQueuedFrame_3
//  389   }
//  390   else
//  391   {
//  392     HAL_EXIT_CRITICAL_SECTION(s);
??macTxStartQueuedFrame_2:
        MOV	0xa8.7,C
//  393   }
//  394 }
??macTxStartQueuedFrame_3:
        SJMP	??Subroutine3_0
        CFI EndBlock cfiBlock12

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine2:
        CFI Block cfiCond13 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_5
        CFI DPL0 Frame(CFA_SP, 4)
        CFI DPH0 Frame(CFA_SP, 5)
        CFI CFA_SP SP+-5
        CFI Block cfiCond14 Using cfiCommon0
        CFI (cfiCond14) NoFunction
        CFI (cfiCond14) Conditional ??CrossCallReturnLabel_4
        CFI (cfiCond14) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond14) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond14) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfiCond14) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI (cfiCond14) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI (cfiCond14) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI (cfiCond14) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI (cfiCond14) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI (cfiCond14) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI (cfiCond14) CFA_SP SP+0
        CFI (cfiCond14) CFA_XSP16 add(XSP16, 9)
        CFI Block cfiPicker15 Using cfiCommon1
        CFI (cfiPicker15) NoFunction
        CFI (cfiPicker15) Picker
        MOVX	@DPTR,A
        MOV	0xa8.7,C
        ; Setup parameters for call to function txGo
        ; Setup parameters for call to function txGo
        MOV	DPTR,#(??txGo & 0xffff)
        MOV	A,#((??txGo >> 16) & 0xff)
        RET
        CFI EndBlock cfiCond13
        CFI EndBlock cfiCond14
        CFI EndBlock cfiPicker15
//  395 
//  396 
//  397 /**************************************************************************************************
//  398  * @fn          macTxChannelBusyCallback
//  399  *
//  400  * @brief       This callback is executed if a CSMA transmit was attempted but the channel
//  401  *              was busy.
//  402  *
//  403  * @param       none
//  404  *
//  405  * @return      none
//  406  **************************************************************************************************
//  407  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  408 void macTxChannelBusyCallback(void)
macTxChannelBusyCallback:
        CFI Block cfiBlock16 Using cfiCommon0
        CFI Function macTxChannelBusyCallback
//  409 {
        FUNCALL macTxChannelBusyCallback, halAssertHandler
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macTxChannelBusyCallback, ??txComplete
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macTxChannelBusyCallback, ??txCsmaPrep
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macTxChannelBusyCallback, ??txCsmaGo
        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
//  410   MAC_ASSERT((macTxType == MAC_TX_TYPE_SLOTTED_CSMA) || (macTxType == MAC_TX_TYPE_UNSLOTTED_CSMA));
        MOV	DPTR,#macTxType
        MOVX	A,@DPTR
        JZ	??macTxChannelBusyCallback_0
        XRL	A,#0x1
        JZ	??macTxChannelBusyCallback_0
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  411 
//  412   /*  clear channel assement failed, follow through with CSMA algorithm */
//  413   nb++;
??macTxChannelBusyCallback_0:
        MOV	DPTR,#??nb
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
//  414   if (nb > macPib.maxCsmaBackoffs)
        MOV	DPTR,#(macPib + 27)
        MOVX	A,@DPTR
        PUSH	A
        CFI CFA_SP SP+-6
        MOV	DPTR,#??nb
        MOVX	A,@DPTR
        MOV	R2,A
        POP	A
        CFI CFA_SP SP+-5
        CLR	C
        SUBB	A,R2
        JNC	??macTxChannelBusyCallback_1
//  415   {
//  416     txComplete(MAC_CHANNEL_ACCESS_FAILURE);
        ; Setup parameters for call to function txComplete
        MOV	R1,#-0x1f
        MOV	DPTR,#(??txComplete & 0xffff)
        MOV	A,#((??txComplete >> 16) & 0xff)
        SJMP	??macTxChannelBusyCallback_2
//  417   }
//  418   else
//  419   {
//  420     macTxBe = MIN(macTxBe+1, macPib.maxBe);
??macTxChannelBusyCallback_1:
        MOV	DPTR,#macTxBe
        MOVX	A,@DPTR
        MOV	R0,A
        MOV	A,#0x1
        ADD	A,R0
        INC	R0
        CLR	A
        ADDC	A,#0x0
        MOV	R1,A
        MOV	DPTR,#(macPib + 39)
        MOVX	A,@DPTR
        MOV	R2,A
        MOV	A,R0
        SUBB	A,R2
        MOV	A,R1
        SUBB	A,#0x0
        CLR	C
        XRL	A,PSW
        RLC	A
        JNC	??macTxChannelBusyCallback_3
        MOV	DPTR,#macTxBe
        MOVX	A,@DPTR
        INC	A
        MOV	R2,A
??macTxChannelBusyCallback_3:
        MOV	A,R2
        MOV	DPTR,#macTxBe
        MOVX	@DPTR,A
//  421     txCsmaPrep();
        ; Setup parameters for call to function txCsmaPrep
        MOV	DPTR,#(??txCsmaPrep & 0xffff)
        MOV	A,#((??txCsmaPrep >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  422     txCsmaGo();
        ; Setup parameters for call to function txCsmaGo
        MOV	DPTR,#(??txCsmaGo & 0xffff)
        MOV	A,#((??txCsmaGo >> 16) & 0xff)
??macTxChannelBusyCallback_2:
        LJMP	?Subroutine5 & 0xFFFF
        CFI EndBlock cfiBlock16
//  423   }
//  424 }
//  425 
//  426 
//  427 /**************************************************************************************************
//  428  * @fn          macTxDoneCallback
//  429  *
//  430  * @brief       This callback is executed when transmit completes.
//  431  *
//  432  * @param       none
//  433  *
//  434  * @return      none
//  435  **************************************************************************************************
//  436  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  437 void macTxDoneCallback(void)
macTxDoneCallback:
        CFI Block cfiBlock17 Using cfiCommon0
        CFI Function macTxDoneCallback
//  438 {
        FUNCALL macTxDoneCallback, ??txComplete
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL macTxDoneCallback, macCspTxRequestAckTimeoutCallback
        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
//  439   halIntState_t  s;
//  440 
//  441   /*
//  442    *  There is a small chance this function could be called twice for a single transmit.
//  443    *  To prevent logic from executing twice, the state variable macTxActive is used as
//  444    *  a gating mechanism to guarantee single time execution.
//  445    */
//  446   HAL_ENTER_CRITICAL_SECTION(s);
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R6,A
        CLR	0xa8.7
//  447   if (macTxActive == MAC_TX_ACTIVE_GO)
        MOV	DPTR,#macTxActive
        MOVX	A,@DPTR
        XRL	A,#0x83
        JNZ	??macTxDoneCallback_0
//  448   {
//  449     /* see if ACK was requested */
//  450     if (!txAckReq)
        MOV	DPTR,#??txAckReq
        MOVX	A,@DPTR
        JNZ	??macTxDoneCallback_1
//  451     {
//  452       macTxActive = MAC_TX_ACTIVE_DONE;
        MOV	A,#-0x7c
        MOV	DPTR,#macTxActive
        MOVX	@DPTR,A
//  453       HAL_EXIT_CRITICAL_SECTION(s);
        MOV	0xa8.7,C
//  454 
//  455       /* ACK was not requested, transmit is complete */
//  456       txComplete(MAC_SUCCESS);
        ; Setup parameters for call to function txComplete
        MOV	R1,#0x0
        MOV	DPTR,#(??txComplete & 0xffff)
        MOV	A,#((??txComplete >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        SJMP	??macTxDoneCallback_2
//  457     }
//  458     else
//  459     {
//  460       /*
//  461        *  ACK was requested - must wait to receive it.  A timer is set
//  462        *  to expire after the timeout duration for waiting for an ACK.
//  463        *  If an ACK is received, the function macTxAckReceived() is called.
//  464        *  If an ACK is not received within the timeout period,
//  465        *  the function macTxAckTimeoutCallback() is called.
//  466        */
//  467       macTxActive = MAC_TX_ACTIVE_LISTEN_FOR_ACK;
??macTxDoneCallback_1:
        MOV	A,#-0x7b
        MOV	DPTR,#macTxActive
        MOVX	@DPTR,A
//  468       MAC_RADIO_TX_REQUEST_ACK_TIMEOUT_CALLBACK();
        ; Setup parameters for call to function macCspTxRequestAckTimeoutCallback
        MOV	DPTR,#(macCspTxRequestAckTimeoutCallback & 0xffff)
        MOV	A,#((macCspTxRequestAckTimeoutCallback >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  469       HAL_EXIT_CRITICAL_SECTION(s);
      

⌨️ 快捷键说明

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