📄 mac_tx_engine.s51
字号:
FUNCTION mlmePollConfirm,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN mtimSetCallback
FUNCTION mtimSetCallback,0202H
ARGFRAME XSTACK, 21, STACK
EXTERN miqSetRequested
FUNCTION miqSetRequested,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN mschRemoveTask
FUNCTION mschRemoveTask,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN mschAddTask
FUNCTION mschAddTask,0202H
ARGFRAME XSTACK, 20, STACK
EXTERN mtxpReleasePacket
FUNCTION mtxpReleasePacket,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN T2_GET_OVERFLOW_COUNTER
FUNCTION T2_GET_OVERFLOW_COUNTER,0202H
ARGFRAME XSTACK, 16, STACK
EXTERN msupCalcCapDuration
FUNCTION msupCalcCapDuration,0202H
ARGFRAME XSTACK, 16, STACK
EXTERN mbcnGetBeaconMargin
FUNCTION mbcnGetBeaconMargin,0202H
ARGFRAME XSTACK, 16, STACK
EXTERN mrxResetRxEngine
FUNCTION mrxResetRxEngine,0202H
ARGFRAME ISTACK, 2, STACK
EXTERN mrxAutoIncrOnCounter
FUNCTION mrxAutoIncrOnCounter,0202H
ARGFRAME ISTACK, 2, STACK
EXTERN halWriteTxFifo
FUNCTION halWriteTxFifo,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN msupSetTransmitPower
FUNCTION msupSetTransmitPower,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN mschReserveTask
FUNCTION mschReserveTask,0202H
ARGFRAME ISTACK, 1, STACK
ARGFRAME XSTACK, 14, STACK
EXTERN mrxDecrOnCounter
FUNCTION mrxDecrOnCounter,0202H
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 14, STACK
EXTERN FetchTxFrame
FUNCTION FetchTxFrame,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN DmaMemcpy
FUNCTION DmaMemcpy,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN DmaWriteFrameToTxFifo
FUNCTION DmaWriteFrameToTxFifo,0202H
ARGFRAME XSTACK, 17, STACK
EXTERN mtimCancelCallback
FUNCTION mtimCancelCallback,0202H
ARGFRAME ISTACK, 2, STACK
EXTERN msupCalcBeaconInterval
FUNCTION msupCalcBeaconInterval,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN mschRescheduleTask
FUNCTION mschRescheduleTask,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN msupGetRandomByte
FUNCTION msupGetRandomByte,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN mrxIncrOnCounter
FUNCTION mrxIncrOnCounter,0202H
ARGFRAME XSTACK, 14, STACK
EXTERN macInfo
EXTERN mbcnInfo
EXTERN mbcnTxPeriodicalBeacon
FUNCTION mbcnTxPeriodicalBeacon,0602H
EXTERN miqRemoveIndirectPacket
FUNCTION miqRemoveIndirectPacket,0602H
EXTERN mpib
EXTERN mscChannelTimeout
FUNCTION mscChannelTimeout,0602H
EXTERN mscInfo
// E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\mac\CC2430\mac_tx_engine.c
// 1 /*******************************************************************************************************
// 2 * *
// 3 * ********** *
// 4 * ************ *
// 5 * *** *** *
// 6 * *** +++ *** *
// 7 * *** + + *** *
// 8 * *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
// 9 * *** + + *** TX Engine *
// 10 * *** +++ *** *
// 11 * *** *** *
// 12 * ************ *
// 13 * ********** *
// 14 * *
// 15 ********************************************************************************************************
// 16 * CONFIDENTIAL *
// 17 * The use of this file is restricted by the signed MAC software license agreement. *
// 18 * *
// 19 * Copyright Chipcon AS, 2005 *
// 20 ********************************************************************************************************
// 21 * This module contains the MAC TX engine, which is used to transmit all RF packets. *
// 22 *******************************************************************************************************/
// 23 #include "mac_headers.h"
ASEGN SFR_AN:DATA:NOROOT,09cH
// unsigned char volatile __sfr T2PEROF0
T2PEROF0:
DS 1
ASEGN SFR_AN:DATA:NOROOT,09dH
// unsigned char volatile __sfr T2PEROF1
T2PEROF1:
DS 1
ASEGN SFR_AN:DATA:NOROOT,09eH
// unsigned char volatile __sfr T2PEROF2
T2PEROF2:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0a1H
// unsigned char volatile __sfr T2OF0
T2OF0:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0a2H
// unsigned char volatile __sfr T2OF1
T2OF1:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0a3H
// unsigned char volatile __sfr T2OF2
T2OF2:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0c3H
// unsigned char volatile __sfr T2CNF
T2CNF:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0e1H
// unsigned char volatile __sfr RFST
RFST:
DS 1
// 24
// 25 //-------------------------------------------------------------------------------------------------------
// 26 // Transmission related variables
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 27 MAC_TX_INFO mtxInfo;
mtxInfo:
DS 13
// 28 //-------------------------------------------------------------------------------------------------------
// 29
// 30
// 31 //-------------------------------------------------------------------------------------------------------
// 32 //
// 33 // Prototypes
// 34 //
// 35 //-------------------------------------------------------------------------------------------------------
// 36 static ROOT void HandleOutgoingClearText (MAC_TX_PACKET *macTxPacket,
// 37 FRAME *frame);
// 38 static ROOT void HandleOutgoingFrame (MAC_TX_PACKET *macTxPacket,
// 39 FRAME *frame,
// 40 SECURITY_STATUS *securityStatus);
// 41 static ROOT void HandleOutgoingSecurity (MAC_TX_PACKET *macTxPacket,
// 42 FRAME *frame,
// 43 SECURITY_STATUS *securityStatus);
// 44 static ROOT void LoadAndStartStrobe (BYTE txMode,
// 45 BOOL slotted,
// 46 BYTE be,
// 47 BYTE nb,
// 48 BYTE randomBackoff,
// 49 BYTE noOfBackoffsLeft);
// 50 static ROOT void ReadCsmaParams (BYTE *be,
// 51 BYTE *nb,
// 52 BYTE *randomBackoff);
// 53 ROOT void WriteCsmaParams (BYTE be,
// 54 BYTE nb,
// 55 BYTE randomBackoff,
// 56 BYTE noOfBackoffsLeft);
// 57 ROOT void PrepareFrameAndWriteToRf (MAC_TX_PACKET *macTxPacket,
// 58 SECURITY_STATUS *securityStatus);
// 59
// 60 //-------------------------------------------------------------------------------------------------------
// 61 // void mtxCommStatusIndication(MAC_TX_PACKET *pPacket, BYTE status)
// 62 //
// 63 // DESCRIPTION:
// 64 // This function generates comm-status indications for transmitted packets, by parsing the
// 65 // packet header.
// 66 //
// 67 // ARGUMENTS:
// 68 // MAC_TX_PACKET *pPacket
// 69 // A pointer to the transmitted packet (which the address information will be extracted from)
// 70 // BYTE status
// 71 // The status to be passed in mlmeCommStatusIndication
// 72 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 73 ROOT void mtxCommStatusIndication(MAC_TX_PACKET *pPacket, BYTE status) {
mtxCommStatusIndication:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function mtxCommStatusIndication
FUNCALL mtxCommStatusIndication, mlmeCommStatusIndication
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
MOV A,#-0xb
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V3 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
MOV A,R2
MOV R4,A
MOV A,R3
MOV R5,A
MOV ?V0 + 2,R1
// 74 BYTE dstAddrMode;
// 75 ADDRESS *pDstAddr;
// 76 BYTE srcAddrMode;
// 77 ADDRESS *pSrcAddr;
// 78 BYTE *pTemp;
// 79
// 80 // Point to the first byte of the frame control field
// 81 pTemp = pPacket->pHeader;
// 82
// 83 // Move on to the high byte, which contains the address modes
// 84 pTemp += 1;
MOV A,R4
ADD A,#0x4
MOV R2,A
MOV A,R5
ADDC A,#0x0
MOV R3,A
// 85 dstAddrMode = (BYTE)((*pTemp & DEST_ADDR_BM) >> (DEST_ADDR_MODE_IDX - 8));
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
MOV R6,A
MOV A,#0xc
ANL A,R6
CLR C
RRC A
RRC A
MOV R7,A
// 86 srcAddrMode = (BYTE)((*pTemp & SRC_ADDR_BM) >> (SRC_ADDR_MODE_IDX - 8));
MOV A,R6
SWAP A
RRC A
RRC A
ANL A,#0x3
MOV R6,A
// 87
// 88 // Move on to the PAN ID (skip the sequence number)
// 89 pTemp += 2;
MOV A,R2
ADD A,#0x2
INC R2
INC R2
MOV A,R3
ADDC A,#0x0
MOV R3,A
// 90
// 91 // Get a pointer to each address, without modifying the pointer any further
// 92 pDstAddr = (ADDRESS *) (pTemp + 2);
MOV A,R2
ADD A,#0x2
MOV R0,A
MOV A,R3
ADDC A,#0x0
MOV R1,A
MOV ?V0 + 0,R0
MOV ?V0 + 1,R1
// 93 pSrcAddr = (ADDRESS *) ((BYTE *) pDstAddr + ((dstAddrMode == DEST_ADDR_SHORT) ?
// 94 2 : 8) + ((*(pPacket->pHeader) & INTRA_PAN_BM) ? 0 : 2));
MOV A,#0x8
XRL A,R7
JNZ ??mtxCommStatusIndication_0
MOV R0,#0x2
SJMP ??mtxCommStatusIndication_1
??mtxCommStatusIndication_0:
MOV R0,#0x8
??mtxCommStatusIndication_1:
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV C,0xE0 /* A */.6
JNC ??mtxCommStatusIndication_2
MOV R4,#0x0
SJMP ??mtxCommStatusIndication_3
??mtxCommStatusIndication_2:
MOV R4,#0x2
??mtxCommStatusIndication_3:
MOV A,?V0 + 0
ADD A,R0
MOV R0,A
MOV A,R1
ADDC A,#0x0
MOV R1,A
MOV A,R4
ADD A,R0
MOV R4,A
CLR A
ADDC A,R1
MOV R5,A
// 95
// 96 // Make the call to the higher layer
// 97 mlmeCommStatusIndication(*((WORD *) pTemp), srcAddrMode, pSrcAddr, dstAddrMode, pDstAddr, status);
; Setup parameters for call to function mlmeCommStatusIndication
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_ONE
CFI CFA_XSP16 add(XSP16, 12)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 14)
MOV A,R7
MOV ?V0 + 0,A
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_ONE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -