📄 mac_tx.lst
字号:
\ 000012 75..00 MOV ?V0 + 1,#0x0
\ 000015 90.... MOV DPTR,#macTxBe
\ 000018 E0 MOVX A,@DPTR
\ 000019 78.. MOV R0,#?V0 + 0
\ 00001B 12.... LCALL ?S_SHL
\ 00001E E5.. MOV A,?V0 + 0
\ 000020 14 DEC A
\ 000021 5A ANL A,R2
\ 000022 90.... MOV DPTR,#macTxCsmaBackoffDelay
\ 000025 F0 MOVX @DPTR,A
277
278 if (macTxType == MAC_TX_TYPE_SLOTTED_CSMA)
\ 000026 90.... MOV DPTR,#macTxType
\ 000029 E0 MOVX A,@DPTR
\ 00002A 7007 JNZ ??txCsmaPrep_1
279 {
280 MAC_RADIO_TX_PREP_CSMA_SLOTTED();
\ 00002C ; Setup parameters for call to function macCspTxPrepCsmaSlotted
\ 00002C 90.... MOV DPTR,#(macCspTxPrepCsmaSlotted & 0xffff)
\ 00002F 74.. MOV A,#((macCspTxPrepCsmaSlotted >> 16) & 0xff)
\ 000031 8005 SJMP ??txCsmaPrep_2
281 }
282 else
283 {
284 MAC_RADIO_TX_PREP_CSMA_UNSLOTTED();
\ ??txCsmaPrep_1:
\ 000033 ; Setup parameters for call to function macCspTxPrepCsmaUnslotted
\ 000033 90.... MOV DPTR,#(macCspTxPrepCsmaUnslotted & 0xffff)
\ 000036 74.. MOV A,#((macCspTxPrepCsmaUnslotted >> 16) & 0xff)
\ ??txCsmaPrep_2:
\ 000038 12.... LCALL ?BCALL ; Banked call to: DPTR()
285 }
286 }
\ 00003B 7F02 MOV R7,#0x2
\ 00003D 02.... LJMP ?BANKED_LEAVE_XDATA
287
288
289 /*=================================================================================================
290 * @fn txGo
291 *
292 * @brief Start a transmit going.
293 *
294 * @param none
295 *
296 * @return none
297 *=================================================================================================
298 */
\ In segment BANKED_CODE, align 1, keep-with-next
299 static void txGo(void)
\ ??txGo:
300 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
301 /*
302 * If execution has reached this point, any transmitted ACK has long since completed. It is
303 * possible though that there is still a pending callback. If so, it is irrelevant and needs to
304 * be canceled at this point.
305 */
306 MAC_RADIO_CANCEL_ACK_TX_DONE_CALLBACK();
\ 000004 ; Setup parameters for call to function macMcuAndRFIM
\ 000004 79EF MOV R1,#-0x11
\ 000006 90.... MOV DPTR,#(macMcuAndRFIM & 0xffff)
\ 000009 74.. MOV A,#((macMcuAndRFIM >> 16) & 0xff)
\ 00000B 12.... LCALL ?BCALL ; Banked call to: DPTR()
307
308 /* based on type of transmit, call the correct "go" functionality */
309 if (macTxType == MAC_TX_TYPE_SLOTTED)
\ 00000E 90.... MOV DPTR,#macTxType
\ 000011 E0 MOVX A,@DPTR
\ 000012 6402 XRL A,#0x2
\ 000014 7007 JNZ ??txGo_1
310 {
311 MAC_RADIO_TX_GO_SLOTTED();
\ 000016 ; Setup parameters for call to function macCspTxGoSlotted
\ 000016 90.... MOV DPTR,#(macCspTxGoSlotted & 0xffff)
\ 000019 74.. MOV A,#((macCspTxGoSlotted >> 16) & 0xff)
\ 00001B 8005 SJMP ??txGo_2
312 }
313 else
314 {
315 txCsmaGo();
\ ??txGo_1:
\ 00001D ; Setup parameters for call to function txCsmaGo
\ 00001D 90.... MOV DPTR,#(??txCsmaGo & 0xffff)
\ 000020 74.. MOV A,#((??txCsmaGo >> 16) & 0xff)
\ ??txGo_2:
\ 000022 80.. SJMP ?Subroutine5
316 }
317 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000003 80.. SJMP ??Subroutine3_0
318
319
320 /*=================================================================================================
321 * @fn txCsmaGo
322 *
323 * @brief Start a CSMA transmit going.
324 *
325 * @param none
326 *
327 * @return none
328 *=================================================================================================
329 */
\ In segment BANKED_CODE, align 1, keep-with-next
330 static void txCsmaGo(void)
\ ??txCsmaGo:
331 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
332 if (macTxType == MAC_TX_TYPE_SLOTTED_CSMA)
\ 000004 90.... MOV DPTR,#macTxType
\ 000007 E0 MOVX A,@DPTR
\ 000008 701B JNZ ??txCsmaGo_1
333 {
334 if (macTxCsmaBackoffDelay >= macDataTxTimeAvailable())
\ 00000A ; Setup parameters for call to function macDataTxTimeAvailable
\ 00000A 90.... MOV DPTR,#(macDataTxTimeAvailable & 0xffff)
\ 00000D 74.. MOV A,#((macDataTxTimeAvailable >> 16) & 0xff)
\ 00000F 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000012 E9 MOV A,R1
\ 000013 FA MOV R2,A
\ 000014 90.... MOV DPTR,#macTxCsmaBackoffDelay
\ 000017 E0 MOVX A,@DPTR
\ 000018 C3 CLR C
\ 000019 9A SUBB A,R2
\ 00001A 4009 JC ??txCsmaGo_1
335 {
336 txComplete(MAC_NO_TIME);
\ 00001C ; Setup parameters for call to function txComplete
\ 00001C 791C MOV R1,#0x1c
\ 00001E 90.... MOV DPTR,#(??txComplete & 0xffff)
\ 000021 74.. MOV A,#((??txComplete >> 16) & 0xff)
\ 000023 8005 SJMP ??txCsmaGo_2
337 return;
338 }
339 }
340
341 MAC_RADIO_TX_GO_CSMA();
\ ??txCsmaGo_1:
\ 000025 ; Setup parameters for call to function macCspTxGoCsma
\ 000025 90.... MOV DPTR,#(macCspTxGoCsma & 0xffff)
\ 000028 74.. MOV A,#((macCspTxGoCsma >> 16) & 0xff)
\ ??txCsmaGo_2:
\ 00002A 80.. SJMP ?Subroutine5
342 }
343
344
345 /**************************************************************************************************
346 * @fn macTxFrameRetransmit
347 *
348 * @brief Retransmit the last frame.
349 *
350 * @param none
351 *
352 * @return none
353 **************************************************************************************************
354 */
\ In segment BANKED_CODE, align 1, keep-with-next
355 void macTxFrameRetransmit(void)
\ macTxFrameRetransmit:
356 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
357 txRetransmitFlag = 1;
\ 000004 7401 MOV A,#0x1
\ 000006 90.... MOV DPTR,#??txRetransmitFlag
\ 000009 F0 MOVX @DPTR,A
358 macTxFrame(macTxType);
\ 00000A ; Setup parameters for call to function macTxFrame
\ 00000A 90.... MOV DPTR,#macTxType
\ 00000D E0 MOVX A,@DPTR
\ 00000E F9 MOV R1,A
\ 00000F 90.... MOV DPTR,#(macTxFrame & 0xffff)
\ 000012 74.. MOV A,#((macTxFrame >> 16) & 0xff)
\ 000014 REQUIRE ?Subroutine5
\ 000014 ; // Fall through to label ?Subroutine5
359 }
360
361
362 /**************************************************************************************************
363 * @fn macTxStartQueuedFrame
364 *
365 * @brief See if there is a queued frame waiting to transmit. If so, initiate
366 * the transmit now.
367 *
368 * @param none
369 *
370 * @return none
371 **************************************************************************************************
372 */
\ In segment BANKED_CODE, align 1, keep-with-next
373 void macTxStartQueuedFrame(void)
\ macTxStartQueuedFrame:
374 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
375 halIntState_t s;
376
377 MAC_ASSERT(!macRxActive && !macRxOutgoingAckFlag); /* queued frames should not transmit in middle of a receive */
\ 000004 90.... MOV DPTR,#macRxActive
\ 000007 E0 MOVX A,@DPTR
\ 000008 7006 JNZ ??macTxStartQueuedFrame_0
\ 00000A 90.... MOV DPTR,#macRxOutgoingAckFlag
\ 00000D E0 MOVX A,@DPTR
\ 00000E 6008 JZ ??macTxStartQueuedFrame_1
\ ??macTxStartQueuedFrame_0:
\ 000010 ; Setup parameters for call to function halAssertHandler
\ 000010 90.... MOV DPTR,#(halAssertHandler & 0xffff)
\ 000013 74.. MOV A,#((halAssertHandler >> 16) & 0xff)
\ 000015 12.... LCALL ?BCALL ; Banked call to: DPTR()
378
379 /*
380 * Critical sections around the state change prevents any sort of race condition
381 * with macTxFrame(). This guarantees function txGo() will only be be called once.
382 */
383 HAL_ENTER_CRITICAL_SECTION(s);
\ ??macTxStartQueuedFrame_1:
\ 000018 A2AF MOV C,0xa8.7
\ 00001A E4 CLR A
\ 00001B 92E0 MOV 0xE0 /* A */.0,C
\ 00001D C2AF CLR 0xa8.7
384 if (macTxActive == MAC_TX_ACTIVE_QUEUED)
\ 00001F 90.... MOV DPTR,#macTxActive
\ 000022 E0 MOVX A,@DPTR
\ 000023 6402 XRL A,#0x2
\ 000025 700A JNZ ??macTxStartQueuedFrame_2
385 {
386 macTxActive = MAC_TX_ACTIVE_GO;
\ 000027 7483 MOV A,#-0x7d
\ 000029 12.... LCALL ?Subroutine2 & 0xFFFF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -