spimgr.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,526 行 · 第 1/5 页
S51
1,526 行
MOVX A,@DPTR
MOV DPTR,#LEN_Token
MOVX @DPTR,A
// 222 if (ch == 0)
JNZ ??SPIMgr_ProcessZToolData_11
// 223 state = FCS_STATE;
MOV A,#0x5
SJMP ??SPIMgr_ProcessZToolData_12
// 224 else
// 225 state = DATA_STATE;
??SPIMgr_ProcessZToolData_11:
MOV A,#0x4
??SPIMgr_ProcessZToolData_12:
MOV DPTR,#state
MOVX @DPTR,A
// 226
// 227 tempDataLen = 0;
CLR A
MOV DPTR,#tempDataLen
MOVX @DPTR,A
// 228
// 229 /* Allocate memory for the data */
// 230 SPI_Msg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof ( mtOSALSerialData_t ) + 2+1+LEN_Token );
; Setup parameters for call to function osal_msg_allocate
MOV DPTR,#LEN_Token
MOVX A,@DPTR
MOV R0,A
MOV A,#0x7
ADD A,R0
MOV R2,A
CLR A
ADDC A,#0x0
MOV R3,A
MOV DPTR,#(osal_msg_allocate & 0xffff)
MOV A,#((osal_msg_allocate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPTR,#SPI_Msg
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
// 231
// 232 if (SPI_Msg)
MOV DPTR,#SPI_Msg
MOVX A,@DPTR
JNZ ??SPIMgr_ProcessZToolData_13
INC DPTR
MOVX A,@DPTR
??SPIMgr_ProcessZToolData_13:
JZ ??SPIMgr_ProcessZToolData_14
// 233 {
// 234 /* Fill up what we can */
// 235 SPI_Msg->hdr.event = CMD_SERIAL_MSG;
LCALL ?Subroutine4 & 0xFFFF
??CrossCallReturnLabel_8:
MOV A,#0x1
MOVX @DPTR,A
// 236 SPI_Msg->msg = (uint8*)(SPI_Msg+1);
MOV DPTR,#SPI_Msg
MOVX A,@DPTR
ADD A,#0x4
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV R1,A
LCALL ?Subroutine2 & 0xFFFF
??CrossCallReturnLabel_4:
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 237 SPI_Msg->msg[0] = CMD_Token[0];
MOV DPTR,#CMD_Token
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_2:
LCALL ??Subroutine4_0 & 0xFFFF
??CrossCallReturnLabel_9:
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 238 SPI_Msg->msg[1] = CMD_Token[1];
MOV DPTR,#(CMD_Token + 1)
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_0:
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 239 SPI_Msg->msg[2] = LEN_Token;
MOV DPTR,#LEN_Token
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_1:
INC DPTR
POP A
CFI CFA_SP SP+0
LJMP ??SPIMgr_ProcessZToolData_4 & 0xFFFF
// 240 }
// 241 else
// 242 {
// 243 state = SOP_STATE;
??SPIMgr_ProcessZToolData_14:
CLR A
MOV DPTR,#state
MOVX @DPTR,A
// 244 return;
LJMP ??SPIMgr_ProcessZToolData_0 & 0xFFFF
// 245 }
// 246
// 247 break;
// 248
// 249 case DATA_STATE:
// 250 SPI_Msg->msg[3 + tempDataLen++] = ch;
??SPIMgr_ProcessZToolData_9:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV DPTR,#tempDataLen
MOVX A,@DPTR
MOV R0,A
LCALL ?Subroutine2 & 0xFFFF
??CrossCallReturnLabel_5:
MOVX A,@DPTR
ADD A,R0
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV DPL,R2
MOV DPH,A
INC DPTR
INC DPTR
INC DPTR
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
MOV DPTR,#tempDataLen
MOVX A,@DPTR
INC A
MOVX @DPTR,A
// 251 if ( tempDataLen == LEN_Token )
MOV R2,A
MOV DPTR,#LEN_Token
MOVX A,@DPTR
XRL A,R2
JZ $+5
LJMP ??SPIMgr_ProcessZToolData_1 & 0xFFFF
// 252 state = FCS_STATE;
MOV A,#0x5
LJMP ??SPIMgr_ProcessZToolData_3 & 0xFFFF
// 253 break;
// 254
// 255 case FCS_STATE:
// 256
// 257 FSC_Token = ch;
??SPIMgr_ProcessZToolData_10:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV DPTR,#FSC_Token
MOVX @DPTR,A
// 258
// 259 /* Make sure it's correct */
// 260 if ((SPIMgr_CalcFCS ((uint8*)&SPI_Msg->msg[0], 2 + 1 + LEN_Token) == FSC_Token))
; Setup parameters for call to function SPIMgr_CalcFCS
MOV DPTR,#LEN_Token
MOVX A,@DPTR
ADD A,#0x3
MOV R1,A
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_3:
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(SPIMgr_CalcFCS & 0xffff)
MOV A,#((SPIMgr_CalcFCS >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R2,A
MOV DPTR,#FSC_Token
MOVX A,@DPTR
XRL A,R2
MOV DPTR,#SPI_Msg
JNZ ??SPIMgr_ProcessZToolData_15
// 261 {
// 262 osal_msg_send( MT_TaskID, (byte *)SPI_Msg );
; Setup parameters for call to function osal_msg_send
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#MT_TaskID
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(osal_msg_send & 0xffff)
MOV A,#((osal_msg_send >> 16) & 0xff)
SJMP ??SPIMgr_ProcessZToolData_16
// 263 }
// 264 else
// 265 {
// 266 /* deallocate the msg */
// 267 osal_msg_deallocate ( (uint8 *)SPI_Msg);
??SPIMgr_ProcessZToolData_15:
; Setup parameters for call to function osal_msg_deallocate
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(osal_msg_deallocate & 0xffff)
MOV A,#((osal_msg_deallocate >> 16) & 0xff)
??SPIMgr_ProcessZToolData_16:
LCALL ?BCALL ; Banked call to: DPTR()
// 268 }
// 269
// 270 /* Reset the state, send or discard the buffers at this point */
// 271 state = SOP_STATE;
CLR A
LJMP ??SPIMgr_ProcessZToolData_3 & 0xFFFF
CFI EndBlock cfiBlock4
// 272
// 273 break;
// 274
// 275 default:
// 276 break;
// 277 }
// 278
// 279
// 280 }
// 281 }
// 282 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine2:
CFI Block cfiCond5 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_5
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI CFA_SP SP+-1
CFI CFA_XSP16 add(XSP16, 11)
CFI Block cfiCond6 Using cfiCommon0
CFI (cfiCond6) NoFunction
CFI (cfiCond6) Conditional ??CrossCallReturnLabel_4
CFI (cfiCond6) R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI (cfiCond6) VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond6) V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond6) V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond6) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond6) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond6) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond6) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond6) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond6) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond6) CFA_SP SP+0
CFI (cfiCond6) CFA_XSP16 add(XSP16, 11)
CFI Block cfiPicker7 Using cfiCommon1
CFI (cfiPicker7) NoFunction
CFI (cfiPicker7) Picker
MOV DPTR,#SPI_Msg
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R2
INC DPTR
INC DPTR
RET
CFI EndBlock cfiCond5
CFI EndBlock cfiCond6
CFI EndBlock cfiPicker7
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiCond8 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_2
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?