📄 mac_indirect_queue.s51
字号:
MOV DPH,A
MOVX A,@DPTR
JNZ ??miqSetRequested_1
INC DPTR
MOVX A,@DPTR
??miqSetRequested_1:
JZ ??miqSetRequested_2
// 350
// 351 // Create the transmission whn the first packet is requested
// 352 if (miqInfo.requestedCounter == 0) {
MOV DPTR,#(miqInfo + 2)
MOVX A,@DPTR
JNZ ??miqSetRequested_3
// 353 if (mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, miqTransmitRequestedPackets, NULL)) {
; Setup parameters for call to function mschAddTask
MOV ?V0 + 4,#(miqTransmitRequestedPackets & 0xff)
MOV ?V0 + 5,#((miqTransmitRequestedPackets >> 8) & 0xff)
MOV ?V0 + 6,#((miqTransmitRequestedPackets >> 16) & 0xff)
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 17)
MOV R2,#0x0
MOV A,R2
PUSH A
CFI CFA_SP SP+-1
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
CLR A
MOV R4,A
MOV R5,A
POP A
CFI CFA_SP SP+0
MOV R2,A
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 14)
MOV A,R1
JZ ??miqSetRequested_2
// 354 pPacket->requested = TRUE;
??miqSetRequested_3:
MOV A,#0x1
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX @DPTR,A
// 355 miqInfo.requestedCounter++;
MOV DPTR,#(miqInfo + 2)
MOVX A,@DPTR
INC A
MOVX @DPTR,A
SJMP ??miqSetRequested_2
// 356 }
// 357 } else {
// 358 pPacket->requested = TRUE;
// 359 miqInfo.requestedCounter++;
// 360 }
// 361 }
// 362
// 363
// 364 // Requested -> unrequested
// 365 } else {
// 366 DISABLE_GLOBAL_INT();
??miqSetRequested_0:
CLR 0xa8.7
// 367 if (!requested && pPacket->requested) {
MOV A,R1
JNZ ??miqSetRequested_4
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX A,@DPTR
JZ ??miqSetRequested_4
// 368 miqInfo.requestedCounter--;
MOV DPTR,#(miqInfo + 2)
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
// 369 pPacket->requested = FALSE;
CLR A
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX @DPTR,A
// 370 }
// 371 ENABLE_GLOBAL_INT();
??miqSetRequested_4:
SETB 0xa8.7
// 372 }
// 373 } // miqSetRequested
??miqSetRequested_2:
MOV R7,#0x7
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock5
// 374
// 375
// 376
// 377
// 378 //-------------------------------------------------------------------------------------------------------
// 379 // void miqUnrequestAll(void)
// 380 //
// 381 // DESCRIPTION:
// 382 // Unrequests all indirect packets
// 383 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 384 ROOT void miqUnrequestAll(void) {
miqUnrequestAll:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function miqUnrequestAll
FUNCALL miqUnrequestAll, miqSetRequested
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 385 UINT8 n;
// 386
// 387 for (n = 0; n < MAC_OPT_TX_POOL_SIZE; n++) {
MOV R6,#(pMtxPacketPool & 0xff)
MOV R7,#((pMtxPacketPool >> 8) & 0xff)
MOV ?V0 + 0,#0x6
// 388 miqSetRequested(&pMtxPacketPool[n], FALSE);
??miqUnrequestAll_0:
; Setup parameters for call to function miqSetRequested
MOV R1,#0x0
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL miqSetRequested
// 389 }
MOV A,R6
ADD A,#-0x6d
MOV R6,A
MOV A,R7
ADDC A,#0x0
MOV R7,A
DEC ?V0 + 0
MOV A,?V0 + 0
JNZ ??miqUnrequestAll_0
// 390 } // miqUnrequestAll
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock6
// 391
// 392
// 393
// 394
// 395 //-------------------------- -----------------------------------------------------------------------------
// 396 // void miqTransmitRequestedPackets(MAC_TASK_INFO *pTask)
// 397 //
// 398 // DESCRIPTION:
// 399 // This task runs in a loop (reschedules itself), and creates the mtxScheduleTransmission tasks for
// 400 // requested indirect packets. The task dies when there are no more requested packets.
// 401 //
// 402 // TASK DAYA:
// 403 // 0
// 404 //-------------------------------------------------------------------------------------------------------
// 405 void miqTransmitRequestedPackets(MAC_TASK_INFO *pTask) NEAR {
// 406 UINT8 index;
// 407 MAC_TX_PACKET *pIndirectPacket;
// 408
// 409 if (miqInfo.requestedCounter) {
// 410
// 411 // Search for requested packets
// 412 index = miqInfo.firstIndirectPacket;
// 413 while (index != NO_PACKET) {
// 414
// 415 // Activate the current packet if it has been requested
// 416 pIndirectPacket = &pMtxPacketPool[index];
// 417 DISABLE_GLOBAL_INT();
// 418 if (pIndirectPacket->requested) {
// 419 pIndirectPacket->transmissionStarted = TRUE;
// 420 ENABLE_GLOBAL_INT();
// 421
// 422 // The requested bit should still be set, because it will be checked before the packet is transmitted
// 423 if (!mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pIndirectPacket)) {
// 424 pIndirectPacket->transmissionStarted = FALSE;
// 425 }
// 426 break;
// 427 }
// 428 ENABLE_GLOBAL_INT();
// 429
// 430 // Move on to the next packet
// 431 index = pIndirectPacket->nextPacket;
// 432 }
// 433
// 434 // Re-schedule this task, so that it runs in a loop while there are packets to be transmitted
// 435 mschRescheduleTask(pTask, 0);
// 436
// 437 } else {
// 438 ENABLE_GLOBAL_INT();
// 439 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
// 440 }
// 441
// 442 } // miqTransmitRequestedPackets
// 443
// 444
// 445
// 446
// 447 //-------------------------------------------------------------------------------------------------------
// 448 // void miqTransmitRequestedPackets(ADDRESS *pDestAddr, BOOL isExtAddr)
// 449 //
// 450 // DESCRIPTION:
// 451 // Transmits a packet with no payload as a response to a data request when there are no pending
// 452 // packets in the queue.
// 453 //
// 454 // ARGUMENTS:
// 455 // ADDRESS *pDestAddr
// 456 // The destination address of the packet
// 457 // BOOL isExtAddr
// 458 // TRUE if pDestAddr points to an extended address
// 459 //
// 460 // RETURN VALUE:
// 461 // BOOL
// 462 // The packet transmission has been initiated
// 463 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 464 ROOT BOOL miqTransmitNoDataPacket(ADDRESS *pDestAddr, BOOL isExtAddr) {
miqTransmitNoDataPacket:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function miqTransmitNoDataPacket
FUNCALL miqTransmitNoDataPacket, mtxpReservePacket
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL miqTransmitNoDataPacket, mschReserveTask
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL miqTransmitNoDataPacket, mtxpReleasePacket
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL miqTransmitNoDataPacket, msupPrepareHeader
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL miqTransmitNoDataPacket, msupPrepareHeader
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL miqTransmitNoDataPacket, msupCalcPacketDuration
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL miqTransmitNoDataPacket, mschAddTask
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
MOV A,#-0xd
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 13)
; Saved register size: 13
; Auto size: 0
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV ?V0 + 2,R1
// 465 MAC_TX_PACKET *pPacket;
// 466 UINT8 taskNumber;
// 467 BYTE txOptions;
// 468
// 469 // Try to reserve a packet
// 470 pPacket = mtxpReservePacket();
; Setup parameters for call to function mtxpReservePacket
LCALL mtxpReservePacket
MOV ?V0 + 4,R2
MOV ?V0 + 5,R3
MOV R6,?V0 + 4
MOV R7,?V0 + 5
// 471 if (!pPacket) return FALSE;
MOV A,R6
JNZ ??miqTransmitNoDataPacket_0
MOV A,R7
??miqTransmitNoDataPacket_0:
JNZ ??miqTransmitNoDataPacket_1
??miqTransmitNoDataPacket_2:
MOV R1,#0x0
LJMP ??miqTransmitNoDataPacket_3
// 472
// 473 // Try to reserve a transmission task
// 474 taskNumber = mschReserveTask();
??miqTransmitNoDataPacket_1:
; Setup parameters for call to function mschReserveTask
LCALL mschReserveTask
MOV A,R1
MOV ?V0 + 3,A
// 475 if (taskNumber == NO_TASK) {
MOV A,#-0x1
XRL A,?V0 + 3
JNZ ??miqTransmitNoDataPacket_4
// 476 mtxpReleasePacket(pPacket);
; Setup parameters for call to function mtxpReleasePacket
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL mtxpReleasePacket
// 477 return FALSE;
SJMP ??miqTransmitNoDataPacket_2
// 478 }
// 479
// 480 // Set TX options
// 481 txOptions = TX_OPT_ACK_REQ;
// 482 #if MAC_OPT_SECURITY
// 483 //TBD: Include security here?
// 484 // if (securityEnable) {
// 485 // txOptions |= TX_OPT_SECURITY_ENABLE;
// 486 // }
// 487 #endif
// 488
// 489 // TX mode
// 490 pPacket->txMode = MTX_MODE_USE_CSMACA_BM | MTX_MODE_MAC_INTERNAL_BM;
??miqTransmitNoDataPacket_4:
MOV A,R6
ADD A,#-0x7a
MOV DPL,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -