📄 blind_node.lst
字号:
\ 00041F 85..82 MOV DPL,?XSP + 0
\ 000422 85..83 MOV DPH,?XSP + 1
\ 000425 E0 MOVX A,@DPTR
\ 000426 FA MOV R2,A
\ 000427 A3 INC DPTR
\ 000428 E0 MOVX A,@DPTR
\ 000429 FB MOV R3,A
\ 00042A 90.... MOV DPTR,#(SendDebugInfo & 0xffff)
\ 00042D 74.. MOV A,#((SendDebugInfo >> 16) & 0xff)
\ 00042F 12.... LCALL ?BCALL ; Banked call to: DPTR()
289
290 if (blinkLed){
\ 000432 90.... MOV DPTR,#blinkLed
\ 000435 E0 MOVX A,@DPTR
\ 000436 6017 JZ ??RunBlindNode_27
291 // if a "blink led message" has been sent from PC, it will not be handled untill blind node
292 // reach this state
293 blinkLed = FALSE;
\ 000438 E4 CLR A
\ 000439 F0 MOVX @DPTR,A
294 LED1 = LED_ON;
\ 00043A C290 CLR 0x90.0
295 ledBlinkCounter = 0;
\ 00043C 90.... MOV DPTR,#ledBlinkCounter
\ 00043F F0 MOVX @DPTR,A
296 AddToSleepTimer(LED_BLINK_TIME);
\ 000440 ; Setup parameters for call to function AddToSleepTimer
\ 000440 7A64 MOV R2,#0x64
\ 000442 FB MOV R3,A
\ 000443 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000446 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000448 12.... LCALL ?BCALL ; Banked call to: DPTR()
297 blindNodeState = BLINK_LED_STATE;
\ 00044B 7409 MOV A,#0x9
\ 00044D 800E SJMP ??RunBlindNode_28
298 }
299 else
300 {
301 AddToSleepTimer(BLIND_NODE_POWER_DOWN_PERIODE);
\ ??RunBlindNode_27:
\ 00044F ; Setup parameters for call to function AddToSleepTimer
\ 00044F 7AB8 MOV R2,#-0x48
\ 000451 7B0B MOV R3,#0xb
\ 000453 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000456 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000458 12.... LCALL ?BCALL ; Banked call to: DPTR()
302 blindNodeState = SLEEP_STATE;
\ 00045B 7408 MOV A,#0x8
\ ??RunBlindNode_28:
\ 00045D 90.... MOV DPTR,#blindNodeState
\ 000460 F0 MOVX @DPTR,A
303 }
304 INT_SETFLAG(INUM_ST, INT_CLR);
\ 000461 02.... LJMP ??RunBlindNode_18 & 0xFFFF
305 INT_ENABLE(INUM_ST, INT_ON);
306 break;
307 case BLINK_LED_STATE:
308 // state transition handled by Sleep Timer
309 case SLEEP_STATE:
310 // state transition handled by Sleep Timer
311 #ifdef USE_PM
312 mpmSetAndResumeMacAndCpuPowerMode (POWER_MODE_PM2, RESUME_MODE_PARTS_PRESERVED, FALSE);
\ ??RunBlindNode_14:
\ 000464 ; Setup parameters for call to function mpmSetAndResumeMacAndCpuPowerMode
\ 000464 7B00 MOV R3,#0x0
\ 000466 7A01 MOV R2,#0x1
\ 000468 7901 MOV R1,#0x1
\ 00046A 12.... LCALL mpmSetAndResumeMacAndCpuPowerMode & 0xFFFF
\ 00046D 02.... LJMP ??RunBlindNode_0 & 0xFFFF
313 #endif
314 break;
315 default:
316 blindNodeState = INIT_BCAST;
\ ??RunBlindNode_6:
\ 000470 E4 CLR A
\ 000471 02.... LJMP ??RunBlindNode_16 & 0xFFFF
317 break;
318 }
319 }
320 }
321
322
323 /******************************************************************************
324 *
325 * This function will handle sleep timer interrupts for blind node
326 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
327 void ST_IRQ_BlindNode(void)
\ ST_IRQ_BlindNode:
328 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
329 INT_SETFLAG(INUM_ST, INT_CLR);
\ 000004 C2C7 CLR 0xc0.7
330 INT_ENABLE(INUM_ST, INT_OFF);
\ 000006 C2AD CLR 0xa8.5
331
332 switch (blindNodeState){
\ 000008 90.... MOV DPTR,#blindNodeState
\ 00000B E0 MOVX A,@DPTR
\ 00000C 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for ST_IRQ_BlindNode>_0`:
\ 00000F 01 DB 1
\ 000010 08 DB 8
\ 000011 .... DW ??ST_IRQ_BlindNode_0
\ 000013 .... DW ??ST_IRQ_BlindNode_1
\ 000015 .... DW ??ST_IRQ_BlindNode_2
\ 000017 .... DW ??ST_IRQ_BlindNode_1
\ 000019 .... DW ??ST_IRQ_BlindNode_1
\ 00001B .... DW ??ST_IRQ_BlindNode_1
\ 00001D .... DW ??ST_IRQ_BlindNode_3
\ 00001F .... DW ??ST_IRQ_BlindNode_1
\ 000021 .... DW ??ST_IRQ_BlindNode_0
\ 000023 .... DW ??ST_IRQ_BlindNode_4
333 case BCAST_REQUEST:
334 break;
335 case RECEIVE_BCAST_REPLY:
336 blindNodeState = CHECK_REPLIES;
\ ??ST_IRQ_BlindNode_2:
\ 000025 7403 MOV A,#0x3
\ 000027 8044 SJMP ??ST_IRQ_BlindNode_5
337 break;
338 case CHECK_REPLIES:
339 break;
340 case SETUP_DATA_COLLECTING:
341 break;
342 case REQUEST_REF_NODE_PACKET:
343 break;
344 case RECEIVE_REF_NODES_PACKET:
345 blindNodeState = REQUEST_REF_NODE_PACKET;
\ ??ST_IRQ_BlindNode_3:
\ 000029 7405 MOV A,#0x5
\ 00002B 90.... MOV DPTR,#blindNodeState
\ 00002E F0 MOVX @DPTR,A
346 nbrOfReqTimeOuts++;
\ 00002F 90.... MOV DPTR,#nbrOfReqTimeOuts
\ 000032 E0 MOVX A,@DPTR
\ 000033 04 INC A
\ 000034 803A SJMP ??ST_IRQ_BlindNode_6
347 break;
348 case ESTIMATE_LOCATION:
349 break;
350 case BLINK_LED_STATE:
351 LED1 ^= 1;
\ ??ST_IRQ_BlindNode_4:
\ 000036 639001 XRL 0x90,#0x1
\ 000039 E590 MOV A,0x90
352 ledBlinkCounter++;
\ 00003B 90.... MOV DPTR,#ledBlinkCounter
\ 00003E E0 MOVX A,@DPTR
\ 00003F 04 INC A
\ 000040 F0 MOVX @DPTR,A
353 if(ledBlinkCounter > NBR_OF_LED_BLINK * 2){
\ 000041 C3 CLR C
\ 000042 9415 SUBB A,#0x15
\ 000044 4016 JC ??ST_IRQ_BlindNode_7
354 blindNodeState = SLEEP_STATE;
\ 000046 7408 MOV A,#0x8
\ 000048 90.... MOV DPTR,#blindNodeState
\ 00004B F0 MOVX @DPTR,A
355 AddToSleepTimer(BLIND_NODE_POWER_DOWN_PERIODE);
\ 00004C ; Setup parameters for call to function AddToSleepTimer
\ 00004C 7AB8 MOV R2,#-0x48
\ 00004E 7B0B MOV R3,#0xb
\ 000050 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000053 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000055 12.... LCALL ?BCALL ; Banked call to: DPTR()
356 LED1 = LED_OFF;
\ 000058 D290 SETB 0x90.0
\ 00005A 800C SJMP ??ST_IRQ_BlindNode_8
357 }
358 else
359 {
360 AddToSleepTimer(LED_BLINK_TIME);
\ ??ST_IRQ_BlindNode_7:
\ 00005C ; Setup parameters for call to function AddToSleepTimer
\ 00005C 7A64 MOV R2,#0x64
\ 00005E 7B00 MOV R3,#0x0
\ 000060 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000063 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000065 12.... LCALL ?BCALL ; Banked call to: DPTR()
361 }
362 INT_ENABLE(INUM_ST, INT_ON);
\ ??ST_IRQ_BlindNode_8:
\ 000068 D2AD SETB 0xa8.5
\ 00006A 8005 SJMP ??ST_IRQ_BlindNode_1
363 break;
364 case SLEEP_STATE:
365 blindNodeState = INIT_BCAST;
\ ??ST_IRQ_BlindNode_0:
\ 00006C E4 CLR A
\ ??ST_IRQ_BlindNode_5:
\ 00006D 90.... MOV DPTR,#blindNodeState
\ ??ST_IRQ_BlindNode_6:
\ 000070 F0 MOVX @DPTR,A
366 break;
367 default:
368 blindNodeState = INIT_BCAST;
369 break;
370 }
371 }
\ ??ST_IRQ_BlindNode_1:
\ 000071 80.. SJMP ??Subroutine0_0
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 12.... LCALL ?DEALLOC_XSTACK8
\ ??Subroutine0_0:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
372
373
374 /******************************************************************************
375 *
376 * This function assum that allRefNodesInRange is approximately sorted by RSSI
377 * value
378 *
379 * Build a new array (refNodesUsable) with all short addresses that should be
380 * used and calculate offset
381 *
382 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
383 UINT8 ChooseNodesToUse(UINT16_2 xUpperLeft, UINT16_2 yUpperLeft)
\ ChooseNodesToUse:
384 {
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
385 UINT8 i, nbrOfUsableRefNodes;
386 UINT16_2 deltaX, deltaY;
387
388 nbrOfUsableRefNodes = 0;
\ 000005 7E00 MOV R6,#0x0
389
390 for(i = 0; i < LOC_ENGINE_NODE_CAPACITY && refNodesForCalculation[i].shortAddress != 0x000; i++)
\ 000007 7F00 MOV R7,#0x0
\ ??ChooseNodesToUse_0:
\ 000009 8F.. MOV ?V0 + 0,R7
\ 00000B 75..00 MOV ?V0 + 1,#0x0
\ 00000E 7403 MOV A,#0x3
\ 000010 78.. MO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -