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

📄 mac_csp_tx.lst

📁 CC2430上开关控制灯和温度传感器采集两个例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    529             *  This is needed for correct operation of the WAITX instruction.  As with an
    530             *  initial backoff countdown value of zero, if this case does occur, it means the
    531             *  transmit function was not called early enough for a properly timed slotted transmit.
    532             *  The transmit will be late.
    533             *
    534             *  Finally, worth noting, writes to CSPX may not work if the CSP is executing the WAITX
    535             *  instruction and a timer rollover occurs.  In this case, however, there is no possibility
    536             *  of that happening.  If CSPX is updated here, a rollover has just occurred so a
    537             *  collision is not possible (still within a critical section here too).
    538             */
    539            if ((lowByteOfBackoffCount != T2OF0) && (backoffCountdown > 1))
   \   000036   E5A1         MOV     A,0xa1
   \   000038   6C           XRL     A,R4
   \   000039   600D         JZ      ??macCspTxGoSlotted_0
   \   00003B   EA           MOV     A,R2
   \   00003C   C3           CLR     C
   \   00003D   9402         SUBB    A,#0x2
   \   00003F   4007         JC      ??macCspTxGoSlotted_0
    540            {
    541              CSPX = backoffCountdown - 1;
   \   000041   74FF         MOV     A,#-0x1
   \   000043   2A           ADD     A,R2
   \   000044   90DF12       MOV     DPTR,#-0x20ee
   \   000047   F0           MOVX    @DPTR,A
    542            }
    543            
    544            HAL_EXIT_CRITICAL_SECTION(s);
   \                     ??macCspTxGoSlotted_0:
   \   000048   EB           MOV     A,R3
   \   000049   A2E0         MOV     C,0xE0 /* A   */.0
   \   00004B   92AF         MOV     0xa8.7,C
    545          }
   \   00004D   80..         SJMP    ??Subroutine0_1
    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           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    560          void macCspForceTxDoneIfPending(void)
   \                     macCspForceTxDoneIfPending:
    561          {
   \   000000   C082         PUSH    DPL
   \   000002   C083         PUSH    DPH
   \   000004                ; Saved register size: 2
   \   000004                ; 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; }
   \   000004   90DF14       MOV     DPTR,#-0x20ec
   \   000007   E0           MOVX    A,@DPTR
   \   000008   C3           CLR     C
   \   000009   94F8         SUBB    A,#-0x8
   \   00000B   4002         JC      ??macCspForceTxDoneIfPending_0
   \   00000D   E4           CLR     A
   \   00000E   F0           MOVX    @DPTR,A
    569          #endif
    570          ///////////////////////////////////////////////////////////////////////////////////////
    571            
    572            if ((CSPZ == CSPZ_CODE_TX_DONE) &&  MAC_MCU_CSP_STOP_INTERRUPT_IS_ENABLED())
   \                     ??macCspForceTxDoneIfPending_0:
   \   00000F   E0           MOVX    A,@DPTR
   \   000010   7026         JNZ     ??macCspForceTxDoneIfPending_1
   \   000012   E591         MOV     A,0x91
   \   000014   A2E1         MOV     C,0xE0 /* A   */.1
   \   000016   5020         JNC     ??macCspForceTxDoneIfPending_1
    573            {
    574              MAC_MCU_CSP_STOP_DISABLE_INTERRUPT();
   \   000018                ; Setup parameters for call to function macMcuAndRFIM
   \   000018   79FD         MOV     R1,#-0x3
   \   00001A   90....       MOV     DPTR,#(macMcuAndRFIM & 0xffff)
   \   00001D   74..         MOV     A,#((macMcuAndRFIM >> 16) & 0xff)
   \   00001F   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    575              if (MAC_MCU_CSP_INT_INTERRUPT_IS_ENABLED())
   \   000022   E591         MOV     A,0x91
   \   000024   A2E0         MOV     C,0xE0 /* A   */.0
   \   000026   5008         JNC     ??macCspForceTxDoneIfPending_2
    576              {
    577                macCspTxIntIsr();
   \   000028                ; Setup parameters for call to function macCspTxIntIsr
   \   000028   90....       MOV     DPTR,#(macCspTxIntIsr & 0xffff)
   \   00002B   74..         MOV     A,#((macCspTxIntIsr >> 16) & 0xff)
   \   00002D   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    578              }
    579              macTxDoneCallback();
   \                     ??macCspForceTxDoneIfPending_2:
   \   000030                ; Setup parameters for call to function macTxDoneCallback
   \   000030   90....       MOV     DPTR,#(macTxDoneCallback & 0xffff)
   \   000033   74..         MOV     A,#((macTxDoneCallback >> 16) & 0xff)
   \   000035   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    580            }
    581          }
   \                     ??macCspForceTxDoneIfPending_1:
   \   000038   02....       LJMP    ??Subroutine0_1 & 0xFFFF
    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           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    595          void macCspTxRequestAckTimeoutCallback(void)
   \                     macCspTxRequestAckTimeoutCallback:
    596          {
   \   000000   74F4         MOV     A,#-0xc
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 12
   \   000005                ; 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 */
   \   000005   E591         MOV     A,0x91
   \   000007   A2E1         MOV     C,0xE0 /* A   */.1
   \   000009   5008         JNC     ??macCspTxRequestAckTimeoutCallback_0
   \   00000B                ; Setup parameters for call to function halAssertHandler
   \   00000B   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   00000E   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000010   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    602          
    603            /* record current symbol count */
    604            startSymbol = CSP_WEVENT_READ_COUNT_SYMBOLS();
   \                     ??macCspTxRequestAckTimeoutCallback_0:
   \   000013   E5A6         MOV     A,0xa6
   \   000015   AAA7         MOV     R2,0xa7
   \   000017   8A82         MOV     DPL,R2
   \   000019   A882         MOV     R0,DPL
   \   00001B   7900         MOV     R1,#0x0
   \   00001D   7A02         MOV     R2,#0x2
   \   00001F   7B00         MOV     R3,#0x0
   \   000021   12....       LCALL   ?S_DIV_MOD
   \   000024   E8           MOV     A,R0
   \   000025   F5..         MOV     ?V0 + 0,A
    605          
    606            /* set symbol timeout from PIB */
    607            symbols = macPib.ackWaitDuration;
   \   000027   90....       MOV     DPTR,#macPib
   \   00002A   E0           MOVX    A,@DPTR
   \   00002B   FE           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 */
   \   00002C   C3           CLR     C
   \   00002D   9415         SUBB    A,#0x15
   \   00002F   5008         JNC     ??macCspTxRequestAckTimeoutCallback_1
   \   000031                ; Setup parameters for call to function halAssertHandler
   \   000031   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000034   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000036   12....       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:
   \   000039   74EC         MOV     A,#-0x14
   \   00003B   25..         ADD     A,?V0 + 0
   \   00003D   2E           ADD     A,R6
   \   00003E   FE           MOV     R6,A
    614          
    615            /* calculate rollovers needed for remaining symbols */
    616            rollovers = symbols / MAC_A_UNIT_BACKOFF_PERIOD;
   \   00003F   75F014       MOV     B,#0x14
   \   000042   84           DIV     AB
   \   000043   FF           MOV     R7,A
    617          
    618            /* calculate symbols that still need counted after last rollover */
    619            symbols = symbols - (rollovers * MAC_A_UNIT_BACKOFF_PERIOD);
   \   000044   75F014       MOV     B,#0x14
   \   000047   A4           MUL     AB
   \   000048   CE           XCH     A,R6
   \   000049   9E           SUBB    A,R6
   \   00004A   FE           MOV     R6,A
    620          
    621            /* add one to rollovers to account for symbols remaining in the current backoff period */
    622            rollovers++;
   \   00004B   0F           INC     R7
    623          
    624            /* set up parameters for CSP program */
    625            CSPZ = CSPZ_CODE_TX_ACK_TIME_OUT;
   \   00004C   7402         MOV     A,#0x2
   \   00004E   90DF14       MOV     DPTR,#-0x20ec
   \   000051   F0           MOVX    @DPTR,A
    626            CSPX = rollovers;
   \   000052   EF           MOV     A,R7
   \   000053   90DF12       MOV     DPTR,#-0x20ee
   \   000056   F0           MOVX    @DPTR,A
    627            CSP_WEVENT_SET_TRIGGER_SYMBOLS(symbols);
   \   000057   EE           MOV     A,R6
   \   000058   C3           CLR     C
   \   000059   9415         SUBB    A,#0x15
   \   00005B   4008         JC      ??macCspTxRequestAckTimeoutCallback_2
   \   00005D                ; Setup parameters for call to function halAssertHandler
   \   00005D   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000060   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000062   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \                     ??macCspTxRequestAckTimeoutCallback_2:
   \   000065   EE           MOV     A,R6
   \   000066   C3           CLR     C
   \   000067   33           RLC     A
   \   000068   F594         MOV     0x94,A
   \   00006A   E594         MOV     A,0x94
   \   00006C   7003         JNZ     ??mac

⌨️ 快捷键说明

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