📄 mac_loc.lst
字号:
\ 00006E ; Setup parameters for call to function getJoystickDirection
\ 00006E 90.... MOV DPTR,#(getJoystickDirection & 0xffff)
\ 000071 74.. MOV A,#((getJoystickDirection >> 16) & 0xff)
\ 000073 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000076 E9 MOV A,R1
\ 000077 FA MOV R2,A
\ 000078 7403 MOV A,#0x3
\ 00007A 6A XRL A,R2
\ 00007B 7003 JNZ ??main_2
\ 00007D E4 CLR A
\ 00007E 8007 SJMP ??main_3
\ ??main_2:
\ 000080 7404 MOV A,#0x4
\ 000082 6A XRL A,R2
\ 000083 70E9 JNZ ??main_1
\ 000085 7401 MOV A,#0x1
\ ??main_3:
\ 000087 90.... MOV DPTR,#nodeType
\ 00008A F0 MOVX @DPTR,A
117
118 // Wait for device mode selection
119 WaitForDeviceModeSelection (&nodeType);
120
121 StartDevice ();
\ 00008B ; Setup parameters for call to function StartDevice
\ 00008B 90.... MOV DPTR,#(??StartDevice & 0xffff)
\ 00008E 74.. MOV A,#((??StartDevice >> 16) & 0xff)
\ 000090 12.... LCALL ?BCALL ; Banked call to: DPTR()
122 txOptions = TX_OPT_ACK_REQ;
\ 000093 7401 MOV A,#0x1
\ 000095 90.... MOV DPTR,#txOptions
\ 000098 F0 MOVX @DPTR,A
123
124 if (nodeType == REF_NODE)
\ 000099 90.... MOV DPTR,#nodeType
\ 00009C E0 MOVX A,@DPTR
\ 00009D 7015 JNZ ??main_4
125 {
126 resetCoordinates = (BUTTON_PRESSED() ? TRUE : FALSE);
\ 00009F A281 MOV C,0x80.1
\ 0000A1 4004 JC ??main_5
\ 0000A3 D2F0 SETB B.0
\ 0000A5 8002 SJMP ??main_6
\ ??main_5:
\ 0000A7 C2F0 CLR B.0
\ ??main_6:
\ 0000A9 A2F0 MOV C,B.0
\ 0000AB E4 CLR A
\ 0000AC 92E0 MOV 0xE0 /* A */.0,C
\ 0000AE F9 MOV R1,A
127 RunRefNode(resetCoordinates);
\ 0000AF ; Setup parameters for call to function RunRefNode
\ 0000AF 12.... LCALL RunRefNode & 0xFFFF
\ 0000B2 8014 SJMP ??main_7
128 }
129 else if (nodeType == BLIND_NODE)
\ ??main_4:
\ 0000B4 6401 XRL A,#0x1
\ 0000B6 7010 JNZ ??main_7
130 {
131 if(CHIPID == 0x89)
\ 0000B8 90DF61 MOV DPTR,#-0x209f
\ 0000BB E0 MOVX A,@DPTR
\ 0000BC 6489 XRL A,#0x89
\ 0000BE 7008 JNZ ??main_7
132 {
133 RunBlindNode();
\ 0000C0 ; Setup parameters for call to function RunBlindNode
\ 0000C0 90.... MOV DPTR,#(RunBlindNode & 0xffff)
\ 0000C3 74.. MOV A,#((RunBlindNode >> 16) & 0xff)
\ ??main_8:
\ 0000C5 12.... LCALL ?BCALL ; Banked call to: DPTR()
134 }
135 }
136
137 while(TRUE)
138 {
139 LED1 ^= 1;
\ ??main_7:
\ 0000C8 639001 XRL 0x90,#0x1
\ 0000CB E590 MOV A,0x90
140 halWait(200);
\ 0000CD ; Setup parameters for call to function halWait
\ 0000CD 79C8 MOV R1,#-0x38
\ 0000CF 90.... MOV DPTR,#(halWait & 0xffff)
\ 0000D2 74.. MOV A,#((halWait >> 16) & 0xff)
\ 0000D4 80EF SJMP ??main_8
141 }
142 }
143
144
145 /******************************************************************************
146 *
147 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
148 static void StartDevice (void)
\ ??StartDevice:
149 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 1
\ 000004 74FF MOV A,#-0x1
\ 000006 12.... LCALL ?ALLOC_XSTACK8
150 BYTE setAttributeValue;
151
152 // Fetch IEEE Address
153 FetchIeeeAddress(aExtendedAddress);
\ 000009 ; Setup parameters for call to function FetchIeeeAddress
\ 000009 7A.. MOV R2,#(aExtendedAddress & 0xff)
\ 00000B 7B.. MOV R3,#((aExtendedAddress >> 8) & 0xff)
\ 00000D 12.... LCALL FetchIeeeAddress & 0xFFFF
154 // Set Short Address to random if not set
155 if (aExtendedAddress[7] == 0xFF)
\ 000010 90.... MOV DPTR,#(aExtendedAddress + 7)
\ 000013 E0 MOVX A,@DPTR
\ 000014 64FF XRL A,#0xff
\ 000016 7020 JNZ ??StartDevice_1
156 {
157 halInitRandomGenerator();
\ 000018 ; Setup parameters for call to function halInitRandomGenerator
\ 000018 90.... MOV DPTR,#(halInitRandomGenerator & 0xffff)
\ 00001B 74.. MOV A,#((halInitRandomGenerator >> 16) & 0xff)
\ 00001D 12.... LCALL ?BCALL ; Banked call to: DPTR()
158 CLOCK_RANDOM_GENERATOR();
\ 000020 43B404 ORL 0xb4,#0x4
159 GET_RANDOM_BYTE(aExtendedAddress[6]);
\ 000023 43B404 ORL 0xb4,#0x4
\ 000026 E5BD MOV A,0xbd
\ 000028 90.... MOV DPTR,#(aExtendedAddress + 6)
\ 00002B F0 MOVX @DPTR,A
160 CLOCK_RANDOM_GENERATOR();
\ 00002C 43B404 ORL 0xb4,#0x4
161 GET_RANDOM_BYTE(aExtendedAddress[7]);
\ 00002F 43B404 ORL 0xb4,#0x4
\ 000032 E5BD MOV A,0xbd
\ 000034 90.... MOV DPTR,#(aExtendedAddress + 7)
\ 000037 F0 MOVX @DPTR,A
162 }
163
164 myShortAddr = aExtendedAddress[6] << 8 | aExtendedAddress[7];
\ ??StartDevice_1:
\ 000038 90.... MOV DPTR,#(aExtendedAddress + 6)
\ 00003B E0 MOVX A,@DPTR
\ 00003C F9 MOV R1,A
\ 00003D 90.... MOV DPTR,#(aExtendedAddress + 7)
\ 000040 E0 MOVX A,@DPTR
\ 000041 90.... MOV DPTR,#myShortAddr
\ 000044 F0 MOVX @DPTR,A
\ 000045 A3 INC DPTR
\ 000046 E9 MOV A,R1
\ 000047 F0 MOVX @DPTR,A
165
166 // Reset the MAC layer
167 mlmeResetRequest(TRUE);
\ 000048 ; Setup parameters for call to function mlmeResetRequest
\ 000048 7901 MOV R1,#0x1
\ 00004A 12.... LCALL mlmeResetRequest & 0xFFFF
168
169 // Update PIB attributes
170 mlmeSetRequest(MAC_SHORT_ADDRESS, (void *)&myShortAddr);
\ 00004D ; Setup parameters for call to function mlmeSetRequest
\ 00004D 7A.. MOV R2,#(myShortAddr & 0xff)
\ 00004F 7B.. MOV R3,#((myShortAddr >> 8) & 0xff)
\ 000051 7953 MOV R1,#0x53
\ 000053 12.... LCALL mlmeSetRequest & 0xFFFF
171 panId = PANID;
\ 000056 90.... MOV DPTR,#panId
\ 000059 7431 MOV A,#0x31
\ 00005B F0 MOVX @DPTR,A
\ 00005C A3 INC DPTR
\ 00005D 7424 MOV A,#0x24
\ 00005F F0 MOVX @DPTR,A
172 mlmeSetRequest(MAC_PAN_ID, &panId);
\ 000060 ; Setup parameters for call to function mlmeSetRequest
\ 000060 7A.. MOV R2,#(panId & 0xff)
\ 000062 7B.. MOV R3,#((panId >> 8) & 0xff)
\ 000064 7950 MOV R1,#0x50
\ 000066 12.... LCALL mlmeSetRequest & 0xFFFF
173 setAttributeValue = 0x0F;
\ 000069 740F MOV A,#0xf
\ 00006B 85..82 MOV DPL,?XSP + 0
\ 00006E 85..83 MOV DPH,?XSP + 1
\ 000071 F0 MOVX @DPTR,A
174 mlmeSetRequest(MAC_BEACON_ORDER, &setAttributeValue);
\ 000072 ; Setup parameters for call to function mlmeSetRequest
\ 000072 AA82 MOV R2,DPL
\ 000074 AB83 MOV R3,DPH
\ 000076 7947 MOV R1,#0x47
\ 000078 12.... LCALL mlmeSetRequest & 0xFFFF
175 mlmeSetRequest(MAC_SUPERFRAME_ORDER, &setAttributeValue);
\ 00007B ; Setup parameters for call to function mlmeSetRequest
\ 00007B AA82 MOV R2,DPL
\ 00007D AB83 MOV R3,DPH
\ 00007F 7954 MOV R1,#0x54
\ 000081 12.... LCALL mlmeSetRequest & 0xFFFF
176 setAttributeValue = FALSE;
\ 000084 E4 CLR A
\ 000085 F0 MOVX @DPTR,A
177 mlmeSetRequest(MAC_AUTO_REQUEST, &setAttributeValue);
\ 000086 ; Setup parameters for call to function mlmeSetRequest
\ 000086 AA82 MOV R2,DPL
\ 000088 AB83 MOV R3,DPH
\ 00008A 7942 MOV R1,#0x42
\ 00008C 12.... LCALL mlmeSetRequest & 0xFFFF
178 setAttributeValue = TRUE;
\ 00008F 7401 MOV A,#0x1
\ 000091 F0 MOVX @DPTR,A
179 mlmeSetRequest(MAC_RX_ON_WHEN_IDLE, &setAttributeValue);
\ 000092 ; Setup parameters for call to function mlmeSetRequest
\ 000092 AA82 MOV R2,DPL
\ 000094 AB83 MOV R3,DPH
\ 000096 7952 MOV R1,#0x52
\ 000098 12.... LCALL mlmeSetRequest & 0xFFFF
180
181 msupSetChannel(CHANNEL, TRUE);
\ 00009B ; Setup parameters for call to function msupSetChannel
\ 00009B 7A01 MOV R2,#0x1
\ 00009D 7910 MOV R1,#0x10
\ 00009F 12.... LCALL msupSetChannel & 0xFFFF
182 }
\ 0000A2 7401 MOV A,#0x1
\ 0000A4 12.... LCALL ?DEALLOC_XSTACK8
\ 0000A7 D083 POP DPH
\ 0000A9 D082 POP DPL
\ 0000AB 02.... LJMP ?BRET
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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -