mac_rx.lst

来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 1,148 行 · 第 1/5 页

LST
1,148
字号
     54          /* receive FIFO bytes needed to start a valid receive (see function rxStartIsr for details) */
     55          #define RX_THRESHOLD_START_LEN    (MAC_PHY_PHR_LEN        +  \
     56                                             MAC_FCF_FIELD_LEN      +  \
     57                                             MAC_SEQ_NUM_FIELD_LEN  +  \
     58                                             MAC_FCS_FIELD_LEN)
     59          
     60          /* maximum size of addressing fields (note: command frame identifier processed as part of address) */
     61          #define MAX_ADDR_FIELDS_LEN  ((MAC_EXT_ADDR_FIELD_LEN + MAC_PAN_ID_FIELD_LEN) * 2)
     62          
     63          /* addressing mode reserved value */
     64          #define ADDR_MODE_RESERVERED  1
     65          
     66          /* length of command frame identifier */
     67          #define CMD_FRAME_ID_LEN      1
     68          
     69          /* packet size mask is equal to the maximum value */
     70          #define PHY_PACKET_SIZE_MASK  0x7F
     71          
     72          /* value for promiscuous off, must not conflict with other mode variants from separate include files */
     73          #define PROMISCUOUS_MODE_OFF  0x00
     74          
     75          /* bit of proprietary FCS format that indicates if the CRC is OK */
     76          #define PROPRIETARY_FCS_CRC_OK_BIT  0x80
     77          
     78          /* dummy length value for unused entry in lookup table */
     79          #define DUMMY_LEN   0xBE
     80          
     81          /* value for rxThresholdIntState */
     82          #define RX_THRESHOLD_INT_STATE_INACTIVE   0
     83          #define RX_THRESHOLD_INT_STATE_ACTIVE     1
     84          #define RX_THRESHOLD_INT_STATE_RESET      2
     85          
     86          
     87          /* ------------------------------------------------------------------------------------------------
     88           *                                             Macros
     89           * ------------------------------------------------------------------------------------------------
     90           */
     91          #define MEM_ALLOC(x)   macDataRxMemAlloc(x)
     92          #define MEM_FREE(x)    macDataRxMemFree((uint8 *)x)
     93          
     94          /*
     95           *  Macro for encoding frame control information into internal flags format.
     96           *  Parameter is pointer to the frame.  NOTE!  If either the internal frame
     97           *  format *or* the specification changes, this macro will need to be modified.
     98           */
     99          #define INTERNAL_FCF_FLAGS(p)  ((((p)[1] >> 4) & 0x03) | ((p)[0] & 0x78))
    100          
    101          /*
    102           *  The radio replaces the actual FCS with different information.  This proprietary FCS is
    103           *  the same length as the original and includes:
    104           *    1) the RSSI value
    105           *    2) the average correlation value (used for LQI)
    106           *    3) a CRC passed bit
    107           *
    108           *  These macros decode the proprietary FCS.  The macro parameter is a pointer to the two byte FCS.
    109           */
    110          #define PROPRIETARY_FCS_RSSI(p)                 ((int8)((p)[0]))
    111          #define PROPRIETARY_FCS_CRC_OK(p)               ((p)[1] & PROPRIETARY_FCS_CRC_OK_BIT)
    112          #define PROPRIETARY_FCS_CORRELATION_VALUE(p)    ((p)[1] & ~PROPRIETARY_FCS_CRC_OK_BIT)
    113          
    114          
    115          /* ------------------------------------------------------------------------------------------------
    116           *                                       Global Variables
    117           * ------------------------------------------------------------------------------------------------
    118           */

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    119          uint8 macRxActive;
   \                     macRxActive:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    120          uint8 macRxFilter;
   \                     macRxFilter:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    121          uint8 macRxOutgoingAckFlag;
   \                     macRxOutgoingAckFlag:
   \   000000                DS 1
    122          
    123          
    124          /* ------------------------------------------------------------------------------------------------
    125           *                                       Local Constants
    126           * ------------------------------------------------------------------------------------------------
    127           */

   \                                 In segment CODE_C, align 1
    128          static const uint8 CODE macRxAddrLen[] =
   \                     ??macRxAddrLen:
   \   000000   00BE040A     DB 0, 190, 4, 10
    129          {
    130            0,                                                /* no address */
    131            DUMMY_LEN,                                        /* reserved */
    132            MAC_PAN_ID_FIELD_LEN + MAC_SHORT_ADDR_FIELD_LEN,  /* short address + pan id */
    133            MAC_PAN_ID_FIELD_LEN + MAC_EXT_ADDR_FIELD_LEN     /* extended address + pan id */
    134          };
    135          
    136          
    137          /* ------------------------------------------------------------------------------------------------
    138           *                                       Local Prototypes
    139           * ------------------------------------------------------------------------------------------------
    140           */
    141          static void rxHaltCleanupFinalStep(void);
    142          
    143          static void rxStartIsr(void);
    144          static void rxAddrIsr(void);
    145          static void rxPayloadIsr(void);
    146          static void rxDiscardIsr(void);
    147          static void rxFcsIsr(void);
    148          
    149          static void rxPrepPayload(void);
    150          static void rxDiscardFrame(void);
    151          static void rxDone(void);
    152          static void rxPostRxUpdates(void);
    153          
    154          
    155          /* ------------------------------------------------------------------------------------------------
    156           *                                         Local Variables
    157           * ------------------------------------------------------------------------------------------------
    158           */

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    159          static void    (* pFuncRxState)(void);
   \                     ??pFuncRxState:
   \   000000                DS 3

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    160          static macRx_t  * pRxBuf;
   \                     ??pRxBuf:
   \   000000                DS 2
    161          

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    162          static uint8  rxBuf[MAC_PHY_PHR_LEN + MAC_FCF_FIELD_LEN + MAC_SEQ_NUM_FIELD_LEN];
   \                     ??rxBuf:
   \   000000                DS 4

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    163          static uint8  rxUnreadLen;
   \                     ??rxUnreadLen:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    164          static uint8  rxNextLen;
   \                     ??rxNextLen:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    165          static uint8  rxPayloadLen;
   \                     ??rxPayloadLen:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    166          static uint8  rxFilter;
   \                     ??rxFilter:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    167          static uint8  rxPromiscuousMode;
   \                     ??rxPromiscuousMode:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    168          static uint8  rxIsrActiveFlag;
   \                     ??rxIsrActiveFlag:
   \   000000                DS 1

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    169          static uint8  rxResetFlag;
   \                     ??rxResetFlag:
   \   000000                DS 1
    170          
    171          
    172          /**************************************************************************************************
    173           * @fn          macRxInit
    174           *
    175           * @brief       Initialize receive variable states.
    176           *
    177           * @param       none
    178           *
    179           * @return      none
    180           **************************************************************************************************
    181           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    182          void macRxInit(void)
   \                     macRxInit:
    183          {
   \   000000   C082         PUSH    DPL
   \   000002   C083         PUSH    DPH
   \   000004                ; Saved register size: 2
   \   000004                ; Auto size: 0
    184            macRxFilter          = RX_FILTER_OFF;
   \   000004   E4           CLR     A
   \   000005   90....       MOV     DPTR,#macRxFilter
   \   000008   F0           MOVX    @DPTR,A
    185            rxPromiscuousMode    = PROMISCUOUS_MODE_OFF;
   \   000009   90....       MOV     DPTR,#??rxPromiscuousMode
   \   00000C   F0           MOVX    @DPTR,A
    186            pRxBuf               = NULL; /* required for macRxReset() to function correctly */
   \   00000D   90....       MOV     DPTR,#??pRxBuf
   \   000010   F0           MOVX    @DPTR,A
   \   000011   A3           INC     DPTR
   \   000012   F0           MOVX    @DPTR,A
    187            macRxActive          = MAC_RX_ACTIVE_NO_ACTIVITY;
   \   000013   90....       MOV     DPTR,#macRxActive
   \   000016   12....       LCALL   ?Subroutine1 & 0xFFFF
    188            pFuncRxState         = &rxStartIsr;
    189            macRxOutgoingAckFlag = 0;
   \                     ??CrossCallReturnLabel_2:
   \   000019   E4           CLR     A
   \   00001A   90....       MOV     DPTR,#macRxOutgoingAckFlag
   \   00001D   F0           MOVX    @DPTR,A
    190            rxIsrActiveFlag      = 0;
   \   00001E   90....       MOV     DPTR,#??rxIsrActiveFlag
   \   000021   F0           MOVX    @DPTR,A

⌨️ 快捷键说明

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