mac_radio.lst
来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 1,202 行 · 第 1/5 页
LST
1,202 行
411 * @param none
412 *
413 * @return none
414 **************************************************************************************************
415 */
\ In segment BANKED_CODE, align 1, keep-with-next
416 void macRadioStopScan(void)
\ macRadioStopScan:
417 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
418 macRxFilter = RX_FILTER_OFF;
\ 000004 E4 CLR A
\ 000005 90.... MOV DPTR,#macRxFilter
\ 000008 F0 MOVX @DPTR,A
419
420 /* restore the pan ID (passive and active scans set pan ID to 0xFFFF) */
421 MAC_RADIO_SET_PAN_ID(macPib.panId);
\ 000009 90.... MOV DPTR,#(macPib + 29)
\ 00000C E0 MOVX A,@DPTR
\ 00000D 90DF4C MOV DPTR,#-0x20b4
\ 000010 F0 MOVX @DPTR,A
\ 000011 90.... MOV DPTR,#(macPib + 30)
\ 000014 E0 MOVX A,@DPTR
\ 000015 02.... LJMP ?Subroutine2 & 0xFFFF
422 }
423
424
425 /**************************************************************************************************
426 * @fn macRadioEnergyDetectStart
427 *
428 * @brief Initiates energy detect. The highest energy detected is recorded from the time
429 * when this function is called until the energy detect is stopped.
430 *
431 * @param none
432 *
433 * @return none
434 **************************************************************************************************
435 */
\ In segment BANKED_CODE, align 1, keep-with-next
436 void macRadioEnergyDetectStart(void)
\ macRadioEnergyDetectStart:
437 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
438 MAC_RADIO_RECORD_MAX_RSSI_START();
\ 000004 ; Setup parameters for call to function macMcuRecordMaxRssiStart
\ 000004 90.... MOV DPTR,#(macMcuRecordMaxRssiStart & 0xffff)
\ 000007 74.. MOV A,#((macMcuRecordMaxRssiStart >> 16) & 0xff)
\ 000009 02.... LJMP ??Subroutine0_0 & 0xFFFF
439 }
440
441
442 /**************************************************************************************************
443 * @fn macRadioEnergyDetectStop
444 *
445 * @brief Called at completion of an energy detect. Note: can be called even if energy
446 * detect is already stopped (needed by reset).
447 *
448 * @param none
449 *
450 * @return highest energy detect measurement
451 **************************************************************************************************
452 */
\ In segment BANKED_CODE, align 1, keep-with-next
453 uint8 macRadioEnergyDetectStop(void)
\ macRadioEnergyDetectStop:
454 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
455 uint8 rssiDbm;
456 uint8 energyDetectMeasurement;
457
458 rssiDbm = MAC_RADIO_RECORD_MAX_RSSI_STOP() + MAC_RADIO_RSSI_OFFSET;
\ 000004 ; Setup parameters for call to function macMcuRecordMaxRssiStop
\ 000004 90.... MOV DPTR,#(macMcuRecordMaxRssiStop & 0xffff)
\ 000007 74.. MOV A,#((macMcuRecordMaxRssiStop >> 16) & 0xff)
\ 000009 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00000C E9 MOV A,R1
\ 00000D 24D3 ADD A,#-0x2d
\ 00000F F9 MOV R1,A
459 energyDetectMeasurement = radioComputeED(rssiDbm);
460
461 return(energyDetectMeasurement);
\ 000010 ; Setup parameters for call to function radioComputeED
\ 000010 02.... LJMP ?Subroutine0 & 0xFFFF
462 }
463
464 /*=================================================================================================
465 * @fn radioComputeED
466 *
467 * @brief Compute energy detect measurement.
468 *
469 * @param rssi - raw RSSI value from radio hardware
470 *
471 * @return energy detect measurement in the range of 0x00-0xFF
472 *=================================================================================================
473 */
\ In segment BANKED_CODE, align 1, keep-with-next
474 static uint8 radioComputeED(int8 rssiDbm)
\ ??radioComputeED:
475 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
476 uint8 ed;
477
478 /*
479 * Keep RF power between minimum and maximum values.
480 * This min/max range is derived from datasheet and specification.
481 */
482 if (rssiDbm < ED_RF_POWER_MIN_DBM)
\ 000000 E9 MOV A,R1
\ 000001 C3 CLR C
\ 000002 94AF SUBB A,#-0x51
\ 000004 A2D2 MOV C,0xD0 /* PSW */.2
\ 000006 65D0 XRL A,PSW
\ 000008 33 RLC A
\ 000009 5004 JNC ??radioComputeED_1
483 {
484 rssiDbm = ED_RF_POWER_MIN_DBM;
\ 00000B 79AF MOV R1,#-0x51
\ 00000D 800D SJMP ??radioComputeED_2
485 }
486 else if (rssiDbm > ED_RF_POWER_MAX_DBM)
\ ??radioComputeED_1:
\ 00000F E9 MOV A,R1
\ 000010 C3 CLR C
\ 000011 940B SUBB A,#0xb
\ 000013 A2D2 MOV C,0xD0 /* PSW */.2
\ 000015 65D0 XRL A,PSW
\ 000017 33 RLC A
\ 000018 4002 JC ??radioComputeED_2
487 {
488 rssiDbm = ED_RF_POWER_MAX_DBM;
\ 00001A 790A MOV R1,#0xa
489 }
490
491 /*
492 * Create energy detect measurement by normalizing and scaling RF power level.
493 *
494 * Note : The division operation below is designed for maximum accuracy and
495 * best granularity. This is done by grouping the math operations to
496 * compute the entire numerator before doing any division.
497 */
498 ed = (MAC_SPEC_ED_MAX * (rssiDbm - ED_RF_POWER_MIN_DBM)) / (ED_RF_POWER_MAX_DBM - ED_RF_POWER_MIN_DBM);
499
500 return(ed);
\ ??radioComputeED_2:
\ 00001C E9 MOV A,R1
\ 00001D F8 MOV R0,A
\ 00001E 33 RLC A
\ 00001F 95E0 SUBB A,0xE0 /* A */
\ 000021 F9 MOV R1,A
\ 000022 7451 MOV A,#0x51
\ 000024 28 ADD A,R0
\ 000025 F8 MOV R0,A
\ 000026 E4 CLR A
\ 000027 39 ADDC A,R1
\ 000028 F9 MOV R1,A
\ 000029 E8 MOV A,R0
\ 00002A 75F0FF MOV B,#-0x1
\ 00002D A4 MUL AB
\ 00002E F8 MOV R0,A
\ 00002F AAF0 MOV R2,B
\ 000031 75F0FF MOV B,#-0x1
\ 000034 E9 MOV A,R1
\ 000035 A4 MUL AB
\ 000036 2A ADD A,R2
\ 000037 F9 MOV R1,A
\ 000038 7A5B MOV R2,#0x5b
\ 00003A 7B00 MOV R3,#0x0
\ 00003C 12.... LCALL ?S_DIV_MOD
\ 00003F E8 MOV A,R0
\ 000040 F9 MOV R1,A
\ 000041 02.... LJMP ?BRET
501 }
502
503
504 /**************************************************************************************************
505 * @fn macRadioComputeLQI
506 *
507 * @brief Compute link quality indication.
508 *
509 * @param rssi - raw RSSI value from radio hardware
510 * corr - correlation value from radio hardware
511 *
512 * @return link quality indicator value
513 **************************************************************************************************
514 */
\ In segment BANKED_CODE, align 1, keep-with-next
515 uint8 macRadioComputeLQI(int8 rssiDbm, uint8 corr)
\ macRadioComputeLQI:
516 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
517 (void) corr; /* suppress compiler warning of unused parameter */
518
519 /*
520 * Note : Currently the LQI value is simply the energy detect measurement.
521 * A more accurate value could be derived by using the correlation
522 * value along with the RSSI value.
523 */
524 return(radioComputeED(rssiDbm));
\ 000004 ; Setup parameters for call to function radioComputeED
\ 000004 02.... LJMP ?Subroutine0 & 0xFFFF
525 }
\ In segment SFR_AN, at 0xa8
\ union <unnamed> volatile __sfr _A_IEN0
\ _A_IEN0:
\ 000000 DS 1
526
527
528 /**************************************************************************************************
529 */
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
macRadioComputeLQI 2 0 0
-> radioComputeED 4 0 0
macRadioEnergyDetectStart 2 0 0
-> macMcuRecordMaxRssiStart 4 0 0
macRadioEnergyDe
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?