📄 mac.s51
字号:
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 117 mpib.macSuperframeOrder = BEACON_ORDER_NO_BEACON;
MOV A,#0xf
MOV DPTR,#(mpib + 34)
MOVX @DPTR,A
// 118 mpib.macTransactionPersistenceTime = 0x01F4;
MOV DPTR,#(mpib + 35)
MOV A,#-0xc
MOVX @DPTR,A
INC DPTR
MOV A,#0x1
MOVX @DPTR,A
// 119 memset(mpib.pMacCoordExtendedAddress, 0xFF, sizeof(mpib.pMacCoordExtendedAddress));
; Setup parameters for call to function memset
MOV ?V0 + 0,#0x8
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 13)
MOV R4,#-0x1
MOV R5,#0x0
MOV R2,#((mpib + 14) & 0xff)
MOV R3,#(((mpib + 14) >> 8) & 0xff)
MOV DPTR,#(memset & 0xffff)
MOV A,#((memset >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
// 120 mpib.macAssociatedPanCordinator = TRUE;
MOV A,#0x1
MOV DPTR,#(mpib + 37)
MOVX @DPTR,A
// 121
// 122 #if MAC_OPT_ACL_SIZE > 0
// 123 mpib.ppMacACLEntryDescriptorSet = NULL;
// 124 mpib.macACLEntryDescriptorSetSize = 0;
// 125 #endif
// 126
// 127 #if MAC_OPT_SECURITY
// 128 mpib.macDefaultSecurity = FALSE;
// 129 mpib.macDefaultSecurityMaterialLength = 0x15;
// 130 mpib.pMacDefaultSecurityMaterial = NULL;
// 131 mpib.macDefaultSecuritySuite = 0;
// 132 #endif
// 133
// 134 #if ((MAC_OPT_SECURITY) || (MAC_OPT_ACL_SIZE>0))
// 135 mpib.macSecurityMode = 0;
// 136 #endif
// 137 }
// 138
// 139 // Configure CC2430 registers
// 140 mpmRestoreRegsAndRam();
??mlmeResetRequest_0:
; Setup parameters for call to function mpmRestoreRegsAndRam
LCALL mpmRestoreRegsAndRam
// 141
// 142 // Turn the interrupts back on
// 143 EnableRfInterrupts ();
; Setup parameters for call to function EnableRfInterrupts
LCALL EnableRfInterrupts
// 144 ENABLE_TIMER2_INT();
SETB 0xb8.2
// 145
// 146 // Confirm
// 147 return SUCCESS;
MOV R1,#0x0
MOV R7,#0x4
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock0
// 148
// 149 } // mlmeResetRequest
// 150
// 151
// 152
// 153
// 154 //-------------------------------------------------------------------------------------------------------
// 155 // void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId, ADDRESS ...)
// 156 //
// 157 // DESCRIPTION:
// 158 // Transmit a data packet.
// 159 //
// 160 // PARAMETERS:
// 161 // BYTE addrModes
// 162 // Address mode for source and destination
// 163 // (SRC_ADDR_SHORT, SRC_ADDR_EXT or 0) | (DEST_ADDR_SHORT, DEST_ADDR_EXT or 0)
// 164 // WORD srcPanId
// 165 // Source PAN identifier
// 166 // ADDRESS *pSrcAddr
// 167 // Pointer to the source address (short or extended)
// 168 // WORD destPanId,
// 169 // Destination PAN identifier
// 170 // ADDRESS *pDestAddr,
// 171 // Pointer to the destination address (short or extended)
// 172 // UINT8 msduLength,
// 173 // The length of pMsdu[]
// 174 // BYTE *pMsdu,
// 175 // A pointer to the packet payload
// 176 // BYTE msduHandle,
// 177 // A handle to this packet which is used later on with mcpsPurgeRequest)( and mcpsDataConfirm()
// 178 // BYTE txOptions
// 179 // (TX_OPT_SECURITY_ENABLE | TX_OPT_INDIRECT | TX_OPT_GTS | TX_OPT_ACK_REQ) or TX_OPT_NONE
// 180 // Note: Indirect transmission only available for MAC_OPT_FFD=1
// 181 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 182 ROOT void mcpsDataRequest(BYTE addrModes, WORD srcPanId, ADDRESS *pSrcAddr, WORD destPanId,
mcpsDataRequest:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function mcpsDataRequest
// 183 ADDRESS *pDestAddr, UINT8 msduLength, BYTE *pMsdu,
// 184 BYTE msduHandle, BYTE txOptions) {
FUNCALL mcpsDataRequest, mtxpReservePacket
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, mcpsDataConfirm
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, msupPrepareHeader
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mcpsDataRequest, mtxpReleasePacket
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, mcpsDataConfirm
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, memcpy
LOCFRAME XSTACK, 20, STACK
ARGFRAME XSTACK, 20, STACK
FUNCALL mcpsDataRequest, msupCalcPacketDuration
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, mschReserveTask
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL mcpsDataRequest, mschAddTask
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
FUNCALL mcpsDataRequest, mschAddTask
LOCFRAME XSTACK, 21, STACK
ARGFRAME XSTACK, 21, STACK
MOV A,#-0xf
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 V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 15)
; Saved register size: 15
; Auto size: 3
MOV A,#-0x3
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
MOV A,R1
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV A,#0x12
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV A,#0x16
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 7,A
MOV A,#0x19
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 6,A
// 185 MAC_TX_PACKET *pPacket;
// 186 UINT8 temp;
// 187 BYTE *pPayload,
// 188 taskNumber;
// 189
// 190 // Reserve a packet to use with the TX engine
// 191 #if MAC_OPT_FFD
// 192 reservePacket:
// 193 pPacket = mtxpReservePacket();
??mcpsDataRequest_0:
; Setup parameters for call to function mtxpReservePacket
LCALL mtxpReservePacket
MOV ?V0 + 2,R2
MOV ?V0 + 3,R3
// 194 if (!pPacket) {
MOV A,R2
JNZ ??mcpsDataRequest_1
MOV A,R3
??mcpsDataRequest_1:
JNZ ??mcpsDataRequest_2
// 195 if (txOptions & TX_OPT_INDIRECT) {
MOV A,#0x1a
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV C,0xE0 /* A */.2
JNC ??mcpsDataRequest_0
// 196 mcpsDataConfirm(TRANSACTION_OVERFLOW, msduHandle);
; Setup parameters for call to function mcpsDataConfirm
MOV R2,?V0 + 6
MOV R1,#-0xf
??mcpsDataRequest_3:
LCALL mcpsDataConfirm
// 197 return;
LJMP ??mcpsDataRequest_4
// 198 } else {
// 199 goto reservePacket;
// 200 }
// 201 }
// 202 #else // RFD
// 203 if (txOptions & TX_OPT_INDIRECT) {
// 204 mcpsDataConfirm(INVALID_PARAMETER, msduHandle);
// 205 return;
// 206 }
// 207
// 208 reservePacket:
// 209 pPacket = mtxpReservePacket();
// 210 if (!pPacket) {
// 211 goto reservePacket;
// 212 }
// 213 #endif
// 214
// 215 // Set transmission mode
// 216 pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
??mcpsDataRequest_2:
MOV A,R2
ADD A,#-0x7a
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOV A,#0x1
MOVX @DPTR,A
// 217
// 218 // Set number of retries
// 219 pPacket->retriesLeft = aMaxFrameRetries;
MOV A,R2
ADD A,#-0x6f
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOV A,#0x3
MOVX @DPTR,A
// 220
// 221 // Store the msdu handle
// 222 pPacket->msduHandle = msduHandle;
MOV A,R2
ADD A,#-0x7e
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOV A,?V0 + 6
MOVX @DPTR,A
// 223
// 224 // Generate the packet header (and find security material, if enabled)
// 225 msupPrepareHeader(pPacket, FT_DATA, addrModes, srcPanId, pSrcAddr, destPanId, pDestAddr, txOptions);
; Setup parameters for call to function msupPrepareHeader
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 20)
MOV ?V0 + 4,R6
MOV ?V0 + 5,R7
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 22)
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
LCALL ?PUSH_XSTACK8_X_TWO
CFI CFA_XSP16 add(XSP16, 24)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 26)
MOV A,#0x22
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R5,A
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
MOV R1,#0x1
LCALL msupPrepareHeader
MOV A,#0x8
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
// 226
// 227 pPayload = pPacket->pPayload;
// 228
// 229 #if MAC_OPT_SECURITY
// 230 // Before calculating the PSDU length; make sure that the payload + MIC is less than aMaxMACFrameSize
// 231
// 232 // #bytes in frame counter + key sequence counter (0 or 5)
// 233 temp = msecProcessSecurityCounters(pPacket, pPayload);
// 234
// 235 // In case of frame counter overflow or missing key
// 236 // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY
// 237 if (pPacket->securitySuite >= 8) {
// 238 mtxpReleasePacket(pPacket);
// 239 mcpsDataConfirm(pPacket->securitySuite, msduHandle);
// 240 return;
// 241 }
// 242
// 243 // Increment payload pointer when counters inserted
// 244 pPayload += temp;
// 245
// 246 // Include msduLength and optional MIC (integrity code) length
// 247 temp += msduLength + pPacket->securitySetup.micLength;
// 248
// 249 #else
// 250 temp = msduLength;
// 251 #endif
// 252
// 253 // Is frame too long?
// 254 if (temp > aMaxMACFrameSize) {
MOV A,?V0 + 7
CLR C
SUBB A,#0x67
JC ??mcpsDataRequest_5
// 255 mtxpReleasePacket(pPacket);
; Setup parameters for call to function mtxpReleasePacket
MOV R2,?V0 + 2
MOV R3,?V0 + 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -