📄 mac_tx.lst
字号:
194 {
195 macTxBe = MIN(2, macTxBe);
\ 00007A 90.... MOV DPTR,#macTxBe
\ 00007D E0 MOVX A,@DPTR
\ 00007E C3 CLR C
\ 00007F 9403 SUBB A,#0x3
\ 000081 4002 JC ??macTxFrame_10
\ 000083 7A02 MOV R2,#0x2
\ ??macTxFrame_10:
\ 000085 EA MOV A,R2
\ 000086 F0 MOVX @DPTR,A
196 }
197
198 txCsmaPrep();
\ ??macTxFrame_9:
\ 000087 ; Setup parameters for call to function txCsmaPrep
\ 000087 90.... MOV DPTR,#(??txCsmaPrep & 0xffff)
\ 00008A 74.. MOV A,#((??txCsmaPrep >> 16) & 0xff)
\ ??macTxFrame_5:
\ 00008C 12.... LCALL ?BCALL ; Banked call to: DPTR()
199 }
200
201 /*-------------------------------------------------------------------------------
202 * Load transmit FIFO unless this is a retransmit. No need to write
203 * the FIFO again in that case.
204 */
205 if (!txRetransmitFlag)
\ 00008F 90.... MOV DPTR,#??txRetransmitFlag
\ 000092 E0 MOVX A,@DPTR
\ 000093 7067 JNZ ??macTxFrame_11
206 {
207 uint8 * p;
208 uint8 lenMhrMsdu;
209
210 MAC_ASSERT(pMacDataTx != NULL); /* must have data to transmit */
\ 000095 90.... MOV DPTR,#pMacDataTx
\ 000098 E0 MOVX A,@DPTR
\ 000099 7002 JNZ ??macTxFrame_12
\ 00009B A3 INC DPTR
\ 00009C E0 MOVX A,@DPTR
\ ??macTxFrame_12:
\ 00009D 7008 JNZ ??macTxFrame_13
\ 00009F ; Setup parameters for call to function halAssertHandler
\ 00009F 90.... MOV DPTR,#(halAssertHandler & 0xffff)
\ 0000A2 74.. MOV A,#((halAssertHandler >> 16) & 0xff)
\ 0000A4 12.... LCALL ?BCALL ; Banked call to: DPTR()
211
212 /* save needed parameters */
213 txAckReq = MAC_ACK_REQUEST(pMacDataTx->msdu.p);
\ ??macTxFrame_13:
\ 0000A7 90.... MOV DPTR,#pMacDataTx
\ 0000AA E0 MOVX A,@DPTR
\ 0000AB 2402 ADD A,#0x2
\ 0000AD 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_3:
\ 0000B0 FA MOV R2,A
\ 0000B1 A3 INC DPTR
\ 0000B2 E0 MOVX A,@DPTR
\ 0000B3 F583 MOV DPH,A
\ 0000B5 8A82 MOV DPL,R2
\ 0000B7 E0 MOVX A,@DPTR
\ 0000B8 5420 ANL A,#0x20
\ 0000BA 90.... MOV DPTR,#??txAckReq
\ 0000BD F0 MOVX @DPTR,A
214 txSeqn = MAC_SEQ_NUMBER(pMacDataTx->msdu.p);
\ 0000BE 8882 MOV DPL,R0
\ 0000C0 8983 MOV DPH,R1
\ 0000C2 A3 INC DPTR
\ 0000C3 E0 MOVX A,@DPTR
\ 0000C4 F583 MOV DPH,A
\ 0000C6 8A82 MOV DPL,R2
\ 0000C8 A3 INC DPTR
\ 0000C9 A3 INC DPTR
\ 0000CA E0 MOVX A,@DPTR
\ 0000CB 90.... MOV DPTR,#??txSeqn
\ 0000CE F0 MOVX @DPTR,A
215
216 /* set length of frame (note: use of term msdu is a misnomer, here it's actually mhr + msdu) */
217 lenMhrMsdu = pMacDataTx->msdu.len;
\ 0000CF 12.... LCALL ?Subroutine0 & 0xFFFF
\ ??CrossCallReturnLabel_0:
\ 0000D2 E0 MOVX A,@DPTR
\ 0000D3 FA MOV R2,A
218
219 /* calling code guarantees an unused prepended byte */
220 p = pMacDataTx->msdu.p - PREPENDED_BYTE_LEN;
\ 0000D4 8882 MOV DPL,R0
\ 0000D6 8983 MOV DPH,R1
\ 0000D8 E0 MOVX A,@DPTR
\ 0000D9 24FF ADD A,#-0x1
\ 0000DB F8 MOV R0,A
\ 0000DC A3 INC DPTR
\ 0000DD E0 MOVX A,@DPTR
\ 0000DE 34FF ADDC A,#-0x1
\ 0000E0 F9 MOV R1,A
\ 0000E1 8882 MOV DPL,R0
\ 0000E3 8983 MOV DPH,R1
221
222 /* first byte of buffer is length of MPDU */
223 *p = lenMhrMsdu + MFR_LEN;
\ 0000E5 7402 MOV A,#0x2
\ 0000E7 2A ADD A,R2
\ 0000E8 F0 MOVX @DPTR,A
224
225 /*
226 * Flush the TX FIFO. This is necessary in case the previous transmit was never
227 * actually sent (e.g. CSMA failed without strobing TXON). If bytes are written to
228 * the FIFO but not transmitted, they remain in the FIFO to be transmitted whenever
229 * a strobe of TXON does happen.
230 */
231 MAC_RADIO_FLUSH_TX_FIFO();
\ 0000E9 75E1E7 MOV 0xe1,#-0x19
232
233 /* write bytes to FIFO, prepended byte is included, MFR is not (it's generated by hardware) */
234 MAC_RADIO_WRITE_TX_FIFO(p, PREPENDED_BYTE_LEN + lenMhrMsdu);
\ 0000EC ; Setup parameters for call to function macMemWriteTxFifo
\ 0000EC 7401 MOV A,#0x1
\ 0000EE 2A ADD A,R2
\ 0000EF F9 MOV R1,A
\ 0000F0 AA82 MOV R2,DPL
\ 0000F2 AB83 MOV R3,DPH
\ 0000F4 90.... MOV DPTR,#(macMemWriteTxFifo & 0xffff)
\ 0000F7 74.. MOV A,#((macMemWriteTxFifo >> 16) & 0xff)
\ 0000F9 12.... LCALL ?BCALL ; Banked call to: DPTR()
235 }
236
237 /*-------------------------------------------------------------------------------
238 * If not receiving, start the transmit. If receive is active
239 * queue up the transmit.
240 *
241 * Critical sections around the state change prevents any sort of race condition
242 * with macTxStartQueuedFrame(). This guarantees function txGo() will only be
243 * called once.
244 */
245 {
246 halIntState_t s;
247
248 HAL_ENTER_CRITICAL_SECTION(s);
\ ??macTxFrame_11:
\ 0000FC A2AF MOV C,0xa8.7
\ 0000FE E4 CLR A
\ 0000FF 92E0 MOV 0xE0 /* A */.0,C
\ 000101 C2AF CLR 0xa8.7
249 if (!macRxActive && !macRxOutgoingAckFlag)
\ 000103 90.... MOV DPTR,#macRxActive
\ 000106 E0 MOVX A,@DPTR
\ 000107 7011 JNZ ??macTxFrame_14
\ 000109 90.... MOV DPTR,#macRxOutgoingAckFlag
\ 00010C E0 MOVX A,@DPTR
\ 00010D 700B JNZ ??macTxFrame_14
250 {
251 macTxActive = MAC_TX_ACTIVE_GO;
\ 00010F 7483 MOV A,#-0x7d
\ 000111 90.... MOV DPTR,#macTxActive
\ 000114 12.... LCALL ?Subroutine2 & 0xFFFF
252 HAL_EXIT_CRITICAL_SECTION(s);
253 txGo();
\ ??CrossCallReturnLabel_4:
\ 000117 02.... LJMP ??macTxFrame_2 & 0xFFFF
254 }
255 else
256 {
257 macTxActive = MAC_TX_ACTIVE_QUEUED;
\ ??macTxFrame_14:
\ 00011A 7402 MOV A,#0x2
\ 00011C 90.... MOV DPTR,#macTxActive
\ 00011F F0 MOVX @DPTR,A
258 HAL_EXIT_CRITICAL_SECTION(s);
\ 000120 92AF MOV 0xa8.7,C
\ ??macTxFrame_3:
\ 000122 02.... LJMP ?Subroutine4 & 0xFFFF
259 }
260 }
261 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 F8 MOV R0,A
\ 000001 A3 INC DPTR
\ 000002 E0 MOVX A,@DPTR
\ 000003 3400 ADDC A,#0x0
\ 000005 F9 MOV R1,A
\ 000006 8882 MOV DPL,R0
\ 000008 8983 MOV DPH,R1
\ 00000A E0 MOVX A,@DPTR
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 F0 MOVX @DPTR,A
\ 000001 92AF MOV 0xa8.7,C
\ 000003 ; Setup parameters for call to function txGo
\ 000003 ; Setup parameters for call to function txGo
\ 000003 90.... MOV DPTR,#(??txGo & 0xffff)
\ 000006 74.. MOV A,#((??txGo >> 16) & 0xff)
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine4:
\ 000000 7F01 MOV R7,#0x1
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 90.... MOV DPTR,#pMacDataTx
\ 000003 E0 MOVX A,@DPTR
\ 000004 FA MOV R2,A
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 F583 MOV DPH,A
\ 000009 8A82 MOV DPL,R2
\ 00000B A3 INC DPTR
\ 00000C A3 INC DPTR
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F 22 RET
262
263
264 /*=================================================================================================
265 * @fn txCsmaPrep
266 *
267 * @brief Prepare/initialize for a CSMA transmit.
268 *
269 * @param none
270 *
271 * @return none
272 *=================================================================================================
273 */
\ In segment BANKED_CODE, align 1, keep-with-next
274 static void txCsmaPrep(void)
\ ??txCsmaPrep:
275 {
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
276 macTxCsmaBackoffDelay = macRadioRandomByte() & ((1 << macTxBe) - 1);
\ 000005 ; Setup parameters for call to function macRadioRandomByte
\ 000005 90.... MOV DPTR,#(macRadioRandomByte & 0xffff)
\ 000008 74.. MOV A,#((macRadioRandomByte >> 16) & 0xff)
\ 00000A 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00000D E9 MOV A,R1
\ 00000E FA MOV R2,A
\ 00000F 75..01 MOV ?V0 + 0,#0x1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -