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 + -
显示快捷键?