mac_tx.lst
来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 1,206 行 · 第 1/5 页
LST
1,206 行
\ 000045 90.... MOV DPTR,#(halAssertHandler & 0xffff)
\ 000048 74.. MOV A,#((halAssertHandler >> 16) & 0xff)
\ 00004A 12.... LCALL ?BCALL ; Banked call to: DPTR()
189
190 nb = 0;
\ ??macTxFrame_6:
\ 00004D E4 CLR A
\ 00004E 90.... MOV DPTR,#??nb
\ 000051 F0 MOVX @DPTR,A
191 macTxBe = (pMacDataTx->internal.txOptions & MAC_TXOPTION_ALT_BE) ? macPib.altBe : macPib.minBe;
\ 000052 90.... MOV DPTR,#pMacDataTx
\ 000055 E0 MOVX A,@DPTR
\ 000056 240E ADD A,#0xe
\ 000058 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_2:
\ 00005B A2E6 MOV C,0xE0 /* A */.6
\ 00005D 5005 JNC ??macTxFrame_7
\ 00005F 90.... MOV DPTR,#(macPib + 58)
\ 000062 8003 SJMP ??macTxFrame_8
\ ??macTxFrame_7:
\ 000064 90.... MOV DPTR,#(macPib + 28)
\ ??macTxFrame_8:
\ 000067 E0 MOVX A,@DPTR
\ 000068 FA MOV R2,A
\ 000069 EA MOV A,R2
\ 00006A 90.... MOV DPTR,#macTxBe
\ 00006D F0 MOVX @DPTR,A
192
193 if ((macTxType == MAC_TX_TYPE_SLOTTED_CSMA) && (macPib.battLifeExt))
\ 00006E 90.... MOV DPTR,#macTxType
\ 000071 E0 MOVX A,@DPTR
\ 000072 7013 JNZ ??macTxFrame_9
\ 000074 90.... MOV DPTR,#(macPib + 3)
\ 000077 E0 MOVX A,@DPTR
\ 000078 600D JZ ??macTxFrame_9
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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?