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

📄 mac_scan.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  304 //-------------------------------------------------------------------------------------------------------

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  305 void mscScanProcedure(MAC_TASK_INFO   *pTask) NEAR {
mscScanProcedure:
        CFI Block cfiBlock7 Using cfiCommon1
        CFI Function mscScanProcedure
        FUNCALL mscScanProcedure, macSetState
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mschRescheduleTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mrxIncrOnCounter
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, miqUnrequestAll
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mscSetNextChannel
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, msupSetChannel
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mtimSetCallback
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL mscScanProcedure, mscTransmitBeaconRequest
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mschRescheduleTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mscTransmitOrphanNotification
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mscSetNextChannel
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, macSetState
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mrxDecrOnCounter
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, msupSetChannel
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL mscScanProcedure, mschRemoveTask
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, 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: 0
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
//  306     INT8 maxRssi;
//  307     MAC_STATE_TYPE macState = MAC_STATE_DEFAULT;
        MOV	R1,#0x0
//  308 
//  309     switch (pTask->state) {
        MOV	A,R2
        ADD	A,#0x5
        MOV	R6,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	R7,A
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mscScanProcedure>_0`:
        DB        0
        DB        8
        DW        ??mscScanProcedure_0
        DW        ??mscScanProcedure_1
        DW        ??mscScanProcedure_2
        DW        ??mscScanProcedure_3
        DW        ??mscScanProcedure_4
        DW        ??mscScanProcedure_5
        DW        ??mscScanProcedure_6
        DW        ??mscScanProcedure_7
        DW        ??mscScanProcedure_8
        DW        ??mscScanProcedure_9
//  310     case MSC_STATE_INITIALIZE_SCAN:
//  311 
//  312         // If the state cannot be switched now, then reschedule this task (move it to the back of the
//  313         // queue) to avoid potential deadlock...
//  314         switch (mscInfo.scanType) {
??mscScanProcedure_1:
        MOV	DPTR,#mscInfo
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mscScanProcedure>_1`:
        DB        0
        DB        3
        DW        ??mscScanProcedure_10
        DW        ??mscScanProcedure_11
        DW        ??mscScanProcedure_12
        DW        ??mscScanProcedure_12
        DW        ??mscScanProcedure_13
//  315         case ENERGY_SCAN:  macState = MAC_STATE_ENERGY_SCAN; break;
??mscScanProcedure_11:
        MOV	R1,#0x40
        SJMP	??mscScanProcedure_10
//  316         case PASSIVE_SCAN:
//  317         case ACTIVE_SCAN:  macState = MAC_STATE_ACTIVE_OR_PASSIVE_SCAN; break;
??mscScanProcedure_12:
        MOV	R1,#0x41
        SJMP	??mscScanProcedure_10
//  318         case ORPHAN_SCAN:  macState = MAC_STATE_ORPHAN_SCAN; break;
??mscScanProcedure_13:
        MOV	R1,#0x43
//  319         }
//  320         if (!macSetState(macState)) {
??mscScanProcedure_10:
        ; Setup parameters for call to function macSetState
        LCALL	macSetState & 0xFFFF
        MOV	A,R1
        JNZ	??mscScanProcedure_14
//  321             mschRescheduleTask(pTask, MSC_STATE_INITIALIZE_SCAN);
        ; Setup parameters for call to function mschRescheduleTask
        MOV	R1,#0x0
??mscScanProcedure_15:
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        LCALL	mschRescheduleTask & 0xFFFF
//  322             break;
        LJMP	??mscScanProcedure_0 & 0xFFFF
//  323         }
//  324 
//  325         // Configure CC2430 for scanning
//  326         if (mscInfo.scanType != ORPHAN_SCAN) {
??mscScanProcedure_14:
        MOV	DPTR,#mscInfo
        MOVX	A,@DPTR
        XRL	A,#0x3
        JZ	??mscScanProcedure_16
//  327             DISABLE_GLOBAL_INT(); // TBD: Can this line be removed?
        CLR	0xa8.7
//  328             WRITE_RFR16(PANID, 0xFFFF);
        MOV	A,#-0x1
        MOV	DPTR,#-0x20b5
        MOVX	@DPTR,A
        MOV	DPTR,#-0x20b4
        MOVX	@DPTR,A
//  329         }
//  330 
//  331         // Increment the RX on counter, so that other events don't turn it off
//  332         mrxIncrOnCounter();
??mscScanProcedure_16:
        ; Setup parameters for call to function mrxIncrOnCounter
        MOV	DPTR,#(mrxIncrOnCounter & 0xffff)
        MOV	A,#((mrxIncrOnCounter >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  333 
//  334         pTask->state = MSC_STATE_UNREQUEST_INDIRECT;
        MOV	A,#0x1
??mscScanProcedure_17:
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	@DPTR,A
        LJMP	??mscScanProcedure_0 & 0xFFFF
//  335         break;
//  336 
//  337     case MSC_STATE_UNREQUEST_INDIRECT:
//  338 
//  339         // At this point we can be sure that RX has been shut down, that the RX engine is not running, including
//  340         // the high-priority processing tasks. There are no direct packet transmissions in progress, because
//  341         // that would have blocked this task. The beacon transmission and reception tasks, and the force RX off
//  342         // function are blocked by the MAC state.
//  343 
//  344 #if MAC_OPT_FFD
//  345         // Unrequest all indirect packets to avoid that the miqTransmitRequestedPackets() function eats up the
//  346         // whole task pool (requested packets are usually transmitted in between).
//  347         miqUnrequestAll();
??mscScanProcedure_2:
        ; Setup parameters for call to function miqUnrequestAll
        LCALL	miqUnrequestAll & 0xFFFF
//  348 #endif
//  349 
//  350         // Remove invalid channels from the mask, and go to the first channel to be scanned
//  351         mscInfo.pScanResult->unscannedChannels = mscInfo.scanChannels;
        MOV	DPTR,#(mscInfo + 6)
        MOVX	A,@DPTR
        MOV	?V0 + 4,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	?V0 + 5,A
        MOV	DPTR,#(mscInfo + 1)
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        INC	DPTR
        MOV	A,?V0 + 0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,?V0 + 1
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,?V0 + 2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,?V0 + 3
        MOVX	@DPTR,A
//  352         mscInfo.scanChannels &= MSC_VALID_CHANNELS;
        MOV	DPTR,#__Constant_7fff800
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	DPTR,#(mscInfo + 1)
        MOV	R0,#?V0 + 0
        LCALL	?L_AND_TO_X
//  353         mscInfo.pScanResult->resultListSize = 0;
        CLR	A
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  354         mscInfo.currentChannel = 0;
        MOV	DPTR,#(mscInfo + 8)
        MOVX	@DPTR,A
//  355         mscInfo.oldPhyCurrentChannel = ppib.phyCurrentChannel;
        MOV	DPTR,#ppib
        MOVX	A,@DPTR
        MOV	DPTR,#(mscInfo + 11)
        MOVX	@DPTR,A
//  356         if (mscSetNextChannel()) {
        ; Setup parameters for call to function mscSetNextChannel
        LCALL	mscSetNextChannel & 0xFFFF
        MOV	A,R1
        JNZ	$+5
        LJMP	??mscScanProcedure_18 & 0xFFFF
//  357             pTask->state = MSC_STATE_SET_CHANNEL;
??mscScanProcedure_19:
        MOV	A,#0x2
        SJMP	??mscScanProcedure_17
//  358         } else {
//  359             pTask->state = MSC_STATE_FINISH;
//  360         }
//  361         break;
//  362 
//  363     case MSC_STATE_SET_CHANNEL:
//  364 
//  365         // Set the timer which will tell us when to move on to the next channel
//  366         mscInfo.channelComplete = FALSE;
??mscScanProcedure_3:
        CLR	A
        MOV	DPTR,#(mscInfo + 9)
        MOVX	@DPTR,A
//  367 
//  368         // Set the new channel and turn on RX
//  369         msupSetChannel(mscInfo.currentChannel, TRUE);
        ; Setup parameters for call to function msupSetChannel
        MOV	R2,#0x1
        MOV	DPTR,#(mscInfo + 8)
        MOVX	A,@DPTR
        MOV	R1,A
        LCALL	msupSetChannel & 0xFFFF
//  370 
//  371         // Set the channel timeout
//  372         switch (mscInfo.scanType) {
        MOV	DPTR,#mscInfo
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mscScanProcedure>_2`:
        DB        0
        DB        2
        DW        ??mscScanProcedure_20
        DW        ??mscScanProcedure_21
        DW        ??mscScanProcedure_20
        DW        ??mscScanProcedure_21
//  373         case ENERGY_SCAN:
//  374         case PASSIVE_SCAN:
//  375             mtimSetCallback(mscChannelTimeout, ((UINT32) aBaseSuperframeDuration / (UINT32) aUnitBackoffPeriod) * (((UINT32) 1 << mscInfo.scanDuration) + 1));
??mscScanProcedure_21:
        ; Setup parameters for call to function mtimSetCallback
        MOV	?V0 + 4,#0x1
        MOV	?V0 + 5,#0x0
        MOV	?V0 + 6,#0x0
        MOV	?V0 + 7,#0x0
        MOV	DPTR,#(mscInfo + 5)
        MOVX	A,@DPTR
        MOV	R0,#?V0 + 4
        LCALL	?L_SHL
        MOV	DPTR,#__Constant_1
        MOV	R0,#?V0 + 4
        LCALL	?L_ADD_X
        MOV	DPTR,#__Constant_30
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	R0,#?V0 + 4
        MOV	R1,#?V0 + 0
        LCALL	?L_MUL
        MOV	R0,#?V0 + 4
        LCALL	?PUSH_XSTACK_I_FOUR
        CFI CFA_XSP16 add(XSP16, 20)
        MOV	R1,#(mscChannelTimeout & 0xff)
        MOV	R2,#((mscChannelTimeout >> 8) & 0xff)
        MOV	R3,#((mscChannelTimeout >> 16) & 0xff)
        LCALL	mtimSetCallback & 0xFFFF
        MOV	A,#0x4
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 16)
//  376             break;
//  377         case ACTIVE_SCAN:
//  378         case ORPHAN_SCAN:
//  379             // The channel timeout is set by mtxFinishTransmission (when the packet has been transmitted)
//  380             break;
//  381         }
//  382 
//  383         // Jump to the next state
//  384         switch (mscInfo.scanType) {
??mscScanProcedure_20:
        MOV	DPTR,#mscInfo
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for mscScanProcedure>_3`:
        DB        0
        DB        3
        DW        ??mscScanProcedure_0
        DW        ??mscScanProcedure_22
        DW        ??mscScanProcedure_23
        DW        ??mscScanProcedure_24
        DW        ??mscScanProcedure_25
//  385         case ENERGY_SCAN:   pTask->state = MSC_STATE_E_SAMPLE; break;
??mscScanProcedure_22:
        MOV	A,#0x3
        LJMP	??mscScanProcedure_17
//  386         case ACTIVE_SCAN:   pTask->state = MSC_STATE_A_TX_BEACON_REQUEST; break;
??mscScanProcedure_23:
        MOV	A,#0x4

⌨️ 快捷键说明

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