zmac_cb.s51

来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,588 行 · 第 1/5 页

S51
1,588
字号
        LCALL	?Subroutine4 & 0xFFFF
??CrossCallReturnLabel_10:
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        LCALL	?Subroutine0 & 0xFFFF
//  194               osal_memcpy(pScan->result.pEnergyDetect, ZMac_ScanBuf, ZMAC_ED_SCAN_MAXCHANNELS);
??CrossCallReturnLabel_0:
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 24)
        MOV	R4,#0x1b
        MOV	R5,#0x0
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        SJMP	??MAC_CbackEvent_15
        CFI CFA_XSP16 add(XSP16, 21)
//  195             }
//  196             else
//  197             {
//  198               pScan->result.pPanDescriptor = (macPanDesc_t*) (pScan + 1);
??MAC_CbackEvent_14:
        LCALL	?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_4:
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,?V0 + 4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,?V0 + 5
        LCALL	?Subroutine0 & 0xFFFF
//  199               osal_memcpy(pScan + 1, ZMac_ScanBuf, sizeof( ZMacPanDesc_t ) * pScan->resultListSize);
??CrossCallReturnLabel_1:
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 24)
        MOV	DPL,R6
        MOV	DPH,R7
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	B,#0x21
        MUL	AB
        MOV	R4,A
        MOV	R5,B
        MOV	R2,?V0 + 4
        MOV	R3,?V0 + 5
??MAC_CbackEvent_15:
        MOV	DPTR,#(osal_memcpy & 0xffff)
        MOV	A,#((osal_memcpy >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 21)
//  200             }
//  201 
//  202             osal_mem_free(ZMac_ScanBuf);
        ; Setup parameters for call to function osal_mem_free
        MOV	DPTR,#ZMac_ScanBuf
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	DPTR,#(osal_mem_free & 0xffff)
        MOV	A,#((osal_mem_free >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  203             ZMac_ScanBuf = NULL;
        MOV	DPTR,#ZMac_ScanBuf
        LJMP	??CrossCallReturnLabel_8 & 0xFFFF
//  204           }
//  205         }
//  206         break;
//  207 
//  208       case MAC_MLME_START_CNF:
//  209         msgPtr->hdr.status = pData->startCnf.hdr.status;
??MAC_CbackEvent_9:
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        INC	DPTR
        MOVX	A,@DPTR
        MOV	DPL,R6
        MOV	DPH,R7
        LJMP	??MAC_CbackEvent_16 & 0xFFFF
//  210         break;
//  211 
//  212       case MAC_MCPS_DATA_IND:
//  213         {
//  214           /* Data Ind is unconventional: to save an alloc/copy, reuse the MAC
//  215              buffer and re-organize the contents into ZMAC format. */
//  216           uint16 shortAddr = INVALID_SHORT_ADDR;
??MAC_CbackEvent_10:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	A,#-0x2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,#-0x1
        MOVX	@DPTR,A
//  217           ZMacDataInd_t *pDataInd = (ZMacDataInd_t *) pData;
//  218           uint8 event, status, len, *msdu;
//  219 
//  220           MAC_MlmeGetReq( MAC_SHORT_ADDRESS, &shortAddr );
        ; Setup parameters for call to function MAC_MlmeGetReq
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x53
        MOV	DPTR,#(MAC_MlmeGetReq & 0xffff)
        MOV	A,#((MAC_MlmeGetReq >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  221           if ( shortAddr == INVALID_SHORT_ADDR || shortAddr == BROADCAST_ADDR )
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        XRL	A,#0xfe
        JNZ	??MAC_CbackEvent_17
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0xff
??MAC_CbackEvent_17:
        JZ	??MAC_CbackEvent_18
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        XRL	A,#0xff
        JNZ	??MAC_CbackEvent_19
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0xff
??MAC_CbackEvent_19:
        JNZ	??MAC_CbackEvent_20
//  222           {
//  223             osal_msg_deallocate( (uint8 *)msgPtr );
??MAC_CbackEvent_18:
        ; Setup parameters for call to function osal_msg_deallocate
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        MOV	DPTR,#(osal_msg_deallocate & 0xffff)
        MOV	A,#((osal_msg_deallocate >> 16) & 0xff)
        LJMP	??MAC_CbackEvent_21 & 0xFFFF
//  224             return;
//  225           }
//  226 
//  227           /* Store parameters */
//  228           event = pData->hdr.event;
??MAC_CbackEvent_20:
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        MOVX	A,@DPTR
        PUSH	A
        CFI CFA_SP SP+-1
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        POP	A
        CFI CFA_SP SP+0
        LCALL	?Subroutine7 & 0xFFFF
//  229           status = pData->hdr.status;
??CrossCallReturnLabel_15:
        MOVX	A,@DPTR
        MOV	?V0 + 7,A
//  230           len = pData->dataInd.msdu.len;
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	?V0 + 3,A
//  231           msdu = pData->dataInd.msdu.p;
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	A,#0x3
        LCALL	?XSTACK_DISP0_8
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
//  232 
//  233           /* Copy header */
//  234 #if defined ( ZBIT )
//  235           // ZBIT requires two copies to handle 32 bit alignment  
//  236           osal_memcpy(&pDataInd->SrcAddr, &pData->dataInd.mac, sizeof(zAddrType_t) * 2 );
//  237           osal_memcpy(&pDataInd->Timestamp, &pData->dataInd.mac.timestamp, sizeof(macDataInd_t) - sizeof(ZMacEventHdr_t) - sizeof(zAddrType_t) * 2);
//  238 #else
//  239           osal_memcpy(&pDataInd->SrcAddr, &pData->dataInd.mac, sizeof(macDataInd_t) - sizeof(ZMacEventHdr_t));
        ; Setup parameters for call to function osal_memcpy
        MOV	A,?V0 + 4
        ADD	A,#0x12
        MOV	?V0 + 0,A
        MOV	A,?V0 + 5
        ADDC	A,#0x0
        MOV	?V0 + 1,A
        MOV	?V0 + 2,#0x0
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_THREE
        CFI CFA_XSP16 add(XSP16, 24)
        MOV	R4,#0x1e
        MOV	R5,#0x0
        MOV	A,?V0 + 4
        ADD	A,#0x2
        MOV	R2,A
        MOV	A,?V0 + 5
        LCALL	?Subroutine6 & 0xFFFF
??CrossCallReturnLabel_14:
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x3
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 21)
//  240 #endif
//  241           /* Security - set to zero for now */
//  242           pDataInd->Sec.SecurityLevel = false;
        MOV	A,?V0 + 4
        ADD	A,#0x2a
        MOV	DPL,A
        MOV	A,?V0 + 5
        ADDC	A,#0x0
        MOV	DPH,A
        CLR	A
        LCALL	?Subroutine7 & 0xFFFF
//  243 
//  244           /* Restore parameters */
//  245           pDataInd->hdr.Status = status;
??CrossCallReturnLabel_16:
        MOV	A,?V0 + 7
        MOVX	@DPTR,A
//  246           pDataInd->hdr.Event = event;
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	DPL,?V0 + 4
        MOV	DPH,?V0 + 5
        MOVX	@DPTR,A
//  247           pDataInd->msduLength = len;
        MOV	A,?V0 + 4
        ADD	A,#0x2d
        MOV	DPL,A
        MOV	A,?V0 + 5
        ADDC	A,#0x0
        MOV	DPH,A
        MOV	A,?V0 + 3
        MOVX	@DPTR,A
//  248 
//  249           if (len)
        JZ	??MAC_CbackEvent_22
//  250             pDataInd->msdu = msdu;
        MOV	A,#0x3
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        LCALL	?Subroutine3 & 0xFFFF
??CrossCallReturnLabel_7:
        LJMP	??CrossCallReturnLabel_9 & 0xFFFF
//  251           else
//  252             pDataInd->msdu = NULL;
??MAC_CbackEvent_22:
        LCALL	?Subroutine3 & 0xFFFF
??CrossCallReturnLabel_8:
        CLR	A
        MOVX	@DPTR,A
??MAC_CbackEvent_16:
        INC	DPTR
??MAC_CbackEvent_12:
        MOVX	@DPTR,A
//  253 
//  254           break;
//  255         }
//  256       }
//  257 
//  258       msgPtr->hdr.event = zmacCBEventTable[macEvent];
??MAC_CbackEvent_11:
        MOV	A,?V0 + 6
        ADD	A,#(zmacCBEventTable & 0xff)
        MOV	DPL,A
        CLR	A
        ADDC	A,#((zmacCBEventTable >> 8) & 0xff)
        MOV	DPH,A
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R6
        MOV	DPH,R7
        MOVX	@DPTR,A
//  259       osal_msg_send( NWK_TaskID, (uint8 *)msgPtr );
        ; Setup parameters for call to function osal_msg_send
        MOV	A,R6
        MOV	R2,A
        MOV	A,R7
        MOV	R3,A
        MOV	DPTR,#NWK_TaskID

⌨️ 快捷键说明

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