📄 halstack.lst
字号:
253 //radio accepts all packets, the HUSSY!
254 MDMCTRL0H &= ~ADR_DECODE; //no address decode
\ 000046 90DF02 MOV DPTR,#-0x20fe
\ 000049 E0 MOVX A,@DPTR
\ 00004A C2E3 CLR 0xE0 /* A */.3
\ 00004C F0 MOVX @DPTR,A
255 MDMCTRL0L &= ~AUTO_ACK; //no auto ack
\ 00004D 90DF03 MOV DPTR,#-0x20fd
\ 000050 E0 MOVX A,@DPTR
\ 000051 C2E4 CLR 0xE0 /* A */.4
\ 000053 F0 MOVX @DPTR,A
\ 000054 800E SJMP ??halInitRadio_5
256 } else {
257 // Turning on Address Decoding
258 MDMCTRL0H |= ADR_DECODE;
\ ??halInitRadio_4:
\ 000056 90DF02 MOV DPTR,#-0x20fe
\ 000059 E0 MOVX A,@DPTR
\ 00005A D2E3 SETB 0xE0 /* A */.3
\ 00005C F0 MOVX @DPTR,A
259 //enable auto_ack
260 MDMCTRL0L |= AUTO_ACK;
\ 00005D 90DF03 MOV DPTR,#-0x20fd
\ 000060 E0 MOVX A,@DPTR
\ 000061 D2E4 SETB 0xE0 /* A */.4
\ 000063 F0 MOVX @DPTR,A
261 }
262 local_radio_flags = radio_flags; //save this for later
\ ??halInitRadio_5:
\ 000064 7408 MOV A,#0x8
\ 000066 12.... LCALL ?XSTACK_DISP0_8
\ 000069 7C.. MOV R4,#(local_radio_flags & 0xff)
\ 00006B 7D.. MOV R5,#((local_radio_flags >> 8) & 0xff)
\ 00006D 7402 MOV A,#0x2
\ 00006F 12.... LCALL ?MOVE_LONG8_XDATA_XDATA
263 // Setting for AUTO CRC
264 MDMCTRL0L |= AUTO_CRC;
\ 000072 90DF03 MOV DPTR,#-0x20fd
\ 000075 E0 MOVX A,@DPTR
\ 000076 D2E5 SETB 0xE0 /* A */.5
\ 000078 F0 MOVX @DPTR,A
265
266 //pan
267 if (radio_flags.bits.pan_coordinator) {
\ 000079 7408 MOV A,#0x8
\ 00007B 12.... LCALL ?XSTACK_DISP0_8
\ 00007E E0 MOVX A,@DPTR
\ 00007F 5402 ANL A,#0x2
\ 000081 6009 JZ ??halInitRadio_6
268 MDMCTRL0H |= PAN_COORDINATOR; //accepts frames with only source addressing modes
\ 000083 90DF02 MOV DPTR,#-0x20fe
\ 000086 E0 MOVX A,@DPTR
\ 000087 D2E4 SETB 0xE0 /* A */.4
\ 000089 F0 MOVX @DPTR,A
\ 00008A 8007 SJMP ??halInitRadio_7
269 } else {
270 MDMCTRL0H &= ~PAN_COORDINATOR; //rejects frames with only source addressing modes
\ ??halInitRadio_6:
\ 00008C 90DF02 MOV DPTR,#-0x20fe
\ 00008F E0 MOVX A,@DPTR
\ 000090 C2E4 CLR 0xE0 /* A */.4
\ 000092 F0 MOVX @DPTR,A
271 }
272
273 // Turning on AUTO_TX2RX
274 FSMTC1 = ((FSMTC1 & (~AUTO_TX2RX_OFF & ~RX2RX_TIME_OFF)) | ACCEPT_ACKPKT);
\ ??halInitRadio_7:
\ 000093 90DF54 MOV DPTR,#-0x20ac
\ 000096 E0 MOVX A,@DPTR
\ 000097 54F3 ANL A,#0xf3
\ 000099 4401 ORL A,#0x1
\ 00009B 90DF54 MOV DPTR,#-0x20ac
\ 00009E F0 MOVX @DPTR,A
275
276 // Turning off abortRxOnSrxon.
277 FSMTC1 &= ~0x20;
\ 00009F 90DF54 MOV DPTR,#-0x20ac
\ 0000A2 E0 MOVX A,@DPTR
\ 0000A3 C2E5 CLR 0xE0 /* A */.5
\ 0000A5 F0 MOVX @DPTR,A
278
279 //now configure the RX, TX systems.
280 // Setting the number of bytes to assert the FIFOP flag
281 IOCFG0 = 127; //set to max value as the FIFOP flag goes high when complete packet received
\ 0000A6 747F MOV A,#0x7f
\ 0000A8 90DF4F MOV DPTR,#-0x20b1
\ 0000AB F0 MOVX @DPTR,A
282
283 // Flushing both Tx and Rx FiFo. The flush-Rx is issued twice to reset the SFD.
284 // Calibrating the radio and turning on Rx to evaluate the CCA.
285 SRXON;
\ 0000AC 75E1C2 MOV 0xe1,#-0x3e
286 SFLUSHTX;
\ 0000AF 75E1C7 MOV 0xe1,#-0x39
287 SFLUSHRX;
\ 0000B2 75E1C6 MOV 0xe1,#-0x3a
288 SFLUSHRX;
\ 0000B5 75E1C6 MOV 0xe1,#-0x3a
289 STXCALN;
\ 0000B8 75E1C1 MOV 0xe1,#-0x3f
290 ISSTART;
\ 0000BB 75E1FE MOV 0xe1,#-0x2
291
292 SACKPEND; //routers/
\ 0000BE 75E1C9 MOV 0xe1,#-0x37
293
294 halSetRadioIEEEAddress();
\ 0000C1 ; Setup parameters for call to function halSetRadioIEEEAddress
\ 0000C1 12.... LCALL halSetRadioIEEEAddress
295
296 //Radio can interrupt when
297 //RX configuration
298 //clear flags/mask in radio
299 RFIF = 0;
\ 0000C4 75E900 MOV 0xe9,#0x0
300 RFIM = 0; //all interrupts are masked.
\ 0000C7 759100 MOV 0x91,#0x0
301 //enable RX interrupt on processor
302 INT_SETFLAG_RF(INT_CLR);
\ 0000CA 74FC MOV A,#-0x4
\ 0000CC 559B ANL A,0x9b
\ 0000CE FA MOV R2,A
\ 0000CF 8A9B MOV 0x9b,R2
303 INT_ENABLE_RF(INT_ON);
\ 0000D1 7401 MOV A,#0x1
\ 0000D3 459A ORL A,0x9a
\ 0000D5 FC MOV R4,A
\ 0000D6 8C9A MOV 0x9a,R4
304
305 //enable RX RFERR interrupt on processor
306 INT_SETFLAG_RFERR(INT_CLR);
\ 0000D8 C289 CLR 0x88.1
307 INT_ENABLE_RFERR(INT_ON);
\ 0000DA D2A8 SETB 0xa8.0
308
309 //do not use DMA at this point
310 //enable the RX receive interrupt here.
311 RFIM |= IRQ_FIFOP;
\ 0000DC 439120 ORL 0x91,#0x20
312
313 return(LRWPAN_STATUS_SUCCESS);
\ 0000DF 7900 MOV R1,#0x0
\ ??halInitRadio_2:
\ 0000E1 7F01 MOV R7,#0x1
\ 0000E3 02.... LJMP ?FUNC_LEAVE_XDATA
314 }
\ In segment CODE_C, align 1
\ ??xxxxromstr:
\ 000000 68616C49 DB "halInitRadio()\012"
\ 6E697452
\ 6164696F
\ 28290A00
315
316 #define PIN_CCA CCA //CCA is defined in hal.h
317
318 //regardless of what happens here, we will try TXONCCA after this returns.
\ In segment NEAR_CODE, align 1, keep-with-next
319 void doIEEE_backoff(void) {
\ doIEEE_backoff:
\ 000000 74F1 MOV A,#-0xf
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 15
\ 000005 ; Auto size: 6
\ 000005 74FA MOV A,#-0x6
\ 000007 12.... LCALL ?ALLOC_XSTACK8
320 BYTE be, nb, tmp, rannum;
321 UINT32 delay, start_tick;
322
323 be = aMinBE;
\ 00000A 7E00 MOV R6,#0x0
324 nb = 0;
\ 00000C 7400 MOV A,#0x0
\ 00000E 85..82 MOV DPL,?XSP + 0
\ 000011 85..83 MOV DPH,?XSP + 1
\ 000014 F0 MOVX @DPTR,A
325 do {
326 if (be) {
\ ??doIEEE_backoff_0:
\ 000015 EE MOV A,R6
\ 000016 7003 JNZ $+5
\ 000018 02.... LJMP ??doIEEE_backoff_1
327 //do random delay
328 tmp = be;
\ 00001B EE MOV A,R6
\ 00001C C0E0 PUSH A
\ 00001E 7401 MOV A,#0x1
\ 000020 12.... LCALL ?XSTACK_DISP0_8
\ 000023 D0E0 POP A
\ 000025 F0 MOVX @DPTR,A
329 //compute new delay
330 delay = 1;
\ 000026 90.... MOV DPTR,#__Constant_1
\ 000029 78.. MOV R0,#?V0 + 0
\ 00002B 12.... LCALL ?L_MOV_X
\ 00002E 85.... MOV ?V0 + 4,?V0 + 0
\ 000031 85.... MOV ?V0 + 5,?V0 + 1
\ 000034 85.... MOV ?V0 + 6,?V0 + 2
\ 000037 85.... MOV ?V0 + 7,?V0 + 3
331 while (tmp) {
\ ??doIEEE_backoff_2:
\ 00003A 7401 MOV A,#0x1
\ 00003C 12.... LCALL ?XSTACK_DISP0_8
\ 00003F E0 MOVX A,@DPTR
\ 000040 6012 JZ ??doIEEE_backoff_3
332 delay = delay << 1; //delay = 2**be;
\ 000042 7401 MOV A,#0x1
\ 000044 78.. MOV R0,#?V0 + 4
\ 000046 12.... LCALL ?L_SHL
333 tmp--;
\ 000049 7401 MOV A,#0x1
\ 00004B 12.... LCALL ?XSTACK_DISP0_8
\ 00004E E0 MOVX A,@DPTR
\ 00004F 24FF ADD A,#-0x1
\ 000051 F0 MOVX @DPTR,A
\ 000052 80E6 SJMP ??doIEEE_backoff_2
334 }
335 rannum = halGetRandomByte() & (delay-1); //rannum will be between 0 and delay-1
\ ??doIEEE_backoff_3:
\ 000054 E5.. MOV A,?V0 + 4
\ 000056 24FF ADD A,#-0x1
\ 000058 C0E0 PUSH A
\ 00005A ; Setup parameters for call to function halGetRandomByte
\ 00005A 12.... LCALL halGetRandomByte
\ 00005D E9 MOV A,R1
\ 00005E FA MOV R2,A
\ 00005F D0E0 POP A
\ 000061 5A ANL A,R2
\ 000062 FF MOV R7,A
336 delay = 0;
\ 000063 90.... MOV DPTR,#__Constant_0
\ 000066 78.. MOV R0,#?V0 + 0
\ 000068 12.... LCALL ?L_MOV_X
\ 00006B 85.... MOV ?V0 + 4,?V0 + 0
\ 00006E 85.... MOV ?V0 + 5,?V0 + 1
\ 000071 85.... MOV ?V0 + 6,?V0 + 2
\ 000074 85.... MOV ?V0 + 7,?V0 + 3
337 while (rannum) {
\ ??doIEEE_backoff_4:
\ 000077 EF MOV A,R7
\ 000078 600B JZ ??doIEEE_backoff_5
338 delay += SYMBOLS_TO_MACTICKS(aUnitBackoffPeriod);
\ 00007A 90.... MOV DPTR,#__Constant_14
\ 00007D 78.. MOV R0,#?V0 + 4
\ 00007F 12.... LCALL ?L_ADD_X
339 rannum--;
\ 000082 1F DEC R7
\ 000083 80F2 SJMP ??doIEEE_backoff_4
340 }//delay = aUnitBackoff * rannum
341 //now do backoff
342 start_tick = halGetMACTimer();
\ ??doIEEE_backoff_5:
\ 000085 ; Setup parameters for call to function halGetMACTimer
\ 000085 12.... LCALL halGetMACTimer
\ 000088 8A.. MOV ?V0 + 0,R2
\ 00008A 8B.. MOV ?V0 + 1,R3
\ 00008C 8C.. MOV ?V0 + 2,R4
\ 00008E 8D.. MOV ?V0 + 3,R5
\ 000090 7402 MOV A,#0x2
\ 000092 12.... LCALL ?XSTACK_DISP0_8
\ 000095 78.. MOV R0,#?V0 + 0
\ 000097 12.... LCALL ?L_MOV_TO_X
343 while (halMACTimerNowDelta(start_tick) < delay);
\ ??doIEEE_backoff_6:
\ 00009A ; Setup parameters for call to function halGetMACTimer
\ 00009A 12.... LCALL halGetMACTimer
\ 00009D 8A.. MOV ?V0 + 0,R2
\ 00009F 8B.. MOV ?V0 + 1,R3
\ 0000A1 8C.. MOV ?V0 + 2,R4
\ 0000A3 8D.. MOV ?V0 + 3,R5
\ 0000A5 7402 MOV A,#0x2
\ 0000A7 12.... LCALL ?XSTACK_DISP0_8
\ 0000AA 78.. MOV R0,#?V0 + 0
\ 0000AC 12.... LCALL ?L_SUB_X
\ 0000AF 90.... MOV DPTR,#__Constant_fffff
\ 0000B2 78.. MOV R0,#?V0 + 0
\ 0000B4 12.... LCALL ?L_AND_X
\ 0000B7 78.. MOV R0,#?V0 + 4
\ 0000B9 79.. MOV R1,#?V0 + 0
\ 0000BB 12.... LCALL ?UL_GT
\ 0000BE 40DA JC ??do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -