📄 probe_com.lst
字号:
621 *********************************************************************************************************
622 */
623
\ In segment CODE, align 4, keep-with-next
624 static CPU_INT16U ProbeCom_CmdError (CPU_INT08U *tx_buf,
625 CPU_INT16U com_error)
626 {
\ ProbeCom_CmdError:
\ 00000000 11B5 PUSH {R0,R4,LR}
\ 00000002 0C00 MOVS R4,R1
627 #if (PROBE_COM_STAT_EN == DEF_ENABLED)
628 ProbeCom_ErrPktCtr++;
\ 00000004 .... LDR.N R0,??DataTable7 ;; ProbeCom_RxPktCtr
\ 00000006 0169 LDR R1,[R0, #+16]
\ 00000008 491C ADDS R1,R1,#+1
\ 0000000A 0161 STR R1,[R0, #+16]
629 #endif
630
631 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_ERROR); /* (a) TX packet format */
\ 0000000C 5FF40041 MOVS R1,#+32768
\ 00000010 6846 MOV R0,SP
\ 00000012 ........ BL ProbeCom_StoINT16U
632 ProbeCom_StoINT8U( &tx_buf, com_error); /* (b) Target status */
\ 00000016 2100 MOVS R1,R4
\ 00000018 C9B2 UXTB R1,R1
\ 0000001A 6846 MOV R0,SP
\ 0000001C ........ BL ProbeCom_StoINT8U
633 ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier()); /* (c) Modifier */
\ 00000020 ........ BL ProbeCom_PktModifier
\ 00000024 0100 MOVS R1,R0
\ 00000026 6846 MOV R0,SP
\ 00000028 ........ BL ProbeCom_StoINT8U
634 return (PROBE_COM_SIZE_TX_HEADER); /* (d) Return TX data segment size */
\ 0000002C 0420 MOVS R0,#+4
\ 0000002E 12BD POP {R1,R4,PC} ;; return
635 /* = 4 (= Tx header size) */
636 }
637
638
639 /*
640 *********************************************************************************************************
641 * Respond to FMT_QUERY Command
642 *
643 * Description: This routine is called to parse the FMT_QUERY command. This command asks the target
644 * about its capabilities, which are returned in response.
645 *
646 * Argument(s): rx_buf is a pointer to the receive buffer
647 * tx_buf is a pointer to the transmit buffer
648 * rx_pkt_sz is the size of the receive packet
649 * tx_buf_sz is the size of the transmit buffer
650 *
651 * Returns : The number of bytes written to the tx buffer.
652 *
653 * Note(s) : (1) The RX format:
654 *
655 * (A) A 2-byte format , indicating the data segment format; AND
656 * (B) A 2-byte query , indicating the length of the remaining data.
657 *
658 * +-------------------------+-------------------------+
659 * | Format | Query |
660 * +-------------------------+-------------------------+
661 *
662 * (2) The TX format:
663 * (A) A 2-byte format , indicating the data segment format; AND
664 * (B) A 1-byte status , indicating the status after the request; AND
665 * (C) A 1-byte modifier; AND
666 * (E) A n-byte answer , the answer to the query.
667 *
668 * +-------------------------+------------+------------+
669 * | Format | Status | Modifier |
670 * +-------------------------+------------+------------+
671 * | Answer |
672 * | . |
673 * | . |
674 * | . |
675 * +---------------------------------------------------+
676 *
677 *********************************************************************************************************
678 */
679
\ In segment CODE, align 4, keep-with-next
680 static CPU_INT16U ProbeCom_CmdQuery (CPU_INT08U *rx_buf,
681 CPU_INT08U *tx_buf,
682 CPU_INT16U rx_pkt_sz,
683 CPU_INT16U tx_buf_sz)
684 {
\ ProbeCom_CmdQuery:
\ 00000000 73B5 PUSH {R0,R1,R4-R6,LR}
685 CPU_INT16U query;
686 CPU_INT16U nbytes;
687 CPU_INT08U error;
688
689
690 query = 0;
\ 00000002 0026 MOVS R6,#+0
\ 00000004 3500 MOVS R5,R6
691 nbytes = 0;
692 error = PROBE_COM_STATUS_OK;
\ 00000006 0124 MOVS R4,#+1
693
694
695 if (rx_pkt_sz == 4) { /* If RX data segment is the expected size */
\ 00000008 042A CMP R2,#+4
\ 0000000A 0DD1 BNE.N ??ProbeCom_CmdQuery_0
696 /* = 2 (= Rx header size) */
697 /* + 2 (= Query ) */
698
699 query = ProbeCom_GetINT16U(&rx_buf); /* (a) Read the query */
\ 0000000C 6846 MOV R0,SP
\ 0000000E ........ BL ProbeCom_GetINT16U
\ 00000012 0500 MOVS R5,R0
700
701 switch (query) {
\ 00000014 2149 LDR.N R1,??ProbeCom_CmdQuery_1 ;; 0x101
\ 00000016 401A SUBS R0,R0,R1
\ 00000018 0128 CMP R0,#+1
\ 0000001A 06D9 BLS.N ??ProbeCom_CmdQuery_2
\ 0000001C 5FF47061 MOVS R1,#+3840
\ 00000020 401A SUBS R0,R0,R1
\ 00000022 02D0 BEQ.N ??ProbeCom_CmdQuery_2
702 case PROBE_COM_QUERY_MAX_RX_SIZE:
703 case PROBE_COM_QUERY_MAX_TX_SIZE:
704 case PROBE_COM_QUERY_FMT_SUPPORT:
705 break;
706
707 default:
708 error = PROBE_COM_STATUS_QUERY_NOT_SUPPORTED;
\ 00000024 FC24 MOVS R4,#+252
\ 00000026 00E0 B.N ??ProbeCom_CmdQuery_2
709 break;
710 }
711
712 } else { /* If RX data segment is NOT the expected size */
713
714 error = PROBE_COM_STATUS_RX_PKT_WRONG_SIZE;
\ ??ProbeCom_CmdQuery_0:
\ 00000028 FE24 MOVS R4,#+254
715 }
716
717 if (error != PROBE_COM_STATUS_OK) { /* Error */
\ ??ProbeCom_CmdQuery_2:
\ 0000002A 012C CMP R4,#+1
\ 0000002C 04D0 BEQ.N ??ProbeCom_CmdQuery_3
718 return (ProbeCom_CmdError(tx_buf, error));
\ 0000002E 2100 MOVS R1,R4
\ 00000030 0198 LDR R0,[SP, #+4]
\ 00000032 ........ BL ProbeCom_CmdError
\ 00000036 76BD POP {R1,R2,R4-R6,PC}
719
720 }
721
722 /* No error */
723 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_QUERY); /* (a) TX packet format */
\ ??ProbeCom_CmdQuery_3:
\ 00000038 1949 LDR.N R1,??ProbeCom_CmdQuery_1+0x4 ;; 0x8001
\ 0000003A 01A8 ADD R0,SP,#+4
\ 0000003C ........ BL ProbeCom_StoINT16U
724 ProbeCom_StoINT8U( &tx_buf, PROBE_COM_STATUS_OK); /* (b) Target status */
\ 00000040 0121 MOVS R1,#+1
\ 00000042 01A8 ADD R0,SP,#+4
\ 00000044 ........ BL ProbeCom_StoINT8U
725 ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier()); /* (c) Modifier */
\ 00000048 ........ BL ProbeCom_PktModifier
\ 0000004C 0100 MOVS R1,R0
\ 0000004E 01A8 ADD R0,SP,#+4
\ 00000050 ........ BL ProbeCom_StoINT8U
726
727 /* (d) Save TX data segment data */
728 switch (query) {
\ 00000054 1148 LDR.N R0,??ProbeCom_CmdQuery_1 ;; 0x101
\ 00000056 2D1A SUBS R5,R5,R0
\ 00000058 012D CMP R5,#+1
\ 0000005A 04D9 BLS.N ??ProbeCom_CmdQuery_4
\ 0000005C 5FF47060 MOVS R0,#+3840
\ 00000060 2D1A SUBS R5,R5,R0
\ 00000062 06D0 BEQ.N ??ProbeCom_CmdQuery_5
\ 00000064 16E0 B.N ??ProbeCom_CmdQuery_6
729
730 case PROBE_COM_QUERY_MAX_RX_SIZE:
731 ProbeCom_StoINT32U(&tx_buf, PROBE_COM_RX_MAX_SIZE);
\ ??ProbeCom_CmdQuery_4:
\ 00000066 4021 MOVS R1,#+64
\ 00000068 01A8 ADD R0,SP,#+4
\ 0000006A ........ BL ProbeCom_StoINT32U
732 nbytes = 4;
\ 0000006E 0426 MOVS R6,#+4
\ 00000070 10E0 B.N ??ProbeCom_CmdQuery_6
733 break;
734
735 case PROBE_COM_QUERY_MAX_TX_SIZE:
736 ProbeCom_StoINT32U(&tx_buf, PROBE_COM_TX_MAX_SIZE);
737 nbytes = 4;
738 break;
739
740 case PROBE_COM_QUERY_FMT_SUPPORT:
741 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_QUERY );
\ ??ProbeCom_CmdQuery_5:
\ 00000072 0121 MOVS R1,#+1
\ 00000074 01A8 ADD R0,SP,#+4
\ 00000076 ........ BL ProbeCom_StoINT16U
742 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_SIMPLE_RD );
\ 0000007A 0221 MOVS R1,#+2
\ 0000007C 01A8 ADD R0,SP,#+4
\ 0000007E ........ BL ProbeCom_StoINT16U
743 nbytes = 4;
744 #if (PROBE_COM_SUPPORT_WR == DEF_TRUE)
745 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_SIMPLE_WR );
746 nbytes += 2;
747 #endif
748 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_MULTIPLE_RD);
\ 00000082 0721 MOVS R1,#+7
\ 00000084 01A8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -