📄 spimgr.s51
字号:
; Auto size: 0
// 140 App_TaskID = taskID;
MOV A,R1
MOV DPTR,#App_TaskID
MOVX @DPTR,A
// 141 }
SJMP ?Subroutine5
CFI EndBlock cfiBlock2
// 142
// 143 /***************************************************************************************************
// 144 * @fn SPIMgr_CalcFCS
// 145 *
// 146 * @brief
// 147 *
// 148 * Calculate the FCS of a message buffer by XOR'ing each byte.
// 149 * Remember to NOT include SOP and FCS fields, so start at the CMD
// 150 * field.
// 151 *
// 152 * @param byte *msg_ptr - message pointer
// 153 * @param byte len - length (in bytes) of message
// 154 *
// 155 * @return result byte
// 156 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 157 byte SPIMgr_CalcFCS( uint8 *msg_ptr, uint8 len )
SPIMgr_CalcFCS:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function SPIMgr_CalcFCS
// 158 {
MOV A,#-0x9
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R4,A
// 159 byte x;
// 160 byte xorResult;
// 161
// 162 xorResult = 0;
MOV R1,#0x0
// 163
// 164 for ( x = 0; x < len; x++, msg_ptr++ )
MOV R5,#0x0
SJMP ??SPIMgr_CalcFCS_0
// 165 xorResult = xorResult ^ *msg_ptr;
??SPIMgr_CalcFCS_1:
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
XCH A,R1
XRL A,R1
MOV R1,A
INC R5
INC DPTR
MOV R2,DPL
MOV R3,DPH
??SPIMgr_CalcFCS_0:
MOV A,R5
CLR C
SUBB A,R4
JC ??SPIMgr_CalcFCS_1
// 166
// 167 return ( xorResult );
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 168 }
// 169
// 170
// 171 #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
// 172 /***************************************************************************************************
// 173 * @fn SPIMgr_ProcessZToolRxData
// 174 *
// 175 * @brief | SOP | CMD | Data Length | FSC |
// 176 * | 1 | 2 | 1 | 1 |
// 177 *
// 178 * Parses the data and determine either is SPI or just simply serial data
// 179 * then send the data to correct place (MT or APP)
// 180 *
// 181 * @param pBuffer - pointer to the buffer that contains the data
// 182 * length - length of the buffer
// 183 *
// 184 *
// 185 * @return None
// 186 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 187 void SPIMgr_ProcessZToolData ( uint8 port, uint8 event )
SPIMgr_ProcessZToolData:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function SPIMgr_ProcessZToolData
// 188 {
FUNCALL SPIMgr_ProcessZToolData, Hal_UART_RxBufLen
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, HalUARTRead
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, SendData
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_allocate
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, SPIMgr_CalcFCS
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_send
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_deallocate
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, 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: 5
MOV A,#-0x5
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 15)
// 189 uint8 ch;
// 190 uint8 temp[5];
// 191 unsigned int tt;
// 192 /* Verify events */
// 193 if (event == HAL_UART_TX_FULL)
MOV A,#0x8
XRL A,R2
JZ ??SPIMgr_ProcessZToolData_0
// 194 {
// 195 // Do something when TX if full
// 196 return;
// 197 }
// 198 if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
MOV A,#0x7
ANL A,R2
JNZ ??SPIMgr_ProcessZToolData_1
??SPIMgr_ProcessZToolData_0:
MOV A,#0x5
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI CFA_XSP16 add(XSP16, 15)
// 199 {
// 200 while (Hal_UART_RxBufLen(SPI_MGR_DEFAULT_PORT))
// 201 {
// 202 HalUARTRead (SPI_MGR_DEFAULT_PORT, temp, 4);
// 203 tt = (unsigned int)temp[0];
// 204 tt = (tt<<8)&0xff00;
// 205 tt |= temp[1];
// 206 SendData(&temp[2],tt,2);
// 207 switch (state)
// 208 {
// 209 case SOP_STATE:
// 210 if (ch == SOP_VALUE)
// 211 state = CMD_STATE1;
// 212 break;
// 213
// 214 case CMD_STATE1:
// 215 CMD_Token[0] = ch;
??SPIMgr_ProcessZToolData_2:
MOV A,R6
MOV DPTR,#CMD_Token
MOVX @DPTR,A
// 216 state = CMD_STATE2;
MOV A,#0x2
??SPIMgr_ProcessZToolData_3:
MOV DPTR,#state
??SPIMgr_ProcessZToolData_4:
MOVX @DPTR,A
??SPIMgr_ProcessZToolData_1:
; Setup parameters for call to function Hal_UART_RxBufLen
MOV R1,#0x0
MOV DPTR,#(Hal_UART_RxBufLen & 0xffff)
MOV A,#((Hal_UART_RxBufLen >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R2
JNZ ??SPIMgr_ProcessZToolData_5
MOV A,R3
??SPIMgr_ProcessZToolData_5:
JZ ??SPIMgr_ProcessZToolData_0
; Setup parameters for call to function HalUARTRead
MOV R4,#0x4
MOV R5,#0x0
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R2,DPL
MOV R3,DPH
MOV R1,#0x0
MOV DPTR,#(HalUARTRead & 0xffff)
MOV A,#((HalUARTRead >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
; Setup parameters for call to function SendData
MOV R1,#0x2
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R3,A
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
MOV A,R3
MOV R5,A
MOV A,R1
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(SendData & 0xffff)
MOV A,#((SendData >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPTR,#state
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for SPIMgr_ProcessZToolData>_0`:
DB 0
DB 5
DW ??SPIMgr_ProcessZToolData_1
DW ??SPIMgr_ProcessZToolData_6
DW ??SPIMgr_ProcessZToolData_2
DW ??SPIMgr_ProcessZToolData_7
DW ??SPIMgr_ProcessZToolData_8
DW ??SPIMgr_ProcessZToolData_9
DW ??SPIMgr_ProcessZToolData_10
??SPIMgr_ProcessZToolData_6:
MOV A,#0x2
XRL A,R6
JNZ ??SPIMgr_ProcessZToolData_1
MOV A,#0x1
SJMP ??SPIMgr_ProcessZToolData_3
// 217 break;
// 218
// 219 case CMD_STATE2:
// 220 CMD_Token[1] = ch;
??SPIMgr_ProcessZToolData_7:
MOV A,R6
MOV DPTR,#(CMD_Token + 1)
MOVX @DPTR,A
// 221 state = LEN_STATE;
MOV A,#0x3
SJMP ??SPIMgr_ProcessZToolData_3
// 222 break;
// 223
// 224 case LEN_STATE:
// 225 LEN_Token = ch;
??SPIMgr_ProcessZToolData_8:
MOV A,R6
MOV DPTR,#LEN_Token
MOVX @DPTR,A
// 226 if (ch == 0)
JNZ ??SPIMgr_ProcessZToolData_11
// 227 state = FCS_STATE;
MOV A,#0x5
SJMP ??SPIMgr_ProcessZToolData_12
// 228 else
// 229 state = DATA_STATE;
??SPIMgr_ProcessZToolData_11:
MOV A,#0x4
??SPIMgr_ProcessZToolData_12:
MOV DPTR,#state
MOVX @DPTR,A
// 230
// 231 tempDataLen = 0;
CLR A
MOV DPTR,#tempDataLen
MOVX @DPTR,A
// 232
// 233 /* Allocate memory for the data */
// 234 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
// 235
// 236 if (SPI_Msg)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -