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

📄 mac_csp_tx.s51

📁 CC2430上开关控制灯和温度传感器采集两个例子
💻 S51
📖 第 1 页 / 共 5 页
字号:
        MOV	A,0xa1
        XRL	A,R4
        JZ	??macCspTxGoSlotted_0
        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 op

⌨️ 快捷键说明

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