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

📄 mac_beacon_handler.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        SUBB	A,R0
        MOV	?V0 + 0,A
        CLR	A
        SUBB	A,#0x0
        MOV	?V0 + 1,A
        ; Setup parameters for call to function mbcnGetBeaconMargin
        MOV	DPTR,#(mbcnGetBeaconMargin & 0xffff)
        MOV	A,#((mbcnGetBeaconMargin >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,?V0 + 0
        MOV	B,R1
        MUL	AB
        MOV	R0,A
        MOV	R2,B
        MOV	B,R1
        MOV	A,?V0 + 1
        MUL	AB
        ADD	A,R2
        MOV	R1,A
        MOV	A,R0
        CLR	C
        RLC	A
        MOV	R0,A
        MOV	A,R1
        RLC	A
        MOV	R1,A
        MOV	A,#0x2
        ADD	A,R0
        MOV	?V0 + 0,A
        CLR	A
        ADDC	A,R1
        MOV	?V0 + 1,A
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_FOUR
        CFI CFA_XSP16 add(XSP16, 20)
        MOV	R1,#(mbcnRxBeaconTimeout & 0xff)
        MOV	R2,#((mbcnRxBeaconTimeout >> 8) & 0xff)
        MOV	R3,#((mbcnRxBeaconTimeout >> 16) & 0xff)
        LCALL	mtimSetCallback & 0xFFFF
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 16)
//  105 
//  106         // Finish this task, but keep the reservation!
//  107         mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM);
        ; Setup parameters for call to function mschRemoveTask
        MOV	R2,#0x1
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        MOV	R1,A
        LCALL	mschRemoveTask & 0xFFFF
//  108     }
//  109 
//  110 } // mbcnRxPeriodicalBeaconTask
??mbcnRxPeriodicalBeaconTask_2:
        SJMP	??Subroutine1_0
        CFI EndBlock cfiBlock2

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 18)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        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(-16)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V7 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)))
        CFI Invalid
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 16)
        CFI Valid
??Subroutine1_0:
        MOV	R7,#0x8
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  111 
//  112 
//  113 
//  114 
//  115 //-------------------------------------------------------------------------------------------------------
//  116 //  void mbcnRxBeaconTimeout(void)
//  117 //
//  118 //  DESCRIPTION:
//  119 //      Called when no beacon has been received. Decrements the counter which will give "beacon loss"
//  120 //      when it reaches zero. This timeout is set up in mbcnRxPeriodicalBeaconTask().
//  121 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  122 void mbcnRxBeaconTimeout(void) NEAR {
mbcnRxBeaconTimeout:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function mbcnRxBeaconTimeout
        FUNCALL mbcnRxBeaconTimeout, mrxDecrOnCounter
        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
//  123 
//  124     // The beacon reception interval is over (mbcnRxBeacon)
//  125     mrxDecrOnCounter();
        ; Setup parameters for call to function mrxDecrOnCounter
        MOV	DPTR,#(mrxDecrOnCounter & 0xffff)
        MOV	A,#((mrxDecrOnCounter >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  126 
//  127     // Update the tracking counter...
//  128     mbcnInfo.noBcnCountdown--;
        MOV	DPTR,#(mbcnInfo + 7)
        MOVX	A,@DPTR
        DEC	A
        LJMP	?Subroutine2
        CFI EndBlock cfiBlock4
//  129 
//  130 } // mbcnRxBeaconTimeout
//  131 
//  132 
//  133 
//  134 
//  135 /*******************************************************************************************************
//  136  *******************************************************************************************************
//  137  **************************                BEACON TRANSMISSION                **************************
//  138  *******************************************************************************************************
//  139  *******************************************************************************************************/
//  140 
//  141 
//  142 #if MAC_OPT_FFD
//  143 
//  144 //-------------------------------------------------------------------------------------------------------
//  145 //  void mbcnTxPeriodicalBeacon(void)
//  146 //
//  147 //  DESCRIPTION:
//  148 //      Creates the task that handles transmission of periodical beacons (in a beacon-enabled PAN)
//  149 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  150 void mbcnTxPeriodicalBeacon(void) NEAR {
mbcnTxPeriodicalBeacon:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function mbcnTxPeriodicalBeacon
        FUNCALL mbcnTxPeriodicalBeacon, mschAddTask
        LOCFRAME XSTACK, 14, STACK
        ARGFRAME XSTACK, 14, STACK
        MOV	A,#-0xb
        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 V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 11)
        ; Saved register size: 11
        ; Auto size: 0
//  151     mschAddTask(mbcnInfo.txTaskNumber, MAC_TASK_PRI_HIGHEST, mbcnTxPeriodicalBeaconTask, NULL);
        ; Setup parameters for call to function mschAddTask
        MOV	?V0 + 0,#(mbcnTxPeriodicalBeaconTask & 0xff)
        MOV	?V0 + 1,#((mbcnTxPeriodicalBeaconTask >> 8) & 0xff)
        MOV	?V0 + 2,#((mbcnTxPeriodicalBeaconTask >> 16) & 0xff)
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 14)
        MOV	R4,#0x0
        MOV	R5,#0x0
        MOV	R2,#0x3
        MOV	DPTR,#mbcnInfo
        LJMP	?Subroutine0
        CFI EndBlock cfiBlock5
//  152 } // mbcnTxPeriodicalBeacon
//  153 
//  154 
//  155 
//  156 
//  157 //-------------------------------------------------------------------------------------------------------
//  158 //  void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask)
//  159 //
//  160 //  DESCRIPTION:
//  161 //      This task is responsible for beacon transmission, and a few other housekeeping procedures (see
//  162 //      the function comments. When finished, this task will continue in the mtxStartTransmission
//  163 //      function (the task function pointer and the state is modified.
//  164 //
//  165 //  TASK DATA:
//  166 //      0
//  167 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  168 void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask) NEAR {
mbcnTxPeriodicalBeaconTask:
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function mbcnTxPeriodicalBeaconTask
        FUNCALL mbcnTxPeriodicalBeaconTask, msupSetChannel
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, msupCalcBeaconInterval
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mbcnUpdateBufferedPibAttributes
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, miqUnrequestAll
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, miqDecrTimeToLive
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mschReserveTask
        LOCFRAME ISTACK, 1, STACK
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME ISTACK, 1, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mschAddTask
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mbcnPrepareBeacon
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mrxAutoIncrOnCounter
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, msupCalcSuperframeDuration
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, T2_GET_OVERFLOW_COUNTER
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
        LOCFRAME XSTACK, 26, STACK
        ARGFRAME XSTACK, 26, STACK
        FUNCALL mbcnTxPeriodicalBeaconTask, mschRemoveTask
        LOCFRAME XSTACK, 22, STACK
        ARGFRAME XSTACK, 22, STACK
        MOV	A,#-0x10
        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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        ; Saved register size: 16
        ; Auto size: 6
        MOV	A,#-0x6
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 22)
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        MOVX	@DPTR,A
//  169     static UINT32 oldBeaconInterval;
//  170     MAC_TX_PACKET   *pPacket = mbcnInfo.pTxPacket;
        MOV	DPTR,#(mbcnInfo + 2)
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A

⌨️ 快捷键说明

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