📄 mac_loc.s51
字号:
MOV DPTR,#(halInitRandomGenerator & 0xffff)
MOV A,#((halInitRandomGenerator >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 158 CLOCK_RANDOM_GENERATOR();
ORL 0xb4,#0x4
// 159 GET_RANDOM_BYTE(aExtendedAddress[6]);
ORL 0xb4,#0x4
MOV A,0xbd
MOV DPTR,#(aExtendedAddress + 6)
MOVX @DPTR,A
// 160 CLOCK_RANDOM_GENERATOR();
ORL 0xb4,#0x4
// 161 GET_RANDOM_BYTE(aExtendedAddress[7]);
ORL 0xb4,#0x4
MOV A,0xbd
MOV DPTR,#(aExtendedAddress + 7)
MOVX @DPTR,A
// 162 }
// 163
// 164 myShortAddr = aExtendedAddress[6] << 8 | aExtendedAddress[7];
??StartDevice_1:
MOV DPTR,#(aExtendedAddress + 6)
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(aExtendedAddress + 7)
MOVX A,@DPTR
MOV DPTR,#myShortAddr
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 165
// 166 // Reset the MAC layer
// 167 mlmeResetRequest(TRUE);
; Setup parameters for call to function mlmeResetRequest
MOV R1,#0x1
LCALL mlmeResetRequest & 0xFFFF
// 168
// 169 // Update PIB attributes
// 170 mlmeSetRequest(MAC_SHORT_ADDRESS, (void *)&myShortAddr);
; Setup parameters for call to function mlmeSetRequest
MOV R2,#(myShortAddr & 0xff)
MOV R3,#((myShortAddr >> 8) & 0xff)
MOV R1,#0x53
LCALL mlmeSetRequest & 0xFFFF
// 171 panId = PANID;
MOV DPTR,#panId
MOV A,#0x31
MOVX @DPTR,A
INC DPTR
MOV A,#0x24
MOVX @DPTR,A
// 172 mlmeSetRequest(MAC_PAN_ID, &panId);
; Setup parameters for call to function mlmeSetRequest
MOV R2,#(panId & 0xff)
MOV R3,#((panId >> 8) & 0xff)
MOV R1,#0x50
LCALL mlmeSetRequest & 0xFFFF
// 173 setAttributeValue = 0x0F;
MOV A,#0xf
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 174 mlmeSetRequest(MAC_BEACON_ORDER, &setAttributeValue);
; Setup parameters for call to function mlmeSetRequest
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x47
LCALL mlmeSetRequest & 0xFFFF
// 175 mlmeSetRequest(MAC_SUPERFRAME_ORDER, &setAttributeValue);
; Setup parameters for call to function mlmeSetRequest
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x54
LCALL mlmeSetRequest & 0xFFFF
// 176 setAttributeValue = FALSE;
CLR A
MOVX @DPTR,A
// 177 mlmeSetRequest(MAC_AUTO_REQUEST, &setAttributeValue);
; Setup parameters for call to function mlmeSetRequest
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x42
LCALL mlmeSetRequest & 0xFFFF
// 178 setAttributeValue = TRUE;
MOV A,#0x1
MOVX @DPTR,A
// 179 mlmeSetRequest(MAC_RX_ON_WHEN_IDLE, &setAttributeValue);
; Setup parameters for call to function mlmeSetRequest
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x52
LCALL mlmeSetRequest & 0xFFFF
// 180
// 181 msupSetChannel(CHANNEL, TRUE);
; Setup parameters for call to function msupSetChannel
MOV R2,#0x1
MOV R1,#0x10
LCALL msupSetChannel & 0xFFFF
// 182 }
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 XSP16+0
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-4
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-3
LJMP ?BRET
CFI EndBlock cfiBlock1
// 183
// 184
// 185 /******************************************************************************
// 186 *
// 187 ******************************************************************************/
// 188 static void WaitForDeviceModeSelection (NODE_TYPE *deviceMode)
// 189 {
// 190 #ifdef SOC_BB
// 191 // setup P1_7 as pull-up input
// 192 IO_IMODE_PORT_PIN(1, 7, IO_IMODE_PUD);
// 193 IO_PUD_PORT(1, IO_PULLUP);
// 194 IO_DIR_PORT_PIN(1, 7, IO_IN);
// 195 // setup P1_6 as output
// 196 IO_DIR_PORT_PIN(1, 6, IO_OUT);
// 197 P1_6 = 0;
// 198 halWait(100);
// 199
// 200 if(P1_7 == 0) //If P1_7 == 0 then P1_7 is shorted to P1_6 wich is set to 0
// 201 {
// 202 *deviceMode = REF_NODE;
// 203 }
// 204 else
// 205 {
// 206 *deviceMode = BLIND_NODE;
// 207 }
// 208 IO_DIR_PORT_PIN(1, 6, IO_IN);
// 209 #else
// 210 JOYSTICK_DIRECTION jsd;
// 211 BOOL selected = FALSE;
// 212 while (!selected)
// 213 {
// 214 jsd = getJoystickDirection( );
// 215 if ( jsd == UP)
// 216 {
// 217 // reference node
// 218 *deviceMode = REF_NODE;
// 219 selected = TRUE;
// 220 }
// 221 else if (jsd == DOWN)
// 222 {
// 223 // blind node
// 224 *deviceMode = BLIND_NODE;
// 225 selected = TRUE;
// 226 }
// 227 }
// 228 #endif
// 229 return;
// 230 }
// 231
// 232
// 233 /******************************************************************************
// 234 *
// 235 * Wait for a packet to be transmitted. dataConfirmMsduHandle and
// 236 * dataConfirmStatus is set in mcpsDataConfirm routine which is called from
// 237 * the mac
// 238 ******************************************************************************/
// 239 static void WaitForPacketTransmission (BYTE msduHandle)
// 240 {
// 241 BOOL loop = TRUE;
// 242 do
// 243 {
// 244 if (dataConfirmMsduHandle == msduHandle)
// 245 {
// 246 if (dataConfirmStatus != INVALID_STATUS)
// 247 loop = FALSE;
// 248 }
// 249 }while (loop);
// 250 }
// 251
// 252 /******************************************************************************
// 253 *
// 254 * DESCRIPTION:
// 255 * mcpsDataIndication is generated by the MAC layer when a data frame is
// 256 * successfully received.
// 257 * The higher layer is not required to return quickly from this callback.
// 258 * Note, however, that:
// 259 * - No more incoming packets will be processed until this function has
// 260 * returned, in fact all mechanisms except beacon handling and already
// 261 * scheduled transmissions will be halted.
// 262 * - One slot in the RX packet pool will be occupied.
// 263 *
// 264 * PARAMETERS:
// 265 * MCPS_DATA_INDICATION *pMDI
// 266 * A pointer to the structure containing the received packet
// 267 *
// 268 ******************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 269 ROOT void mcpsDataIndication(MCPS_DATA_INDICATION *pMDI)
mcpsDataIndication:
CFI Block cfiBlock2 Using cfiCommon1
CFI Function mcpsDataIndication
// 270 {
FUNCALL mcpsDataIndication, NodeDataIndication
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 271 NodeDataIndication(pMDI);
; Setup parameters for call to function NodeDataIndication
MOV DPTR,#(NodeDataIndication & 0xffff)
MOV A,#((NodeDataIndication >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 272 }
SJMP ??Subroutine0_0
CFI EndBlock cfiBlock2
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock3 Using cfiCommon1
CFI NoFunction
CFI CFA_SP SP+-4
CFI DPL0 Frame(CFA_SP, 3)
CFI DPH0 Frame(CFA_SP, 4)
MOVX @DPTR,A
??Subroutine0_0:
POP DPH
CFI CFA_SP SP+-3
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-2
CFI DPL0 SameValue
RET
CFI EndBlock cfiBlock3
// 273
// 274
// 275 /******************************************************************************
// 276 *
// 277 * DESCRIPTION:
// 278 * mcpsDataConfirm is called by the MAC layer when a packet transmission
// 279 * initiated by mcpsDataRequest(...) has succeeded or failed.
// 280 *
// 281 * PARAMETERS:
// 282 * MAC_ENUM status
// 283 * The data confirm status.
// 284 * BYTE msduHandle
// 285 * The handle of the confirmed frame
// 286 *
// 287 ******************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 288 ROOT void mcpsDataConfirm(MAC_ENUM status, BYTE msduHandle)
mcpsDataConfirm:
CFI Block cfiBlock4 Using cfiCommon1
CFI Function mcpsDataConfirm
// 289 {
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 290 dataConfirmStatus = status;
MOV A,R1
MOV DPTR,#dataConfirmStatus
MOVX @DPTR,A
// 291 dataConfirmMsduHandle = msduHandle;
MOV A,R2
MOV DPTR,#dataConfirmMsduHandle
SJMP ?Subroutine0
CFI EndBlock cfiBlock4
// 292 }
// 293
// 294 /******************************************************************************
// 295 *
// 296 ******************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 297 ROOT void mlmePollConfirm(MAC_ENUM status)
mlmePollConfirm:
CFI Block cfiBlock5 Using cfiCommon1
CFI Function mlmePollConfirm
// 298 {
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 299 pollConfirmStatus = status;
MOV A,R1
MOV DPTR,#pollConfirmStatus
SJMP ?Subroutine0
CFI EndBlock cfiBlock5
// 300 }
// 301
// 302
// 303 /******************************************************************************
// 304 *
// 305 * This function return the IEEE address written to FLASH.
// 306 ******************************************************************************/
// 307 #define IEEE_ADDRESS_ARRAY 0xFFF8
RSEG NEAR_CODE:CODE:NOROOT(0)
// 308 ROOT void FetchIeeeAddress(unsigned char *ieeeAddress)
FetchIeeeAddress:
CFI Block cfiBlock6 Using cfiCommon1
CFI Function FetchIeeeAddress
// 309 {
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH DPH
CFI DPH0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
; Saved register size: 2
; Auto size: 0
// 310 unsigned char bank;
// 311
// 312 bank = MEMCTR;
MOV A,0xc7
MOV R4,A
// 313
// 314 // switch to bank 3
// 315 MEMCTR |= 0x30;
ORL 0xc7,#0x30
MOV A,0xc7
// 316
// 317 ieeeAddress[0] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 0);
MOV DPTR,#-0x8
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 318 ieeeAddress[1] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 1);
MOV DPTR,#-0x7
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
INC DPTR
MOVX @DPTR,A
// 319 ieeeAddress[2] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 2);
MOV DPTR,#-0x6
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
MOVX @DPTR,A
// 320 ieeeAddress[3] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 3);
MOV DPTR,#-0x5
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
// 321 ieeeAddress[4] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 4);
MOV DPTR,#-0x4
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
// 322 ieeeAddress[5] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 5);
MOV DPTR,#-0x3
CLR A
MOVC A,@A+DPTR
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -