spimgr.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,526 行 · 第 1/5 页
S51
1,526 行
// 119 SPIMgr_ZAppRxStatus = SPI_MGR_ZAPP_RX_READY;
// 120 #endif
// 121
// 122
// 123 }
MOV A,#0x1e
LCALL ?DEALLOC_XSTACK8
CFI EndBlock cfiBlock0
REQUIRE ?Subroutine5
; // Fall through to label ?Subroutine5
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine5:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock1
// 124
// 125 /***************************************************************************************************
// 126 * @fn MT_SerialRegisterTaskID
// 127 *
// 128 * @brief
// 129 *
// 130 * This function registers the taskID of the application so it knows
// 131 * where to send the messages whent they come in.
// 132 *
// 133 * @param void
// 134 *
// 135 * @return void
// 136 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 137 void SPIMgr_RegisterTaskID( byte taskID )
SPIMgr_RegisterTaskID:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function SPIMgr_RegisterTaskID
// 138 {
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
// 139 App_TaskID = taskID;
MOV A,R1
MOV DPTR,#App_TaskID
MOVX @DPTR,A
// 140 }
SJMP ?Subroutine5
CFI EndBlock cfiBlock2
// 141
// 142 /***************************************************************************************************
// 143 * @fn SPIMgr_CalcFCS
// 144 *
// 145 * @brief
// 146 *
// 147 * Calculate the FCS of a message buffer by XOR'ing each byte.
// 148 * Remember to NOT include SOP and FCS fields, so start at the CMD
// 149 * field.
// 150 *
// 151 * @param byte *msg_ptr - message pointer
// 152 * @param byte len - length (in bytes) of message
// 153 *
// 154 * @return result byte
// 155 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 156 byte SPIMgr_CalcFCS( uint8 *msg_ptr, uint8 len )
SPIMgr_CalcFCS:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function SPIMgr_CalcFCS
// 157 {
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
// 158 byte x;
// 159 byte xorResult;
// 160
// 161 xorResult = 0;
MOV R1,#0x0
// 162
// 163 for ( x = 0; x < len; x++, msg_ptr++ )
MOV R5,#0x0
SJMP ??SPIMgr_CalcFCS_0
// 164 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
// 165
// 166 return ( xorResult );
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 167 }
// 168
// 169
// 170 #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
// 171 /***************************************************************************************************
// 172 * @fn SPIMgr_ProcessZToolRxData
// 173 *
// 174 * @brief | SOP | CMD | Data Length | FSC |
// 175 * | 1 | 2 | 1 | 1 |
// 176 *
// 177 * Parses the data and determine either is SPI or just simply serial data
// 178 * then send the data to correct place (MT or APP)
// 179 *
// 180 * @param pBuffer - pointer to the buffer that contains the data
// 181 * length - length of the buffer
// 182 *
// 183 *
// 184 * @return None
// 185 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 186 void SPIMgr_ProcessZToolData ( uint8 port, uint8 event )
SPIMgr_ProcessZToolData:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function SPIMgr_ProcessZToolData
// 187 {
FUNCALL SPIMgr_ProcessZToolData, Hal_UART_RxBufLen
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL SPIMgr_ProcessZToolData, HalUARTRead
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_allocate
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL SPIMgr_ProcessZToolData, SPIMgr_CalcFCS
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_send
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, STACK
FUNCALL SPIMgr_ProcessZToolData, osal_msg_deallocate
LOCFRAME XSTACK, 11, STACK
ARGFRAME XSTACK, 11, 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: 1
MOV A,#-0x1
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
// 188 uint8 ch;
// 189
// 190 /* Verify events */
// 191 if (event == HAL_UART_TX_FULL)
MOV A,#0x8
XRL A,R2
JZ ??SPIMgr_ProcessZToolData_0
// 192 {
// 193 // Do something when TX if full
// 194 return;
// 195 }
// 196
// 197 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,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI CFA_XSP16 add(XSP16, 11)
// 198 {
// 199 while (Hal_UART_RxBufLen(SPI_MGR_DEFAULT_PORT))
// 200 {
// 201 HalUARTRead (SPI_MGR_DEFAULT_PORT, &ch, 1);
// 202
// 203 switch (state)
// 204 {
// 205 case SOP_STATE:
// 206 if (ch == SOP_VALUE)
// 207 state = CMD_STATE1;
// 208 break;
// 209
// 210 case CMD_STATE1:
// 211 CMD_Token[0] = ch;
??SPIMgr_ProcessZToolData_2:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV DPTR,#CMD_Token
MOVX @DPTR,A
// 212 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,#0x1
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()
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 DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0x2
JNZ ??SPIMgr_ProcessZToolData_1
MOV A,#0x1
SJMP ??SPIMgr_ProcessZToolData_3
// 213 break;
// 214
// 215 case CMD_STATE2:
// 216 CMD_Token[1] = ch;
??SPIMgr_ProcessZToolData_7:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV DPTR,#(CMD_Token + 1)
MOVX @DPTR,A
// 217 state = LEN_STATE;
MOV A,#0x3
SJMP ??SPIMgr_ProcessZToolData_3
// 218 break;
// 219
// 220 case LEN_STATE:
// 221 LEN_Token = ch;
??SPIMgr_ProcessZToolData_8:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?