📄 blind_node.s51
字号:
MOVX A,@DPTR
MOV R5,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(CreateInputArrayToLocEngine & 0xffff)
MOV A,#((CreateInputArrayToLocEngine >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 274
// 275 CalculatePosition(refNodes, a_val, n_index, &xLocValue, &yLocValue);
; Setup parameters for call to function CalculatePosition
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 27)
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 29)
MOV DPTR,#n_index
MOVX A,@DPTR
MOV R4,A
MOV DPTR,#a_val
MOVX A,@DPTR
MOV R1,A
MOV R2,#(refNodes & 0xff)
MOV R3,#((refNodes >> 8) & 0xff)
MOV DPTR,#(CalculatePosition & 0xffff)
MOV A,#((CalculatePosition >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 25)
// 276 x = (xLocValue << 1) + xUpperLeft; // convert to UINT8_2 and add offset
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
ADD A,R0
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,R1
MOV R1,A
MOV DPTR,#x
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 277 y = (yLocValue << 1) + yUpperLeft; // convert to UINT8_2 and add offset
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
ADD A,R0
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,R1
MOV R1,A
MOV DPTR,#y
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 278
// 279 #ifdef CC2430EB
// 280 PrintXY();
; Setup parameters for call to function PrintXY
MOV DPTR,#(PrintXY & 0xffff)
MOV A,#((PrintXY >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 281 #endif
// 282 if(DiscardResult(xStrongestNode, yStrongestNode, strongestRssi))
; Setup parameters for call to function DiscardResult
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R1,A
MOV A,#0x9
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV A,#0x7
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(DiscardResult & 0xffff)
MOV A,#((DiscardResult >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JZ ??RunBlindNode_26
// 283 {
// 284 SendText("Result discarded");
; Setup parameters for call to function SendText
MOV R2,#(`?<Constant "Result discarded">` & 0xff)
MOV R3,#((`?<Constant "Result discarded">` >> 8) & 0xff)
MOV DPTR,#(SendText & 0xffff)
MOV A,#((SendText >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 285 x = y = UNINITIALIZED_XY_VALUE;
MOV DPTR,#y
MOV A,#-0x1
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#x
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 286 }
// 287 SendPosition(PC_SHORT);
??RunBlindNode_26:
; Setup parameters for call to function SendPosition
MOV R2,#0x34
MOV R3,#0x12
MOV DPTR,#(SendPosition & 0xffff)
MOV A,#((SendPosition >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 288 SendDebugInfo(xUpperLeft, yUpperLeft);
; Setup parameters for call to function SendDebugInfo
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(SendDebugInfo & 0xffff)
MOV A,#((SendDebugInfo >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 289
// 290 if (blinkLed){
MOV DPTR,#blinkLed
MOVX A,@DPTR
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;
CLR A
MOVX @DPTR,A
// 294 LED1 = LED_ON;
CLR 0x90.0
// 295 ledBlinkCounter = 0;
MOV DPTR,#ledBlinkCounter
MOVX @DPTR,A
// 296 AddToSleepTimer(LED_BLINK_TIME);
; Setup parameters for call to function AddToSleepTimer
MOV R2,#0x64
MOV R3,A
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 297 blindNodeState = BLINK_LED_STATE;
MOV A,#0x9
SJMP ??RunBlindNode_28
// 298 }
// 299 else
// 300 {
// 301 AddToSleepTimer(BLIND_NODE_POWER_DOWN_PERIODE);
??RunBlindNode_27:
; Setup parameters for call to function AddToSleepTimer
MOV R2,#-0x48
MOV R3,#0xb
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 302 blindNodeState = SLEEP_STATE;
MOV A,#0x8
??RunBlindNode_28:
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 303 }
// 304 INT_SETFLAG(INUM_ST, INT_CLR);
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:
; Setup parameters for call to function mpmSetAndResumeMacAndCpuPowerMode
MOV R3,#0x0
MOV R2,#0x1
MOV R1,#0x1
LCALL mpmSetAndResumeMacAndCpuPowerMode & 0xFFFF
LJMP ??RunBlindNode_0 & 0xFFFF
// 313 #endif
// 314 break;
// 315 default:
// 316 blindNodeState = INIT_BCAST;
??RunBlindNode_6:
CLR A
LJMP ??RunBlindNode_16 & 0xFFFF
CFI EndBlock cfiBlock0
// 317 break;
// 318 }
// 319 }
// 320 }
// 321
// 322
// 323 /******************************************************************************
// 324 *
// 325 * This function will handle sleep timer interrupts for blind node
// 326 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 327 void ST_IRQ_BlindNode(void)
ST_IRQ_BlindNode:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function ST_IRQ_BlindNode
// 328 {
FUNCALL ST_IRQ_BlindNode, AddToSleepTimer
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL ST_IRQ_BlindNode, AddToSleepTimer
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 329 INT_SETFLAG(INUM_ST, INT_CLR);
CLR 0xc0.7
// 330 INT_ENABLE(INUM_ST, INT_OFF);
CLR 0xa8.5
// 331
// 332 switch (blindNodeState){
MOV DPTR,#blindNodeState
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for ST_IRQ_BlindNode>_0`:
DB 1
DB 8
DW ??ST_IRQ_BlindNode_0
DW ??ST_IRQ_BlindNode_1
DW ??ST_IRQ_BlindNode_2
DW ??ST_IRQ_BlindNode_1
DW ??ST_IRQ_BlindNode_1
DW ??ST_IRQ_BlindNode_1
DW ??ST_IRQ_BlindNode_3
DW ??ST_IRQ_BlindNode_1
DW ??ST_IRQ_BlindNode_0
DW ??ST_IRQ_BlindNode_4
// 333 case BCAST_REQUEST:
// 334 break;
// 335 case RECEIVE_BCAST_REPLY:
// 336 blindNodeState = CHECK_REPLIES;
??ST_IRQ_BlindNode_2:
MOV A,#0x3
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:
MOV A,#0x5
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 346 nbrOfReqTimeOuts++;
MOV DPTR,#nbrOfReqTimeOuts
MOVX A,@DPTR
INC A
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:
XRL 0x90,#0x1
MOV A,0x90
// 352 ledBlinkCounter++;
MOV DPTR,#ledBlinkCounter
MOVX A,@DPTR
INC A
MOVX @DPTR,A
// 353 if(ledBlinkCounter > NBR_OF_LED_BLINK * 2){
CLR C
SUBB A,#0x15
JC ??ST_IRQ_BlindNode_7
// 354 blindNodeState = SLEEP_STATE;
MOV A,#0x8
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 355 AddToSleepTimer(BLIND_NODE_POWER_DOWN_PERIODE);
; Setup parameters for call to function AddToSleepTimer
MOV R2,#-0x48
MOV R3,#0xb
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 356 LED1 = LED_OFF;
SETB 0x90.0
SJMP ??ST_IRQ_BlindNode_8
// 357 }
// 358 else
// 359 {
// 360 AddToSleepTimer(LED_BLINK_TIME);
??ST_IRQ_BlindNode_7:
; Setup parameters for call to function AddToSleepTimer
MOV R2,#0x64
MOV R3,#0x0
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 361 }
// 362 INT_ENABLE(INUM_ST, INT_ON);
??ST_IRQ_BlindNode_8:
SETB 0xa8.5
SJMP ??ST_IRQ_BlindNode_1
// 363 break;
// 364 case SLEEP_STATE:
// 365 blindNodeState = INIT_BCAST;
??ST_IRQ_BlindNode_0:
CLR A
??ST_IRQ_BlindNode_5:
MOV DPTR,#blindNodeState
??ST_IRQ_BlindNode_6:
MOVX @DPTR,A
// 366 break;
// 367 default:
// 368 blindNodeState = INIT_BCAST;
// 369 break;
// 370 }
// 371 }
??ST_IRQ_BlindNode_1:
SJMP ??Subroutine0_0
CFI EndBlock cfiBlock1
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI CFA_XSP16 add(XSP16, 1)
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CFI Invalid
LCALL ?DEALLOC_XSTACK8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -