📄 node.s51
字号:
DS 1
// 48
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 49 MSG_BUFFER buffer;
buffer:
DS 145
// 50
// 51
// 52 // flags
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 53 BOOL msgReceived;
msgReceived:
DS 1
// 54
// 55
// 56 /******************************************************************************
// 57 *
// 58 * Function to handle received packets
// 59 *
// 60 * This function handle messages common for both Blind and reference nodes.
// 61 * Other messages will be handled in blindNode.c or refNode.c
// 62 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 63 void NodeDataIndication(MCPS_DATA_INDICATION *pMDI){
NodeDataIndication:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function NodeDataIndication
FUNCALL NodeDataIndication, SetupRefNode
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL NodeDataIndication, SetupBlindNode
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL NodeDataIndication, memcpy
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xa
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
// 64 BYTE packetType;
// 65
// 66 packetType = pMDI->pMsdu[PACKET_INDEX_TYPE];
// 67
// 68 switch (packetType){
MOV A,R2
ADD A,#0x1a
MOV DPL,A
MOV A,R3
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
LCALL ?UC_SWITCH_SPARSE
`?<Jumptable for NodeDataIndication>_0`:
DB 1
DB 17
DB 18
DW ??NodeDataIndication_0
DB 2
DB 32
DW ??NodeDataIndication_1
DB 34
DW ??NodeDataIndication_2
DW ??NodeDataIndication_3
// 69 case PACKET_TYPE_SETUP_PARAMETER:
// 70 if (nodeType == REF_NODE){
??NodeDataIndication_1:
MOV A,R2
ADD A,#0x1b
MOV R2,A
MOV A,R3
ADDC A,#0x0
MOV R3,A
MOV DPTR,#nodeType
MOVX A,@DPTR
JNZ ??NodeDataIndication_4
// 71 SetupRefNode(&pMDI->pMsdu[PACKET_INDEX_NBR_OF_CONFIG_DATA]);
; Setup parameters for call to function SetupRefNode
MOV DPTR,#(SetupRefNode & 0xffff)
MOV A,#((SetupRefNode >> 16) & 0xff)
??NodeDataIndication_5:
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??NodeDataIndication_3
// 72 }
// 73 else{
// 74 SetupBlindNode(&pMDI->pMsdu[PACKET_INDEX_NBR_OF_CONFIG_DATA]);
??NodeDataIndication_4:
; Setup parameters for call to function SetupBlindNode
MOV DPTR,#(SetupBlindNode & 0xffff)
MOV A,#((SetupBlindNode >> 16) & 0xff)
SJMP ??NodeDataIndication_5
// 75 }
// 76 break;
// 77 case PACKET_TYPE_BLINK_LED:
// 78 blinkLed = TRUE;
??NodeDataIndication_2:
MOV A,#0x1
MOV DPTR,#blinkLed
SJMP ??NodeDataIndication_6
// 79 break;
// 80 // case PACKET_TYPE_BLIND_NODE_POSITION:
// 81 case PACKET_TYPE_BLIND_NODE_REQ_SIGNAL: /* only sent to ref node */
// 82 case PACKET_TYPE_REF_NODE_POSITION: /* only sent to blind node */
// 83 if(BUFFER_EMPTY()){
??NodeDataIndication_0:
MOV DPTR,#buffer
MOVX A,@DPTR
JNZ ??NodeDataIndication_3
// 84 msgReceived = TRUE;
MOV A,#0x1
MOV DPTR,#msgReceived
MOVX @DPTR,A
// 85 memcpy(&buffer.b, pMDI, sizeof(MCPS_DATA_INDICATION));
; Setup parameters for call to function memcpy
MOV ?V0 + 0,#-0x70
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 12)
MOV A,R2
MOV R4,A
MOV A,R3
MOV R5,A
MOV R2,#((buffer + 1) & 0xff)
MOV R3,#(((buffer + 1) >> 8) & 0xff)
MOV DPTR,#(memcpy & 0xffff)
MOV A,#((memcpy >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
// 86 SET_BUFFER_FILLED();
MOV A,#0x1
MOV DPTR,#buffer
??NodeDataIndication_6:
MOVX @DPTR,A
CFI EndBlock cfiBlock0
// 87 }
// 88 break;
// 89 default:
// 90 break;
// 91 }
// 92 }
??NodeDataIndication_3:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock1
// 93
// 94 /******************************************************************************
// 95 *
// 96 * Sleep timer interrupt handler
// 97 ******************************************************************************/
// 98 #pragma vector=ST_VECTOR
RSEG NEAR_CODE:CODE:NOROOT(0)
// 99 __near_func __interrupt void ST_IRQ(void){
ST_IRQ:
CFI Block cfiBlock2 Using cfiCommon1
CFI Function ST_IRQ
FUNCALL ST_IRQ, ST_IRQ_RefNode
LOCFRAME ISTACK, 11, STACK
ARGFRAME ISTACK, 11, STACK
FUNCALL ST_IRQ, ST_IRQ_BlindNode
LOCFRAME ISTACK, 11, STACK
ARGFRAME ISTACK, 11, STACK
PUSH A
CFI A Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
PUSH PSW
CFI PSW Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
MOV A,R0
CFI R0 A
PUSH A
CFI R0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
MOV A,R1
CFI R1 A
PUSH A
CFI R1 Frame(CFA_SP, 6)
CFI CFA_SP SP+-6
MOV A,R2
CFI R2 A
PUSH A
CFI R2 Frame(CFA_SP, 7)
CFI CFA_SP SP+-7
MOV A,R3
CFI R3 A
PUSH A
CFI R3 Frame(CFA_SP, 8)
CFI CFA_SP SP+-8
MOV A,R4
CFI R4 A
PUSH A
CFI R4 Frame(CFA_SP, 9)
CFI CFA_SP SP+-9
MOV A,R5
CFI R5 A
PUSH A
CFI R5 Frame(CFA_SP, 10)
CFI CFA_SP SP+-10
PUSH DPL
CFI DPL0 Frame(CFA_SP, 11)
CFI CFA_SP SP+-11
PUSH DPH
CFI DPH0 Frame(CFA_SP, 12)
CFI CFA_SP SP+-12
PUSH B
CFI B Frame(CFA_SP, 13)
CFI CFA_SP SP+-13
; Saved register size: 11
; Auto size: 0
// 100 if (nodeType == REF_NODE){
MOV DPTR,#nodeType
MOVX A,@DPTR
JNZ ??ST_IRQ_0
// 101 ST_IRQ_RefNode();
; Setup parameters for call to function ST_IRQ_RefNode
MOV DPTR,#(ST_IRQ_RefNode & 0xffff)
MOV A,#((ST_IRQ_RefNode >> 16) & 0xff)
SJMP ??ST_IRQ_1
// 102 }
// 103 else{
// 104 ST_IRQ_BlindNode();
??ST_IRQ_0:
; Setup parameters for call to function ST_IRQ_BlindNode
MOV DPTR,#(ST_IRQ_BlindNode & 0xffff)
MOV A,#((ST_IRQ_BlindNode >> 16) & 0xff)
??ST_IRQ_1:
LCALL ?BCALL ; Banked call to: DPTR()
// 105 }
// 106 }
POP B
CFI B SameValue
CFI CFA_SP SP+-12
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-11
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-10
POP A
CFI R5 A
CFI CFA_SP SP+-9
MOV R5,A
CFI R5 SameValue
POP A
CFI R4 A
CFI CFA_SP SP+-8
MOV R4,A
CFI R4 SameValue
POP A
CFI R3 A
CFI CFA_SP SP+-7
MOV R3,A
CFI R3 SameValue
POP A
CFI R2 A
CFI CFA_SP SP+-6
MOV R2,A
CFI R2 SameValue
POP A
CFI R1 A
CFI CFA_SP SP+-5
MOV R1,A
CFI R1 SameValue
POP A
CFI R0 A
CFI CFA_SP SP+-4
MOV R0,A
CFI R0 SameValue
POP PSW
CFI PSW SameValue
CFI CFA_SP SP+-3
POP A
CFI A SameValue
CFI CFA_SP SP+-2
RETI
CFI EndBlock cfiBlock2
// 107
// 108
// 109 /******************************************************************************
// 110 *
// 111 * Send packet contains x, y, z
// 112 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 113 void SendPosition(WORD destAddr){
SendPosition:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function SendPosition
FUNCALL SendPosition, DataRequest
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 6, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 6, 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: 6
MOV A,#-0x6
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 6)
// 114 BYTE data[PACKET_INDEX_Z + 1];
// 115
// 116 if (nodeType == REF_NODE){
MOV DPTR,#nodeType
MOVX A,@DPTR
JNZ ??SendPosition_0
// 117 data[PACKET_INDEX_TYPE] = PACKET_TYPE_REF_NODE_POSITION;
MOV A,#0x12
SJMP ??SendPosition_1
// 118 }
// 119 else{
// 120 data[PACKET_INDEX_TYPE] = PACKET_TYPE_BLIND_NODE_POSITION;
??SendPosition_0:
MOV A,#0x10
??SendPosition_1:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 121 }
// 122
// 123 data[PACKET_INDEX_X_H] = HIBYTE(x);
MOV DPTR,#(x + 1)
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-6
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+-5
MOVX @DPTR,A
// 124 data[PACKET_INDEX_X_L] = LOBYTE(x);
MOV DPTR,#x
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-6
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+-5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -