📄 mac.s51
字号:
MOV R2,#((macInfo + 1) & 0xff)
MOV R3,#(((macInfo + 1) >> 8) & 0xff)
// 77 *p++ = (DEFAULTID >>8)&0xFF; //MAC_LONG_ADDR_BYTE1;
MOV A,#0x4
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
MOV DPL,R2
MOV DPH,R3
INC DPTR
MOV R2,DPL
MOV R3,DPH
// 78 *p++ = DEFAULTID & 0xFF; //MAC_LONG_ADDR_BYTE0;
MOV A,#0x3
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 79
// 80
// 81
// 82 //ntInitAddressMap(); //init the address map
// 83 #ifdef LRWPAN_COORDINATOR
// 84 mac_pib.depth = 0;
MOV A,#0x0
MOV DPTR,#(mac_pib + 21)
MOVX @DPTR,A
// 85 #else
// 86 mac_pib.depth = 1; //depth will be at least one
// 87 #endif
// 88 mac_pib.bcnDepth = 0xFF; //remembers depth of node that responded to beacon
MOV A,#-0x1
MOV DPTR,#(mac_pib + 33)
MOVX @DPTR,A
// 89 //other capability information
// 90 mac_pib.macCapInfo = 0;
MOV A,#0x0
MOV DPTR,#(mac_pib + 22)
MOVX @DPTR,A
// 91 #ifdef LRWPAN_ALT_COORDINATOR //not supported, included for completeness
// 92 LRWPAN_SET_CAPINFO_ALTPAN(mac_pib.macCapInfo);
// 93 #endif
// 94 #ifdef LRWPAN_FFD
// 95 LRWPAN_SET_CAPINFO_DEVTYPE(mac_pib.macCapInfo);
MOV DPTR,#(mac_pib + 22)
MOVX A,@DPTR
SETB 0xE0 /* A */.1
MOVX @DPTR,A
// 96 #endif
// 97 #ifdef LRWPAN_ACMAIN_POWERED
// 98 LRWPAN_SET_CAPINFO_PWRSRC(mac_pib.macCapInfo);
MOV DPTR,#(mac_pib + 22)
MOVX A,@DPTR
SETB 0xE0 /* A */.2
MOVX @DPTR,A
// 99 #endif
// 100 #ifdef LRWPAN_RCVR_ON_WHEN_IDLE
// 101 LRWPAN_SET_CAPINFO_RONIDLE(mac_pib.macCapInfo);
MOV DPTR,#(mac_pib + 22)
MOVX A,@DPTR
SETB 0xE0 /* A */.3
MOVX @DPTR,A
// 102 #endif
// 103 #ifdef LRWPAN_SECURITY_CAPABLE
// 104 LRWPAN_SET_CAPINFO_SECURITY(mac_pib.macCapInfo);
// 105 #endif
// 106 //always allocate a short address
// 107 LRWPAN_SET_CAPINFO_ALLOCADDR(mac_pib.macCapInfo);
MOV DPTR,#(mac_pib + 22)
MOVX A,@DPTR
SETB 0xE0 /* A */.7
MOVX @DPTR,A
// 108
// 109
// 110 }
MOV R7,#0x4
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock0
// 111
// 112 //this assumes that phyInit, macInit has previously been called.
// 113 //turns on the radio
// 114
RSEG NEAR_CODE:CODE:NOROOT(0)
// 115 LRWPAN_STATUS_ENUM macInitRadio(void) {
macInitRadio:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function macInitRadio
FUNCALL macInitRadio, halInitRadio
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
FUNCALL macInitRadio, halSetRadioPANID
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL macInitRadio, halSetRadioShortAddr
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, 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
// 116
// 117 phy_pib.phyCurrentFrequency = LRWPAN_DEFAULT_FREQUENCY;
MOV A,#0x0
MOV DPTR,#phy_pib
MOVX @DPTR,A
// 118 phy_pib.phyCurrentChannel = LRWPAN_DEFAULT_START_CHANNEL;
MOV A,#0xb
MOV DPTR,#(phy_pib + 1)
MOVX @DPTR,A
// 119 if (phy_pib.phyCurrentChannel < 11){
MOV DPTR,#(phy_pib + 1)
MOVX A,@DPTR
CLR C
SUBB A,#0xb
JNC ??macInitRadio_0
// 120 mac_pib.macAckWaitDuration = SYMBOLS_TO_MACTICKS(120);
MOV DPTR,#__Constant_78
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV DPTR,#mac_pib
MOV R0,#?V0 + 0
LCALL ?L_MOV_TO_X
SJMP ??macInitRadio_1
// 121 }
// 122 else {
// 123 mac_pib.macAckWaitDuration = SYMBOLS_TO_MACTICKS(54);
??macInitRadio_0:
MOV DPTR,#__Constant_36
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV DPTR,#mac_pib
MOV R0,#?V0 + 0
LCALL ?L_MOV_TO_X
// 124 }
// 125
// 126 a_phy_service.args.phy_init_radio_args.radio_flags.bits.listen_mode = 0;
??macInitRadio_1:
MOV DPTR,#(a_phy_service + 1)
MOVX A,@DPTR
ANL A,#0xfe
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0xff
MOVX @DPTR,A
// 127 #ifdef LRWPAN_COORDINATOR
// 128 a_phy_service.args.phy_init_radio_args.radio_flags.bits.pan_coordinator = 1;
MOV DPTR,#(a_phy_service + 1)
MOVX A,@DPTR
ORL A,#0x2
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ORL A,#0x0
MOVX @DPTR,A
// 129 #else
// 130 a_phy_service.args.phy_init_radio_args.radio_flags.bits.pan_coordinator = 0;
// 131 #endif
// 132
// 133 halInitRadio(phy_pib.phyCurrentFrequency,
// 134 phy_pib.phyCurrentChannel,
// 135 a_phy_service.args.phy_init_radio_args.radio_flags);
; Setup parameters for call to function halInitRadio
MOV DPTR,#(a_phy_service + 1)
MOV A,#0x2
LCALL ?PUSH_XSTACK8_X
CFI CFA_XSP16 add(XSP16, 13)
MOV DPTR,#(phy_pib + 1)
MOVX A,@DPTR
MOV R2,A
MOV DPTR,#phy_pib
MOVX A,@DPTR
MOV R1,A
LCALL halInitRadio
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
// 136
// 137
// 138
// 139 #ifdef LRWPAN_USE_STATIC_PANID
// 140 halSetRadioPANID(LRWPAN_DEFAULT_PANID); //listen on this PANID
; Setup parameters for call to function halSetRadioPANID
MOV R2,#0x47
MOV R3,#0x13
LCALL halSetRadioPANID
// 141 #else
// 142 halSetRadioPANID(0xFFFF); //broadcast
// 143 #endif
// 144 halSetRadioShortAddr(0xFFFE); //non-broadcast, reserved
; Setup parameters for call to function halSetRadioShortAddr
MOV R2,#-0x2
MOV R3,#-0x1
LCALL halSetRadioShortAddr
// 145 return(a_phy_service.status);
MOV DPTR,#(a_phy_service + 3)
MOVX A,@DPTR
MOV R1,A
MOV R7,#0x4
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock1
// 146 }
// 147
RSEG NEAR_CODE:CODE:NOROOT(0)
// 148 void macSetPANID(UINT16 panid){
macSetPANID:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function macSetPANID
FUNCALL macSetPANID, halSetRadioPANID
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 149 mac_pib.macPANID = panid;
MOV DPTR,#(mac_pib + 18)
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
// 150 halSetRadioPANID(mac_pib.macPANID);
; Setup parameters for call to function halSetRadioPANID
MOV DPTR,#(mac_pib + 18)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
LCALL halSetRadioPANID
// 151 }
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 152
// 153
RSEG NEAR_CODE:CODE:NOROOT(0)
// 154 void macSetChannel(BYTE channel){
macSetChannel:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function macSetChannel
FUNCALL macSetChannel, halSetChannel
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
MOV A,R1
MOV R6,A
// 155 phy_pib.phyCurrentChannel = channel;
MOV A,R6
MOV DPTR,#(phy_pib + 1)
MOVX @DPTR,A
// 156 halSetChannel(channel);
; Setup parameters for call to function halSetChannel
MOV A,R6
MOV R1,A
LCALL halSetChannel
// 157 }
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 158
RSEG NEAR_CODE:CODE:NOROOT(0)
// 159 BYTE macGetChannel()
macGetChannel:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function macGetChannel
// 160 {
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
// 161 return phy_pib.phyCurrentChannel;
MOV DPTR,#(phy_pib + 1)
MOVX A,@DPTR
MOV R1,A
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-3
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-2
RET
CFI EndBlock cfiBlock4
// 162 }
// 163
RSEG NEAR_CODE:CODE:NOROOT(0)
// 164 void macSetShortAddr(UINT16 saddr) {
macSetShortAddr:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function macSetShortAddr
FUNCALL macSetShortAddr, halSetRadioShortAddr
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 165
// 166 halSetRadioShortAddr(saddr);
; Setup parameters for call to function halSetRadioShortAddr
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
LCALL halSetRadioShortAddr
// 167 }
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock5
// 168
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 169 unsigned char gMacDSN=0;
gMacDSN:
DS 1
RSEG NEAR_CODE:CODE:NOROOT(0)
// 170 void MACPutHeader(NODE_INFO *dest, BYTE frameCON)
MACPutHeader:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function MACPutHeader
// 171 {
FUNCALL MACPutHeader, halGetProcessorIEEEAddress_ASC
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
MOV A,#-0xd
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 V5 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 13)
; Saved register size: 13
; Auto size: 0
MOV ?V0 + 1,R1
// 172 BYTE c;
// 173 BYTE dstmode, srcmode;
// 174
// 175 //DEBUG_STRING(DBG_TX,"macTxData()-header\n");
// 176
// 177 a_mac_tx_data.fcflsb = frameCON;
MOV A,?V0 + 1
MOV DPTR,#(a_mac_tx_data + 14)
MOVX @DPTR,A
// 178 a_mac_tx_data.fcfmsb = LRWPAN_FCF_DSTMODE_SADDR|LRWPAN_FCF_SRCMODE_NOADDR;
MOV A,#0x8
MOV DPTR,#(a_mac_tx_data + 15)
MOVX @DPTR,A
// 179 a_mac_tx_data.DestAddr.saddr = LRWPAN_BCAST_PANID;
MOV DPTR,#(a_mac_tx_data + 2)
MOV A,#-0x1
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -