📄 mac_rx.lst
字号:
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
191 rxResetFlag = 0;
\ 000022 90.... MOV DPTR,#??rxResetFlag
\ 000025 F0 MOVX @DPTR,A
192 }
\ 000026 02.... LJMP ??Subroutine20_0 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine20:
\ 000000 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ ??Subroutine20_0:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_36:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine16:
\ 000000 F0 MOVX @DPTR,A
\ 000001 90.... MOV DPTR,#??pFuncRxState
\ 000004 74.. MOV A,#(??rxStartIsr & 0xff)
\ 000006 F0 MOVX @DPTR,A
\ 000007 A3 INC DPTR
\ 000008 74.. MOV A,#((??rxStartIsr >> 8) & 0xff)
\ 00000A F0 MOVX @DPTR,A
\ 00000B A3 INC DPTR
\ 00000C 74.. MOV A,#((??rxStartIsr >> 16) & 0xff)
\ 00000E F0 MOVX @DPTR,A
\ 00000F 22 RET
193
194
195 /**************************************************************************************************
196 * @fn macRxRadioPowerUpInit
197 *
198 * @brief Initialization for after radio first powers up.
199 *
200 * @param none
201 *
202 * @return none
203 **************************************************************************************************
204 */
\ In segment BANKED_CODE, align 1, keep-with-next
205 void macRxRadioPowerUpInit(void)
\ macRxRadioPowerUpInit:
206 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -