📄 mac_tx.s51
字号:
CFI (cfiCond4) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond4) CFA_SP SP+0
CFI (cfiCond4) CFA_XSP16 add(XSP16, 9)
CFI Block cfiPicker5 Using cfiCommon1
CFI (cfiPicker5) NoFunction
CFI (cfiPicker5) Picker
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV R1,A
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
RET
CFI EndBlock cfiCond3
CFI EndBlock cfiCond4
CFI EndBlock cfiPicker5
// 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 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 274 static void txCsmaPrep(void)
??txCsmaPrep:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function ??txCsmaPrep
// 275 {
FUNCALL ??txCsmaPrep, macRadioRandomByte
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL ??txCsmaPrep, macCspTxPrepCsmaSlotted
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL ??txCsmaPrep, macCspTxPrepCsmaUnslotted
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
MOV A,#-0xa
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
// 276 macTxCsmaBackoffDelay = macRadioRandomByte() & ((1 << macTxBe) - 1);
; Setup parameters for call to function macRadioRandomByte
MOV DPTR,#(macRadioRandomByte & 0xffff)
MOV A,#((macRadioRandomByte >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R2,A
MOV ?V0 + 0,#0x1
MOV ?V0 + 1,#0x0
MOV DPTR,#macTxBe
MOVX A,@DPTR
MOV R0,#?V0 + 0
LCALL ?S_SHL
MOV A,?V0 + 0
DEC A
ANL A,R2
MOV DPTR,#macTxCsmaBackoffDelay
MOVX @DPTR,A
// 277
// 278 if (macTxType == MAC_TX_TYPE_SLOTTED_CSMA)
MOV DPTR,#macTxType
MOVX A,@DPTR
JNZ ??txCsmaPrep_1
// 279 {
// 280 MAC_RADIO_TX_PREP_CSMA_SLOTTED();
; Setup parameters for call to function macCspTxPrepCsmaSlotted
MOV DPTR,#(macCspTxPrepCsmaSlotted & 0xffff)
MOV A,#((macCspTxPrepCsmaSlotted >> 16) & 0xff)
SJMP ??txCsmaPrep_2
// 281 }
// 282 else
// 283 {
// 284 MAC_RADIO_TX_PREP_CSMA_UNSLOTTED();
??txCsmaPrep_1:
; Setup parameters for call to function macCspTxPrepCsmaUnslotted
MOV DPTR,#(macCspTxPrepCsmaUnslotted & 0xffff)
MOV A,#((macCspTxPrepCsmaUnslotted >> 16) & 0xff)
??txCsmaPrep_2:
LCALL ?BCALL ; Banked call to: DPTR()
// 285 }
// 286 }
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock6
// 287
// 288
// 289 /*=================================================================================================
// 290 * @fn txGo
// 291 *
// 292 * @brief Start a transmit going.
// 293 *
// 294 * @param none
// 295 *
// 296 * @return none
// 297 *=================================================================================================
// 298 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 299 static void txGo(void)
??txGo:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function ??txGo
// 300 {
FUNCALL ??txGo, macMcuAndRFIM
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??txGo, macCspTxGoSlotted
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??txGo, ??txCsmaGo
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
// 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();
; 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()
// 307
// 308 /* based on type of transmit, call the correct "go" functionality */
// 309 if (macTxType == MAC_TX_TYPE_SLOTTED)
MOV DPTR,#macTxType
MOVX A,@DPTR
XRL A,#0x2
JNZ ??txGo_1
// 310 {
// 311 MAC_RADIO_TX_GO_SLOTTED();
; Setup parameters for call to function macCspTxGoSlotted
MOV DPTR,#(macCspTxGoSlotted & 0xffff)
MOV A,#((macCspTxGoSlotted >> 16) & 0xff)
SJMP ??txGo_2
// 312 }
// 313 else
// 314 {
// 315 txCsmaGo();
??txGo_1:
; Setup parameters for call to function txCsmaGo
MOV DPTR,#(??txCsmaGo & 0xffff)
MOV A,#((??txCsmaGo >> 16) & 0xff)
??txGo_2:
SJMP ?Subroutine5
CFI EndBlock cfiBlock7
// 316 }
// 317 }
// 318
// 319
// 320 /*=================================================================================================
// 321 * @fn txCsmaGo
// 322 *
// 323 * @brief Start a CSMA transmit going.
// 324 *
// 325 * @param none
// 326 *
// 327 * @return none
// 328 *=================================================================================================
// 329 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 330 static void txCsmaGo(void)
??txCsmaGo:
CFI Block cfiBlock8 Using cfiCommon0
CFI Function ??txCsmaGo
// 331 {
FUNCALL ??txCsmaGo, macDataTxTimeAvailable
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??txCsmaGo, ??txComplete
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ??txCsmaGo, macCspTxGoCsma
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
// 332 if (macTxType == MAC_TX_TYPE_SLOTTED_CSMA)
MOV DPTR,#macTxType
MOVX A,@DPTR
JNZ ??txCsmaGo_1
// 333 {
// 334 if (macTxCsmaBackoffDelay >= macDataTxTimeAvailable())
; Setup parameters for call to function macDataTxTimeAvailable
MOV DPTR,#(macDataTxTimeAvailable & 0xffff)
MOV A,#((macDataTxTimeAvailable >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R2,A
MOV DPTR,#macTxCsmaBackoffDelay
MOVX A,@DPTR
CLR C
SUBB A,R2
JC ??txCsmaGo_1
// 335 {
// 336 txComplete(MAC_NO_TIME);
; Setup parameters for call to function txComplete
MOV R1,#0x1c
MOV DPTR,#(??txComplete & 0xffff)
MOV A,#((??txComplete >> 16) & 0xff)
SJMP ??txCsmaGo_2
// 337 return;
// 338 }
// 339 }
// 340
// 341 MAC_RADIO_TX_GO_CSMA();
??txCsmaGo_1:
; Setup parameters for call to function macCspTxGoCsma
MOV DPTR,#(macCspTxGoCsma & 0xffff)
MOV A,#((macCspTxGoCsma >> 16) & 0xff)
??txCsmaGo_2:
SJMP ?Subroutine5
CFI EndBlock cfiBlock8
// 342 }
// 343
// 344
// 345 /**************************************************************************************************
// 346 * @fn macTxFrameRetransmit
// 347 *
// 348 * @brief Retransmit the last frame.
// 349 *
// 350 * @param none
// 351 *
// 352 * @return none
// 353 **************************************************************************************************
// 354 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 355 void macTxFrameRetransmit(void)
macTxFrameRetransmit:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function macTxFrameRetransmit
// 356 {
FUNCALL macTxFrameRetransmit, macTxFrame
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
// 357 txRetransmitFlag = 1;
MOV A,#0x1
MOV DPTR,#??txRetransmitFlag
MOVX @DPTR,A
// 358 macTxFrame(macTxType);
; Setup parameters for call to function macTxFrame
MOV DPTR,#macTxType
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(macTxFrame & 0xffff)
MOV A,#((macTxFrame >> 16) & 0xff)
CFI EndBlock cfiBlock9
REQUIRE ?Subroutine5
; // Fall through to label ?Subroutine5
// 359 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine5:
CFI Block cfiBlock10 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??Subroutine3_0
CFI EndBlock cfiBlock10
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine3:
CFI Block cfiBlock11 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CLR A
MOV DPTR,#macTxActive
MOVX @DPTR,A
MOV DPTR,#??txRetransmitFlag
MOVX @DPTR,A
??Subroutine3_0:
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock11
// 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 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -