📄 mac_rx.s51
字号:
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 164 static uint8 rxNextLen;
??rxNextLen:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 165 static uint8 rxPayloadLen;
??rxPayloadLen:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 166 static uint8 rxFilter;
??rxFilter:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 167 static uint8 rxPromiscuousMode;
??rxPromiscuousMode:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 168 static uint8 rxIsrActiveFlag;
??rxIsrActiveFlag:
DS 1
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 169 static uint8 rxResetFlag;
??rxResetFlag:
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 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 182 void macRxInit(void)
macRxInit:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function macRxInit
// 183 {
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
// 184 macRxFilter = RX_FILTER_OFF;
CLR A
MOV DPTR,#macRxFilter
MOVX @DPTR,A
// 185 rxPromiscuousMode = PROMISCUOUS_MODE_OFF;
MOV DPTR,#??rxPromiscuousMode
MOVX @DPTR,A
// 186 pRxBuf = NULL; /* required for macRxReset() to function correctly */
MOV DPTR,#??pRxBuf
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 187 macRxActive = MAC_RX_ACTIVE_NO_ACTIVITY;
MOV DPTR,#macRxActive
LCALL ?Subroutine1 & 0xFFFF
// 188 pFuncRxState = &rxStartIsr;
// 189 macRxOutgoingAckFlag = 0;
??CrossCallReturnLabel_2:
CLR A
MOV DPTR,#macRxOutgoingAckFlag
MOVX @DPTR,A
// 190 rxIsrActiveFlag = 0;
MOV DPTR,#??rxIsrActiveFlag
MOVX @DPTR,A
// 191 rxResetFlag = 0;
MOV DPTR,#??rxResetFlag
MOVX @DPTR,A
// 192 }
LJMP ??Subroutine20_0 & 0xFFFF
CFI EndBlock cfiBlock0
// 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 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 205 void macRxRadioPowerUpInit(void)
macRxRadioPowerUpInit:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function macRxRadioPowerUpInit
// 206 {
FUNCALL macRxRadioPowerUpInit, macMcuOrRFIM
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
// 207 /* set threshold at initial value */
// 208 MAC_RADIO_SET_RX_THRESHOLD(RX_THRESHOLD_START_LEN);
MOV A,#0x5
MOV DPTR,#-0x20b1
MOVX @DPTR,A
// 209
// 210 /* clear any accidental threshold interrupt that happened as part of power up sequence */
// 211 MAC_RADIO_CLEAR_RX_THRESHOLD_INTERRUPT_FLAG();
MOV 0xe9,#-0x21
// 212
// 213 /* enable threshold interrupts */
// 214 MAC_RADIO_ENABLE_RX_THRESHOLD_INTERRUPT();
; Setup parameters for call to function macMcuOrRFIM
MOV R1,#0x20
MOV DPTR,#(macMcuOrRFIM & 0xffff)
MOV A,#((macMcuOrRFIM >> 16) & 0xff)
LJMP ?Subroutine20 & 0xFFFF
CFI EndBlock cfiBlock1
// 215 }
// 216
// 217
// 218 /**************************************************************************************************
// 219 * @fn macRxTxReset
// 220 *
// 221 * @brief Reset the receive state.
// 222 *
// 223 * @param none
// 224 *
// 225 * @return none
// 226 **************************************************************************************************
// 227 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 228 void macRxTxReset(void)
macRxTxReset:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function macRxTxReset
// 229 {
FUNCALL macRxTxReset, macRxHardDisable
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL macRxTxReset, macRxPromiscuousMode
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
// 230 /* forces receiver off, cleans up by calling macRxHaltCleanup() and macTxHaltCleanup() */
// 231 macRxHardDisable();
; Setup parameters for call to function macRxHardDisable
MOV DPTR,#(macRxHardDisable & 0xffff)
MOV A,#((macRxHardDisable >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 232
// 233 /*
// 234 * Note : transmit does not require any reset logic
// 235 * beyond what macRxHardDisable() provides.
// 236 */
// 237
// 238 /* restore deault filter mode to off */
// 239 macRxFilter = RX_FILTER_OFF;
CLR A
MOV DPTR,#macRxFilter
MOVX @DPTR,A
// 240
// 241 /* return promiscuous mode to default off state */
// 242 macRxPromiscuousMode(MAC_PROMISCUOUS_MODE_OFF);
; Setup parameters for call to function macRxPromiscuousMode
MOV R1,A
MOV DPTR,#(macRxPromiscuousMode & 0xffff)
MOV A,#((macRxPromiscuousMode >> 16) & 0xff)
SJMP ?Subroutine20
CFI EndBlock cfiBlock2
// 243 }
// 244
// 245
// 246 /**************************************************************************************************
// 247 * @fn macRxHaltCleanup
// 248 *
// 249 * @brief Cleanup up the receive logic after receiver is forced off.
// 250 *
// 251 * @param none
// 252 *
// 253 * @return none
// 254 **************************************************************************************************
// 255 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 256 void macRxHaltCleanup(void)
macRxHaltCleanup:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function macRxHaltCleanup
// 257 {
FUNCALL macRxHaltCleanup, ??rxHaltCleanupFinalStep
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
// 258 rxResetFlag = 1;
MOV A,#0x1
MOV DPTR,#??rxResetFlag
MOVX @DPTR,A
// 259 if (!rxIsrActiveFlag)
MOV DPTR,#??rxIsrActiveFlag
MOVX A,@DPTR
JNZ ??macRxHaltCleanup_0
// 260 {
// 261 rxHaltCleanupFinalStep();
; Setup parameters for call to function rxHaltCleanupFinalStep
MOV DPTR,#(??rxHaltCleanupFinalStep & 0xffff)
MOV A,#((??rxHaltCleanupFinalStep >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 262 rxResetFlag = 0;
CLR A
MOV DPTR,#??rxResetFlag
MOVX @DPTR,A
// 263 }
// 264 }
??macRxHaltCleanup_0:
SJMP ??Subroutine20_0
CFI EndBlock cfiBlock3
// 265
// 266
// 267 /*=================================================================================================
// 268 * @fn rxHaltCleanupFinalStep
// 269 *
// 270 * @brief Required cleanup if receiver is halted in the middle of a receive.
// 271 *
// 272 * @param none
// 273 *
// 274 * @return none
// 275 *=================================================================================================
// 276 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 277 static void rxHaltCleanupFinalStep(void)
??rxHaltCleanupFinalStep:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function ??rxHaltCleanupFinalStep
// 278 {
FUNCALL ??rxHaltCleanupFinalStep, macMcuAndRFIM
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??rxHaltCleanupFinalStep, macDataRxMemFree
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??rxHaltCleanupFinalStep, ??rxPostRxUpdates
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
// 279 /* cancel any upcoming ACK transmit complete callback */
// 280 MAC_RADIO_CANCEL_ACK_TX_DONE_CALLBACK();
; Setup parameters for call to function macMcuAndRFIM
MOV R1,#-0x11
MOV DPTR,#(macMcuAndRFIM & 0xffff)
MOV A,#((macMcuAndRFIM >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 281
// 282 /* set start of frame threshold */
// 283 MAC_RADIO_SET_RX_THRESHOLD(RX_THRESHOLD_START_LEN);
MOV A,#0x5
MOV DPTR,#-0x20b1
MOVX @DPTR,A
// 284
// 285 /* flush the receive FIFO */
// 286 MAC_RADIO_FLUSH_RX_FIFO();
MOV 0xe1,#-0x1a
MOV 0xe1,#-0x1a
// 287
// 288 /* clear any receive interrupt that happened to squeak through */
// 289 MAC_RADIO_CLEAR_RX_THRESHOLD_INTERRUPT_FLAG();
MOV 0xe9,#-0x21
// 290
// 291 /* if data buffer has been allocated, free it */
// 292 if (pRxBuf != NULL)
MOV DPTR,#??pRxBuf
MOVX A,@DPTR
JNZ ??rxHaltCleanupFinalStep_1
INC DPTR
MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -