📄 bsp_ser.lst
字号:
\ 00000004 .... LDR.N R0,??DataTable10_2
\ 00000006 ........ BL BSP_OS_SemWait
299
300 rx_byte = BSP_Ser_RdByteUnlocked();
\ 0000000A ........ BL BSP_Ser_RdByteUnlocked
\ 0000000E 0400 MOVS R4,R0
301
302 BSP_OS_SemPost(&BSP_SerLock); /* Release access to the serial interface. */
\ 00000010 .... LDR.N R0,??DataTable10_2
\ 00000012 ........ BL BSP_OS_SemPost
303
304 return (rx_byte);
\ 00000016 2000 MOVS R0,R4
\ 00000018 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 0000001A 10BD POP {R4,PC} ;; return
305 }
306
307
308 /*
309 *********************************************************************************************************
310 * BSP_Ser_RdByteUnlocked()
311 *
312 * Description : Receive a single byte.
313 *
314 * Argument(s) : none.
315 *
316 * Return(s) : The received byte.
317 *
318 * Caller(s) : BSP_Ser_RdByte()
319 * BSP_Ser_RdStr()
320 *
321 * Note(s) : none.
322 *********************************************************************************************************
323 */
324
\ In section .text, align 2, keep-with-next
325 CPU_INT08U BSP_Ser_RdByteUnlocked (void)
326 {
\ BSP_Ser_RdByteUnlocked:
\ 00000000 10B5 PUSH {R4,LR}
327
328 CPU_INT08U rx_byte;
329
330
331 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* Enable the Receive not empty interrupt */
\ 00000002 0122 MOVS R2,#+1
\ 00000004 40F22551 MOVW R1,#+1317
\ 00000008 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 0000000A ........ BL USART_ITConfig
332
333 BSP_OS_SemWait(&BSP_SerRxWait, 0); /* Wait until data is received */
\ 0000000E 0021 MOVS R1,#+0
\ 00000010 .... LDR.N R0,??DataTable10_1
\ 00000012 ........ BL BSP_OS_SemWait
334
335 USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); /* Disable the Receive not empty interrupt */
\ 00000016 0022 MOVS R2,#+0
\ 00000018 40F22551 MOVW R1,#+1317
\ 0000001C .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 0000001E ........ BL USART_ITConfig
336
337 rx_byte = BSP_SerRxData; /* Read the data from the temporary register */
\ 00000022 .... LDR.N R0,??DataTable10_6
\ 00000024 0078 LDRB R0,[R0, #+0]
\ 00000026 0400 MOVS R4,R0
338
339 return (rx_byte);
\ 00000028 2000 MOVS R0,R4
\ 0000002A C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 0000002C 10BD POP {R4,PC} ;; return
340 }
341
342 /*
343 *********************************************************************************************************
344 * BSP_Ser_RdStr()
345 *
346 * Description : This function reads a string from a UART.
347 *
348 * Argument(s) : p_str A pointer to a buffer at which the string can be stored.
349 *
350 * len The size of the string that will be read.
351 *
352 * Return(s) : none.
353 *
354 * Caller(s) : Application
355 *
356 * Note(s) : none.
357 *********************************************************************************************************
358 */
359
\ In section .text, align 2, keep-with-next
360 void BSP_Ser_RdStr (CPU_CHAR *p_str,
361 CPU_INT16U len)
362 {
\ BSP_Ser_RdStr:
\ 00000000 2DE9F843 PUSH {R3-R9,LR}
\ 00000004 0400 MOVS R4,R0
\ 00000006 0D00 MOVS R5,R1
363 CPU_CHAR *p_char;
364 CPU_BOOLEAN rxd_history_char0;
365 CPU_CHAR rx_data;
366 CPU_BOOLEAN err;
367
368
369 rxd_history_char0 = DEF_NO;
\ 00000008 0020 MOVS R0,#+0
\ 0000000A 0700 MOVS R7,R0
370 p_str[0] = (CPU_CHAR)'\0';
\ 0000000C 0020 MOVS R0,#+0
\ 0000000E 2070 STRB R0,[R4, #+0]
371 p_char = p_str;
\ 00000010 2600 MOVS R6,R4
372
373 err = BSP_OS_SemWait(&BSP_SerLock, 0); /* Obtain access to the serial interface */
\ 00000012 0021 MOVS R1,#+0
\ 00000014 .... LDR.N R0,??DataTable10_2
\ 00000016 ........ BL BSP_OS_SemWait
\ 0000001A 8146 MOV R9,R0
374
375 if (err != DEF_OK ) {
\ 0000001C 5FFA89F9 UXTB R9,R9 ;; ZeroExt R9,R9,#+24,#+24
\ 00000020 B9F1010F CMP R9,#+1
\ 00000024 49D1 BNE.N ??BSP_Ser_RdStr_0
376 return;
377 }
378
379 while (DEF_TRUE)
380 {
381 rx_data = BSP_Ser_RdByteUnlocked();
\ ??BSP_Ser_RdStr_1:
\ 00000026 ........ BL BSP_Ser_RdByteUnlocked
\ 0000002A 8046 MOV R8,R0
382
383 if ((rx_data == ASCII_CHAR_CARRIAGE_RETURN) || /* Is it '\r' or '\n' character ? */
384 (rx_data == ASCII_CHAR_LINE_FEED )) {
\ 0000002C 5FFA88F8 UXTB R8,R8 ;; ZeroExt R8,R8,#+24,#+24
\ 00000030 B8F10D0F CMP R8,#+13
\ 00000034 04D0 BEQ.N ??BSP_Ser_RdStr_2
\ 00000036 5FFA88F8 UXTB R8,R8 ;; ZeroExt R8,R8,#+24,#+24
\ 0000003A B8F10A0F CMP R8,#+10
\ 0000003E 0BD1 BNE.N ??BSP_Ser_RdStr_3
385
386 BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_LINE_FEED);
\ ??BSP_Ser_RdStr_2:
\ 00000040 0A20 MOVS R0,#+10
\ 00000042 ........ BL BSP_Ser_WrByteUnlocked
387 BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_CARRIAGE_RETURN);
\ 00000046 0D20 MOVS R0,#+13
\ 00000048 ........ BL BSP_Ser_WrByteUnlocked
388 *p_char = (CPU_CHAR)'\0'; /* set the null character at the end of the string */
\ 0000004C 0020 MOVS R0,#+0
\ 0000004E 3070 STRB R0,[R6, #+0]
389 #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u)
390 Str_Copy(BSP_SerCmdHistory, p_str);
391 #endif
392 break; /* exit the loop */
393 }
394
395 if (rx_data == ASCII_CHAR_BACKSPACE) { /* Is backspace character */
396 if (p_char > p_str) {
397 BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE);
398 p_char--; /* Decrement the index */
399 }
400 }
401
402 if ((ASCII_IsPrint(rx_data) ) &&
403 (rxd_history_char0 == DEF_NO)) { /* Is it a printable character ... ? */
404 BSP_Ser_WrByteUnlocked((CPU_INT08U)rx_data); /* Echo-back */
405 *p_char = rx_data; /* Save the received character in the buffer */
406 p_char++; /* Increment the buffer index */
407 if (p_char >= &p_str[len]) {
408 p_char = &p_str[len];
409 }
410
411 } else if ((rx_data == ASCII_CHAR_ESCAPE) &&
412 (rxd_history_char0 == DEF_NO )) {
413 rxd_history_char0 = DEF_YES;
414
415 #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u)
416 } else if ((rx_data == ASCII_CHAR_LEFT_SQUARE_BRACKET) &&
417 (rxd_history_char0 == DEF_YES )) {
418
419 while (p_char != p_str) {
420 BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE);
421 p_char--; /* Decrement the index */
422 }
423
424 Str_Copy(p_str, BSP_SerCmdHistory);
425
426 while (*p_char != '\0') {
427 BSP_Ser_WrByteUnlocked(*p_char++);
428 }
429 #endif
430 } else {
431 rxd_history_char0 = DEF_NO;
432 }
433 }
434
435 BSP_OS_SemPost(&BSP_SerLock); /* Release access to the serial interface */
\ 00000050 .... LDR.N R0,??DataTable10_2
\ 00000052 ........ BL BSP_OS_SemPost
436 }
\ 00000056 30E0 B.N ??BSP_Ser_RdStr_0
\ ??BSP_Ser_RdStr_3:
\ 00000058 5FFA88F8 UXTB R8,R8 ;; ZeroExt R8,R8,#+24,#+24
\ 0000005C B8F1080F CMP R8,#+8
\ 00000060 05D1 BNE.N ??BSP_Ser_RdStr_4
\ 00000062 B442 CMP R4,R6
\ 00000064 03D2 BCS.N ??BSP_Ser_RdStr_4
\ 00000066 0820 MOVS R0,#+8
\ 00000068 ........ BL BSP_Ser_WrByteUnlocked
\ 0000006C 761E SUBS R6,R6,#+1
\ ??BSP_Ser_RdStr_4:
\ 0000006E 4046 MOV R0,R8
\ 00000070 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000072 ........ BL ASCII_IsPrint
\ 00000076 0028 CMP R0,#+0
\ 00000078 11D0 BEQ.N ??BSP_Ser_RdStr_5
\ 0000007A FFB2 UXTB R7,R7 ;; ZeroExt R7,R7,#+24,#+24
\ 0000007C 002F CMP R7,#+0
\ 0000007E 0ED1 BNE.N ??BSP_Ser_RdStr_5
\ 00000080 4046 MOV R0,R8
\ 00000082 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000084 ........ BL BSP_Ser_WrByteUnlocked
\ 00000088 86F80080 STRB R8,[R6, #+0]
\ 0000008C 761C ADDS R6,R6,#+1
\ 0000008E ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000090 2819 ADDS R0,R5,R4
\ 00000092 8642 CMP R6,R0
\ 00000094 C7D3 BCC.N ??BSP_Ser_RdStr_1
\ 00000096 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000098 2819 ADDS R0,R5,R4
\ 0000009A 0600 MOVS R6,R0
\ 0000009C C3E7 B.N ??BSP_Ser_RdStr_1
\ ??BSP_Ser_RdStr_5:
\ 0000009E 5FFA88F8 UXTB R8,R8 ;; ZeroExt R8,R8,#+24,#+24
\ 000000A2 B8F11B0F CMP R8,#+27
\ 000000A6 05D1 BNE.N ??BSP_Ser_RdStr_6
\ 000000A8 FFB2 UXTB R7,R7 ;; ZeroExt R7,R7,#+24,#+24
\ 000000AA 002F CMP R7,#+0
\ 000000AC 02D1 BNE.N ??BSP_Ser_RdStr_6
\ 000000AE 0120 MOVS R0,#+1
\ 000000B0 0700 MOVS R7,R0
\ 000000B2 B8E7 B.N ??BSP_Ser_RdStr_1
\ ??BSP_Ser_RdStr_6:
\ 000000B4 0020 MOVS R0,#+0
\ 000000B6 0700 MOVS R7,R0
\ 000000B8 B5E7 B.N ??BSP_Ser_RdStr_1
\ ??BSP_Ser_RdStr_0:
\ 000000BA BDE8F183 POP {R0,R4-R9,PC} ;; return
437
438
439 /*
440 *********************************************************************************************************
441 * BSP_Ser_WrByteUnlocked()
442 *
443 * Description : Writes a single byte to a serial port.
444 *
445 * Argument(s) : c The character to output.
446 *
447 * Return(s) : none.
448 *
449 * Caller(s) : BSP_Ser_WrByte()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -