📄 probe_com.txt
字号:
;;;1329 }
000246 bd30 POP {r4,r5,pc}
;;;1330
ENDP
ProbeCom_CmdSimpleRd PROC
;;;813 CPU_INT16U tx_buf_sz)
;;;814 {
000248 e92de92d PUSH {r0-r8,lr}
00024c 461e MOV r6,r3
;;;815 CPU_ADDR addr;
;;;816 CPU_INT16U nbytes;
;;;817 CPU_INT08U error;
;;;818
;;;819
;;;820 addr = 0;
00024e 2700 MOVS r7,#0
;;;821 nbytes = 0;
000250 2400 MOVS r4,#0
;;;822 error = PROBE_COM_STATUS_OK;
000252 2501 MOVS r5,#1
;;;823
;;;824
;;;825 if (rx_pkt_sz == 8) { /* If RX data segment is the expected size */
000254 2a08 CMP r2,#8
000256 d10c BNE |L1.626|
;;;826 /* = 2 (= Rx header size ) */
;;;827 /* + 2 (= Number of bytes) */
;;;828 /* + 4 (= Address ) */
;;;829
;;;830 nbytes = ProbeCom_GetINT16U(&rx_buf); /* (a) Read the number of bytes to return */
000258 4668 MOV r0,sp
00025a f7fff7ff BL ProbeCom_GetINT16U
00025e 4604 MOV r4,r0
;;;831 addr = (CPU_ADDR)ProbeCom_GetINT32U(&rx_buf); /* (b) Read the memory address */
000260 4668 MOV r0,sp
000262 f7fff7ff BL ProbeCom_GetINT32U
000266 4607 MOV r7,r0
;;;832
;;;833 if (nbytes + PROBE_COM_SIZE_TX_HEADER > tx_buf_sz) { /* (c) If TX packet will NOT fit in buffer */
000268 1d20 ADDS r0,r4,#4
00026a 42b0 CMP r0,r6
00026c d902 BLS |L1.628|
;;;834 error = PROBE_COM_STATUS_TX_PKT_TOO_LARGE; /* (i) Error */
00026e 25fd MOVS r5,#0xfd
000270 e000 B |L1.628|
|L1.626|
;;;835 }
;;;836
;;;837 } else { /* If RX data segment is NOT the expected size */
;;;838
;;;839 error = PROBE_COM_STATUS_RX_PKT_WRONG_SIZE;
000272 25fe MOVS r5,#0xfe
|L1.628|
;;;840 }
;;;841
;;;842 if (error != PROBE_COM_STATUS_OK) { /* Error */
000274 2d01 CMP r5,#1
000276 d006 BEQ |L1.646|
;;;843 return (ProbeCom_CmdError(tx_buf, error));
000278 4629 MOV r1,r5
00027a 9801 LDR r0,[sp,#4]
00027c f7fff7ff BL ProbeCom_CmdError
000280 b004 ADD sp,sp,#0x10
000282 e8bde8bd POP {r4-r8,pc}
|L1.646|
;;;844
;;;845 } else { /* No error */
;;;846 #if (PROBE_COM_STAT_EN == DEF_ENABLED)
;;;847 ProbeCom_TxSymCtr++; /* (a) Increment transmit symbol counter */
000286 485b LDR r0,|L1.1012|
000288 6881 LDR r1,[r0,#8] ; ProbeCom_TxSymCtr
00028a 1c49 ADDS r1,r1,#1
00028c 6081 STR r1,[r0,#8] ; ProbeCom_TxSymCtr
;;;848 ProbeCom_TxSymByteCtr += nbytes;
00028e 68c1 LDR r1,[r0,#0xc] ; ProbeCom_TxSymByteCtr
000290 4421 ADD r1,r1,r4
000292 60c1 STR r1,[r0,#0xc] ; ProbeCom_TxSymByteCtr
;;;849 #endif
;;;850 /* (b) Save TX data segment header */
;;;851 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_SIMPLE_RD); /* (i) TX packet format */
000294 f248f248 MOV r1,#0x8002
000298 a801 ADD r0,sp,#4
00029a f7fff7ff BL ProbeCom_StoINT16U
;;;852 ProbeCom_StoINT8U( &tx_buf, PROBE_COM_STATUS_OK); /* (ii) Target status */
00029e 2101 MOVS r1,#1
0002a0 a801 ADD r0,sp,#4
0002a2 f7fff7ff BL ProbeCom_StoINT8U
;;;853 ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier()); /* (iii) Modifier */
0002a6 f7fff7ff BL ProbeCom_PktModifier
0002aa 4601 MOV r1,r0
0002ac a801 ADD r0,sp,#4
0002ae f7fff7ff BL ProbeCom_StoINT8U
;;;854
;;;855 Mem_Copy((void *)tx_buf, (void *)addr, nbytes); /* (c) Save TX data segment data */
0002b2 4622 MOV r2,r4
0002b4 4639 MOV r1,r7
0002b6 9801 LDR r0,[sp,#4]
0002b8 f7fff7ff BL Mem_Copy
;;;856
;;;857 return (nbytes + PROBE_COM_SIZE_TX_HEADER); /* (d) Return TX data segment size */
0002bc 1d20 ADDS r0,r4,#4
0002be b280 UXTH r0,r0
;;;858 /* = nbytes (= Tx data size) */
;;;859 /* + 4 (= Tx header size) */
;;;860 }
;;;861 }
0002c0 b004 ADD sp,sp,#0x10
0002c2 e8bde8bd POP {r4-r8,pc}
;;;862
ENDP
ProbeCom_StoINT32U PROC
;;;1358 static void ProbeCom_StoINT32U (CPU_INT08U **buf, CPU_INT32U data)
;;;1359 {
0002c6 b530 PUSH {r4,r5,lr}
0002c8 4605 MOV r5,r0
0002ca 460c MOV r4,r1
;;;1360 ProbeCom_StoINT16U(buf, data & 0x0000FFFFL);
0002cc b2a1 UXTH r1,r4
0002ce 4628 MOV r0,r5
0002d0 f7fff7ff BL ProbeCom_StoINT16U
;;;1361 ProbeCom_StoINT16U(buf, data >> 16);
0002d4 0c21 LSRS r1,r4,#16
0002d6 4628 MOV r0,r5
0002d8 e8bde8bd POP {r4,r5,lr}
0002dc e7fe B ProbeCom_StoINT16U
;;;1362 }
ENDP
ProbeCom_CmdQuery PROC
;;;683 CPU_INT16U tx_buf_sz)
;;;684 {
0002de b57f PUSH {r0-r6,lr}
;;;685 CPU_INT16U query;
;;;686 CPU_INT16U nbytes;
;;;687 CPU_INT08U error;
;;;688
;;;689
;;;690 query = 0;
0002e0 2600 MOVS r6,#0
;;;691 nbytes = 0;
0002e2 2400 MOVS r4,#0
;;;692 error = PROBE_COM_STATUS_OK;
0002e4 2501 MOVS r5,#1
;;;693
;;;694
;;;695 if (rx_pkt_sz == 4) { /* If RX data segment is the expected size */
0002e6 2a04 CMP r2,#4
0002e8 d10e BNE |L1.776|
;;;696 /* = 2 (= Rx header size) */
;;;697 /* + 2 (= Query ) */
;;;698
;;;699 query = ProbeCom_GetINT16U(&rx_buf); /* (a) Read the query */
0002ea 4668 MOV r0,sp
0002ec f7fff7ff BL ProbeCom_GetINT16U
0002f0 4606 MOV r6,r0
;;;700
;;;701 switch (query) {
0002f2 f5a6f5a6 SUB r0,r6,#0x100
0002f6 3801 SUBS r0,#1
0002f8 d007 BEQ |L1.778|
0002fa 2801 CMP r0,#1
0002fc d005 BEQ |L1.778|
0002fe f5b0f5b0 CMP r0,#0xf00
000302 d002 BEQ |L1.778|
;;;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;
000304 25fc MOVS r5,#0xfc
;;;709 break;
000306 e000 B |L1.778|
|L1.776|
;;;710 }
;;;711
;;;712 } else { /* If RX data segment is NOT the expected size */
;;;713
;;;714 error = PROBE_COM_STATUS_RX_PKT_WRONG_SIZE;
000308 25fe MOVS r5,#0xfe
|L1.778|
;;;715 }
;;;716
;;;717 if (error != PROBE_COM_STATUS_OK) { /* Error */
00030a 2d01 CMP r5,#1
00030c d005 BEQ |L1.794|
;;;718 return (ProbeCom_CmdError(tx_buf, error));
00030e 4629 MOV r1,r5
000310 9801 LDR r0,[sp,#4]
000312 f7fff7ff BL ProbeCom_CmdError
000316 b004 ADD sp,sp,#0x10
;;;719
;;;720 }
;;;721
;;;722 /* No error */
;;;723 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_TX_QUERY); /* (a) TX packet format */
;;;724 ProbeCom_StoINT8U( &tx_buf, PROBE_COM_STATUS_OK); /* (b) Target status */
;;;725 ProbeCom_StoINT8U( &tx_buf, ProbeCom_PktModifier()); /* (c) Modifier */
;;;726
;;;727 /* (d) Save TX data segment data */
;;;728 switch (query) {
;;;729
;;;730 case PROBE_COM_QUERY_MAX_RX_SIZE:
;;;731 ProbeCom_StoINT32U(&tx_buf, PROBE_COM_RX_MAX_SIZE);
;;;732 nbytes = 4;
;;;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 );
;;;742 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_SIMPLE_RD );
;;;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);
;;;749 nbytes += 2;
;;;750 #if (PROBE_COM_SUPPORT_STR == DEF_TRUE)
;;;751 ProbeCom_StoINT16U(&tx_buf, PROBE_COM_FMT_RX_STR_GET);
;;;752 nbytes += 2;
;;;753 #endif
;;;754 break;
;;;755
;;;756 default:
;;;757 break;
;;;758 }
;;;759
;;;760 return (nbytes + PROBE_COM_SIZE_TX_HEADER); /* (e) Return TX data segment size */
;;;761 /* = nbytes (= Tx data size) */
;;;762 /* + 4 (= Tx header size) */
;;;763 }
000318 bd70 POP {r4-r6,pc}
|L1.794|
00031a f248f248 MOV r1,#0x8001
00031e a801 ADD r0,sp,#4
000320 f7fff7ff BL ProbeCom_StoINT16U
000324 2101 MOVS r1,#1
000326 a801 ADD r0,sp,#4
000328 f7fff7ff BL ProbeCom_StoINT8U
00032c f7fff7ff BL ProbeCom_PktModifier
000330 4601 MOV r1,r0
000332 a801 ADD r0,sp,#4
000334 f7fff7ff BL ProbeCom_StoINT8U
000338 f5a6f5a6 SUB r0,r6,#0x100
00033c 3801 SUBS r0,#1
00033e d019 BEQ |L1.884|
000340 2801 CMP r0,#1
000342 d01d BEQ |L1.896|
000344 f5b0f5b0 CMP r0,#0xf00
000348 d110 BNE |L1.876|
00034a 2101 MOVS r1,#1
00034c a801 ADD r0,sp,#4
00034e f7fff7ff BL ProbeCom_StoINT16U
000352 2102 MOVS r1,#2
000354 a801 ADD r0,sp,#4
000356 f7fff7ff BL ProbeCom_StoINT16U
00035a 2107 MOVS r1,#7
00035c a801 ADD r0,sp,#4
00035e f7fff7ff BL ProbeCom_StoINT16U
000362 2109 MOVS r1,#9
000364 a801 ADD r0,sp,#4
000366 f7fff7ff BL ProbeCom_StoINT16U
00036a 2408 MOVS r4,#8
|L1.876|
00036c 1d20 ADDS r0,r4,#4
00036e b280 UXTH r0,r0
000370 b004 ADD sp,sp,#0x10
000372 bd70 POP {r4-r6,pc}
|L1.884|
000374 2140 MOVS r1,#0x40
000376 a801 ADD r0,sp,#4
000378 f7fff7ff BL ProbeCom_StoINT32U
00037c 2404 MOVS r4,#4
00037e e7f5 B |L1.876|
|L1.896|
000380 2140 MOVS r1,#0x40
000382 a801 ADD r0,sp,#4
000384 f7fff7ff BL ProbeCom_StoINT32U
000388 2404 MOVS r4,#4
00038a e7ef B |L1.876|
;;;764
ENDP
ProbeCom_ParseRxPkt PROC
;;;353 CPU_INT16U tx_buf_sz)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -