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

📄 mac_radio.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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:
        CFI Block cfiBlock14 Using cfiCommon0
        CFI Function macRadioStartScan
//  382 {
        FUNCALL macRadioStartScan, halAssertHandler
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL macRadioStartScan, halAssertHandler
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL macRadioStartScan, halAssertHandler
        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
//  383   MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake */
        MOV	DPTR,#macSleepState
        MOVX	A,@DPTR
        JZ	??macRadioStartScan_0
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  384   MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* all filtering must be off to start scan */
??macRadioStartScan_0:
        MOV	DPTR,#macRxFilter
        MOVX	A,@DPTR
        JZ	??macRadioStartScan_1
        ; Setup parameters for call to function halAssertHandler
        MOV	DPTR,#(halAssertHandler & 0xffff)
        MOV	A,#((halAssertHandler >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  385 
//  386   /* set the receive filter based on the selected scan mode */
//  387   if (scanMode == MAC_SCAN_ED)
??macRadioStartScan_1:
        MOV	A,R6
        JNZ	??macRadioStartScan_2
//  388   {
//  389     macRxFilter = RX_FILTER_ALL;
        MOV	A,#0x1
??macRadioStartScan_3:
        MOV	DPTR,#macRxFilter
        SJMP	??macRadioStartScan_4
//  390   }
//  391   else if (scanMode == MAC_SCAN_ORPHAN)
??macRadioStartScan_2:
        MOV	A,#0x3
        XRL	A,R6
        JNZ	??macRadioStartScan_5
//  392   {
//  393     macRxFilter = RX_FILTER_NON_COMMAND_FRAMES;
        MOV	A,#0x3
        SJMP	??macRadioStartScan_3
//  394   }
//  395   else
//  396   {
//  397     MAC_ASSERT((scanMode == MAC_SCAN_ACTIVE) || (scanMode == MAC_SCAN_PASSIVE)); /* invalid scan type */
??macRadioStartScan_5:
        MOV	A,#0x1
        XRL	A,R6
        JZ	??macRadioStartScan_6
        MOV	A,#0x2
        XRL	A,R6
        JZ	??macRadioStartScan_6
        ; Setup parameters for call to function halAssertHandler

⌨️ 快捷键说明

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