📄 spimgr.lst
字号:
180 * @param pBuffer - pointer to the buffer that contains the data
181 * length - length of the buffer
182 *
183 *
184 * @return None
185 ***************************************************************************************************/
186 void SPIMgr_ProcessZToolData ( uint8 port, uint8 event )
187 {
188 uint8 ch;
189
190 /* Verify events */
191 if (event == HAL_UART_TX_FULL)
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))
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;
212 state = CMD_STATE2;
213 break;
214
215 case CMD_STATE2:
216 CMD_Token[1] = ch;
217 state = LEN_STATE;
218 break;
219
220 case LEN_STATE:
221 LEN_Token = ch;
222 if (ch == 0)
223 state = FCS_STATE;
224 else
225 state = DATA_STATE;
226
227 tempDataLen = 0;
228
229 /* Allocate memory for the data */
230 SPI_Msg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof ( mtOSALSerialData_t ) + 2+1+LEN_Token );
231
232 if (SPI_Msg)
233 {
234 /* Fill up what we can */
235 SPI_Msg->hdr.event = CMD_SERIAL_MSG;
236 SPI_Msg->msg = (uint8*)(SPI_Msg+1);
237 SPI_Msg->msg[0] = CMD_Token[0];
238 SPI_Msg->msg[1] = CMD_Token[1];
239 SPI_Msg->msg[2] = LEN_Token;
240 }
241 else
242 {
243 state = SOP_STATE;
244 return;
245 }
246
247 break;
248
249 case DATA_STATE:
250 SPI_Msg->msg[3 + tempDataLen++] = ch;
251 if ( tempDataLen == LEN_Token )
252 state = FCS_STATE;
253 break;
254
255 case FCS_STATE:
256
257 FSC_Token = ch;
258
259 /* Make sure it's correct */
260 if ((SPIMgr_CalcFCS ((uint8*)&SPI_Msg->msg[0], 2 + 1 + LEN_Token) == FSC_Token))
261 {
262 osal_msg_send( MT_TaskID, (byte *)SPI_Msg );
263 }
264 else
265 {
266 /* deallocate the msg */
267 osal_msg_deallocate ( (uint8 *)SPI_Msg);
268 }
269
270 /* Reset the state, send or discard the buffers at this point */
271 state = SOP_STATE;
272
273 break;
274
275 default:
276 break;
277 }
278
279
280 }
281 }
282 }
283 #endif //ZTOOL
284
285 #if defined (ZAPP_P1) || defined (ZAPP_P2)
286 /***************************************************************************************************
287 * @fn SPIMgr_ProcessZAppRxData
288 *
289 * @brief | SOP | CMD | Data Length | FSC |
290 * | 1 | 2 | 1 | 1 |
291 *
292 * Parses the data and determine either is SPI or just simply serial data
293 * then send the data to correct place (MT or APP)
294 *
295 * @param pBuffer - pointer to the buffer that contains the data
296 * length - length of the buffer
297 *
298 *
299 * @return None
300 ***************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
301 void SPIMgr_ProcessZAppData ( uint8 port, uint8 event )
\ SPIMgr_ProcessZAppData:
302 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 8A.. MOV ?V0 + 0,R2
303
304 osal_event_hdr_t *msg_ptr;
305 uint16 length = 0;
306 uint16 rxBufLen = Hal_UART_RxBufLen(SPI_MGR_DEFAULT_PORT);
\ 000007 ; Setup parameters for call to function Hal_UART_RxBufLen
\ 000007 7901 MOV R1,#0x1
\ 000009 90.... MOV DPTR,#(Hal_UART_RxBufLen & 0xffff)
\ 00000C 74.. MOV A,#((Hal_UART_RxBufLen >> 16) & 0xff)
\ 00000E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000011 8A.. MOV ?V0 + 2,R2
\ 000013 8B.. MOV ?V0 + 3,R3
\ 000015 A8.. MOV R0,?V0 + 2
\ 000017 A9.. MOV R1,?V0 + 3
307
308 /*
309 If maxZAppBufferLength is 0 or larger than current length
310 the entire length of the current buffer is returned.
311 */
312 if ((SPIMgr_MaxZAppBufLen != 0) && (SPIMgr_MaxZAppBufLen <= rxBufLen))
\ 000019 90.... MOV DPTR,#SPIMgr_MaxZAppBufLen
\ 00001C E0 MOVX A,@DPTR
\ 00001D 7002 JNZ ??SPIMgr_ProcessZAppData_0
\ 00001F A3 INC DPTR
\ 000020 E0 MOVX A,@DPTR
\ ??SPIMgr_ProcessZAppData_0:
\ 000021 6018 JZ ??SPIMgr_ProcessZAppData_1
\ 000023 90.... MOV DPTR,#SPIMgr_MaxZAppBufLen
\ 000026 E0 MOVX A,@DPTR
\ 000027 FA MOV R2,A
\ 000028 A3 INC DPTR
\ 000029 E0 MOVX A,@DPTR
\ 00002A FB MOV R3,A
\ 00002B C3 CLR C
\ 00002C E8 MOV A,R0
\ 00002D 9A SUBB A,R2
\ 00002E E9 MOV A,R1
\ 00002F 9B SUBB A,R3
\ 000030 4009 JC ??SPIMgr_ProcessZAppData_1
313 {
314 length = SPIMgr_MaxZAppBufLen;
\ 000032 90.... MOV DPTR,#SPIMgr_MaxZAppBufLen
\ 000035 E0 MOVX A,@DPTR
\ 000036 FE MOV R6,A
\ 000037 A3 INC DPTR
\ 000038 E0 MOVX A,@DPTR
\ 000039 8003 SJMP ??SPIMgr_ProcessZAppData_2
315 }
316 else
317 {
318 length = rxBufLen;
\ ??SPIMgr_ProcessZAppData_1:
\ 00003B E8 MOV A,R0
\ 00003C FE MOV R6,A
\ 00003D E9 MOV A,R1
\ ??SPIMgr_ProcessZAppData_2:
\ 00003E FF MOV R7,A
319 }
320
321 /* Verify events */
322 if (event == HAL_UART_TX_FULL)
\ 00003F 7408 MOV A,#0x8
\ 000041 65.. XRL A,?V0 + 0
\ 000043 606E JZ ??SPIMgr_ProcessZAppData_3
323 {
324 // Do something when TX if full
325 return;
326 }
327
328 if (event & ( HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
\ 000045 7407 MOV A,#0x7
\ 000047 55.. ANL A,?V0 + 0
\ 000049 6068 JZ ??SPIMgr_ProcessZAppData_3
329 {
330 if ( App_TaskID )
\ 00004B 90.... MOV DPTR,#App_TaskID
\ 00004E E0 MOVX A,@DPTR
\ 00004F 6062 JZ ??SPIMgr_ProcessZAppData_3
331 {
332 /*
333 If Application is ready to receive and there is something
334 in the Rx buffer then send it up
335 */
336 if ((SPIMgr_ZAppRxStatus == SPI_MGR_ZAPP_RX_READY ) && (length != 0))
\ 000051 90.... MOV DPTR,#SPIMgr_ZAppRxStatus
\ 000054 E0 MOVX A,@DPTR
\ 000055 6401 XRL A,#0x1
\ 000057 705A JNZ ??SPIMgr_ProcessZAppData_3
\ 000059 EE MOV A,R6
\ 00005A 7001 JNZ ??SPIMgr_ProcessZAppData_4
\ 00005C EF MOV A,R7
\ ??SPIMgr_ProcessZAppData_4:
\ 00005D 6054 JZ ??SPIMgr_ProcessZAppData_3
337 {
338 /* Disable App flow control until it processes the current data */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -