⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_radio.s51

📁 CC2431无线定位程序非常有参考价值
💻 S51
📖 第 1 页 / 共 4 页
字号:
        ; Saved register size: 10
        ; Auto size: 0
//  217   halIntState_t  s;
//  218 
//  219   /* if the selected dBm is out of range, use the closest available */
//  220   if (txPower > MAC_RADIO_TX_POWER_MAX_MINUS_DBM)
        MOV	A,R1
        CLR	C
        SUBB	A,#0x1a
        JC	??macRadioSetTxPower_0
//  221   {
//  222     txPower = MAC_RADIO_TX_POWER_MAX_MINUS_DBM;
        MOV	R1,#0x19
//  223   }
//  224 
//  225   /*
//  226    *  Set the global variable reqTxPower.  This variable is referenced
//  227    *  by the function macRadioUpdateTxPower() to write the radio register.
//  228    *
//  229    *  A lookup table is used to translate the power level to the register
//  230    *  value.
//  231    */
//  232   HAL_ENTER_CRITICAL_SECTION(s);
??macRadioSetTxPower_0:
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R2,A
        CLR	0xa8.7
//  233   reqTxPower = macRadioDefsTxPowerTable[txPower];
        MOV	?V0 + 0,R1
        MOV	A,?V0 + 0
        ADD	A,#(macRadioDefsTxPowerTable & 0xff)
        MOV	DPL,A
        CLR	A
        ADDC	A,#((macRadioDefsTxPowerTable >> 8) & 0xff)
        MOV	DPH,A
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPTR,#??reqTxPower
        MOVX	@DPTR,A
//  234   HAL_EXIT_CRITICAL_SECTION(s);
        MOV	A,R2
        MOV	C,0xE0 /* A   */.0
        MOV	0xa8.7,C
//  235 
//  236   /* update the radio power setting */
//  237   macRadioUpdateTxPower();
        ; Setup parameters for call to function macRadioUpdateTxPower
        MOV	DPTR,#(macRadioUpdateTxPower & 0xffff)
        MOV	A,#((macRadioUpdateTxPower >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  238 }
        MOV	R7,#0x2
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock9
//  239 
//  240 #else
//  241 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//  242 
//  243 void macRadioSetTxPower(uint8 txPower)
//  244 {
//  245   halIntState_t  s;
//  246 
//  247   /* same as above but with no lookup table, use raw register value */
//  248   HAL_ENTER_CRITICAL_SECTION(s);
//  249   reqTxPower = txPower;
//  250   HAL_EXIT_CRITICAL_SECTION(s);
//  251 
//  252   /* update the radio power setting */
//  253   macRadioUpdateTxPower();
//  254 }
//  255 
//  256 #endif
//  257 
//  258 
//  259 /**************************************************************************************************
//  260  * @fn          macRadioUpdateTxPower
//  261  *
//  262  * @brief       Update the radio's transmit power if a new power level has been requested
//  263  *
//  264  * @param       reqTxPower - file scope variable that holds the last request power level
//  265  *              macPhyTxPower - global variable that holds radio's set power level
//  266  *
//  267  * @return      none
//  268  **************************************************************************************************
//  269  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  270 void macRadioUpdateTxPower(void)
macRadioUpdateTxPower:
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function macRadioUpdateTxPower
//  271 {
        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
//  272   halIntState_t  s;
//  273 
//  274   /*
//  275    *  If the requested power setting is different from the actual radio setting,
//  276    *  attempt to udpate to the new power setting.
//  277    */
//  278   HAL_ENTER_CRITICAL_SECTION(s);
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R3,A
        CLR	0xa8.7
//  279   if (reqTxPower != macPhyTxPower)
        MOV	DPTR,#??reqTxPower
        MOVX	A,@DPTR
        MOV	R2,A
        MOV	DPTR,#macPhyTxPower
        MOVX	A,@DPTR
        XRL	A,R2
        JZ	??macRadioUpdateTxPower_0
//  280   {
//  281     /*
//  282      *  Radio power cannot be updated when the radio is physically transmitting.
//  283      *  If there is a possibility radio is transmitting, do not change the power
//  284      *  setting.  This function will be called again after the current transmit
//  285      *  completes.
//  286      */
//  287     if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())
        MOV	DPTR,#macRxOutgoingAckFlag
        MOVX	A,@DPTR
        JNZ	??macRadioUpdateTxPower_0
        MOV	DPTR,#macTxActive
        MOVX	A,@DPTR
        MOV	C,0xE0 /* A   */.7
        JC	??macRadioUpdateTxPower_0
//  288     {
//  289       /*
//  290        *  Set new power level;  update the shadow value and write
//  291        *  the new value to the radio hardware.
//  292        */
//  293       macPhyTxPower = reqTxPower;
        MOV	DPTR,#??reqTxPower
        MOVX	A,@DPTR
        MOV	DPTR,#macPhyTxPower
        MOVX	@DPTR,A
//  294       MAC_RADIO_SET_TX_POWER(macPhyTxPower);
        MOV	DPTR,#-0x20f5
        MOVX	@DPTR,A
//  295     }
//  296   }
//  297   HAL_EXIT_CRITICAL_SECTION(s);
??macRadioUpdateTxPower_0:
        MOV	A,R3
        MOV	C,0xE0 /* A   */.0
        MOV	0xa8.7,C
//  298 }
        LJMP	??Subroutine0_1 & 0xFFFF
        CFI EndBlock cfiBlock10
//  299 
//  300 
//  301 /**************************************************************************************************
//  302  * @fn          macRadioSetChannel
//  303  *
//  304  * @brief       Set radio channel.
//  305  *
//  306  * @param       channel - channel number, valid range is 11 through 26
//  307  *
//  308  * @return      none
//  309  **************************************************************************************************
//  310  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  311 void macRadioSetChannel(uint8 channel)
macRadioSetChannel:
        CFI Block cfiBlock11 Using cfiCommon0
        CFI Function macRadioSetChannel
//  312 {
        FUNCALL macRadioSetChannel, halAssertHandler
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL macRadioSetChannel, macRadioUpdateChannel
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        MOV	A,#-0x9
        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 V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
        MOV	A,R1
        MOV	R6,A
//  313   halIntState_t  s;
//  314 
//  315   MAC_ASSERT((channel >= 11) && (channel <= 28));  /* illegal channel */
        CLR	C
        SUBB	A,#0xb
        JC	??macRadioSetChannel_0
        MOV	A,R6
        CLR	C
        SUBB	A,#0x1d
        JC	??macRadioSetChannel_1
??macRadioSetChannel_0:
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  316 
//  317   /* critical section to make sure transmit does not start while updating channel */
//  318   HAL_ENTER_CRITICAL_SECTION(s);
??macRadioSetChannel_1:
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R7,A
        CLR	0xa8.7
//  319 
//  320   /* set requested channel */
//  321   reqChannel = channel;
        MOV	A,R6
        MOV	DPTR,#??reqChannel
        MOVX	@DPTR,A
//  322 
//  323   /*
//  324    *  If transmit is not active, update the radio hardware immediately.  If transmit is active,
//  325    *  the channel will be updated at the end of the current transmit.
//  326    */
//  327   if (!macTxActive)
        MOV	DPTR,#macTxActive
        MOVX	A,@DPTR
        JNZ	??macRadioSetChannel_2
//  328   {
//  329     macRadioUpdateChannel();
        ; Setup parameters for call to function macRadioUpdateChannel
        MOV	DPTR,#(macRadioUpdateChannel & 0xffff)
        MOV	A,#((macRadioUpdateChannel >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  330   }
//  331   
//  332   HAL_EXIT_CRITICAL_SECTION(s);
??macRadioSetChannel_2:
        MOV	A,R7
        MOV	C,0xE0 /* A   */.0
        MOV	0xa8.7,C
        CFI EndBlock cfiBlock11
//  333 }
        REQUIRE ?Subroutine1
        ; // Fall through to label ?Subroutine1

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
        CFI Block cfiBlock12 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        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)))
        MOV	R7,#0x1
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock12
//  334 
//  335 
//  336 /**************************************************************************************************
//  337  * @fn          macRadioUpdateChannel
//  338  *
//  339  * @brief       Update the radio channel if a new channel has been requested.
//  340  *
//  341  * @param       none
//  342  *
//  343  * @return      none
//  344  **************************************************************************************************
//  345  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  346 void macRadioUpdateChannel(void)
macRadioUpdateChannel:
        CFI Block cfiBlock13 Using cfiCommon0
        CFI Function macRadioUpdateChannel
//  347 {
        FUNCALL macRadioUpdateChannel, halAssertHandler
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macRadioUpdateChannel, macRxOff
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        FUNCALL macRadioUpdateChannel, macRxOnRequest
        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
//  348   halIntState_t  s;
//  349 
//  350   MAC_ASSERT(!macTxActive); /* cannot change channel during a transmit */
        MOV	DPTR,#macTxActive
        MOVX	A,@DPTR
        JZ	??macRadioUpdateChannel_0
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  351 
//  352   /* if the channel has changed, set the radio to the new channel */
//  353   HAL_ENTER_CRITICAL_SECTION(s);
??macRadioUpdateChannel_0:
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        CLR	0xa8.7
//  354   if (reqChannel != macPhyChannel)
        MOV	DPTR,#??reqChannel
        MOVX	A,@DPTR
        MOV	R2,A
        MOV	DPTR,#macPhyChannel
        MOVX	A,@DPTR
        XRL	A,R2
        JZ	??macRadioUpdateChannel_1
//  355   {
//  356     macPhyChannel = reqChannel;
        MOV	DPTR,#??reqChannel
        MOVX	A,@DPTR
        MOV	DPTR,#macPhyChannel
        MOVX	@DPTR,A
//  357     HAL_EXIT_CRITICAL_SECTION(s);
        MOV	0xa8.7,C
//  358 
//  359     /* changing the channel stops any receive in progress */
//  360     macRxOff();
        ; Setup parameters for call to function macRxOff
        MOV	DPTR,#(macRxOff & 0xffff)
        MOV	A,#((macRxOff >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  361     MAC_RADIO_SET_CHANNEL(macPhyChannel);
        MOV	B,#0x5
        MOV	DPTR,#macPhyChannel
        MOVX	A,@DPTR
        MUL	AB
        ADD	A,#0x2e
        MOV	DPTR,#-0x20ef
        MOVX	@DPTR,A
//  362     macRxOnRequest();
        ; Setup parameters for call to function macRxOnRequest
        MOV	DPTR,#(macRxOnRequest & 0xffff)
        MOV	A,#((macRxOnRequest >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        SJMP	??macRadioUpdateChannel_2
//  363   }
//  364   else
//  365   {
//  366     HAL_EXIT_CRITICAL_SECTION(s);
??macRadioUpdateChannel_1:
        MOV	0xa8.7,C
//  367   }
//  368 }
??macRadioUpdateChannel_2:
        LJMP	??Subroutine0_1 & 0xFFFF
        CFI EndBlock cfiBlock13
//  369 
//  370 
//  371 /**************************************************************************************************
//  372  * @fn          macRadioStartScan
//  373  *
//  374  * @brief       Puts radio into selected scan mode.
//  375  *
//  376  * @param       scanMode - scan mode, see #defines in .h file
//  377  *
//  378  * @return      none
//  379  **************************************************************************************************
//  380  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  381 void macRadioStartScan(uint8 scanMode)
macRadioStartScan:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -