📄 mstick.txt
字号:
;;;88 Delay(4000);
000578 e3a00efa MOV r0,#0xfa0
00057c ebfffffe BL Delay
;;;89 //Ms_Reset();
;;;90
;;;91
;;;92 while(1) {
000580 e1a00000 NOP
|L1.1412|
000584 e1a00000 NOP
;;;93 PrintSubMessage();
000588 ebfffffe BL PrintSubMessage
;;;94 Uart_Printf("\nSelect(-1 to exit): ");
00058c e28f009c ADR r0,|L1.1584|
000590 ebfffffe BL _printf
;;;95 i = Uart_GetIntNum();
000594 ebfffffe BL Uart_GetIntNum
000598 e1a04000 MOV r4,r0
;;;96 //Uart_Printf("IN:%d.\n\n", i);
;;;97 if(i==-1) break;
00059c e3740001 CMN r4,#1
0005a0 1a000000 BNE |L1.1448|
0005a4 ea000007 B |L1.1480|
;;;98 if(i>=0 && (i<(sizeof(mstick_func)/8)) )
|L1.1448|
0005a8 e3540000 CMP r4,#0
0005ac ba000004 BLT |L1.1476|
0005b0 e3540012 CMP r4,#0x12
0005b4 2a000002 BCS |L1.1476|
;;;99 ( (void (*)(void)) (mstick_func[i][0]) )(); // execute selected function.
0005b8 e51f1554 LDR r1,|L1.108|
0005bc e7910184 LDR r0,[r1,r4,LSL #3]
0005c0 e12fff30 BLX r0
;;;100 }
|L1.1476|
0005c4 eaffffee B |L1.1412|
;;;101
;;;102 }
|L1.1480|
0005c8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.1484|
0005cc 6174530a DCB "\nSta"
0005d0 4d207472 DCB "rt M"
0005d4 63697473 DCB "stic"
0005d8 614d5f6b DCB "k_Ma"
0005dc 2e2e6e69 DCB "in.."
0005e0 00000a2e DCB ".\n\0\0"
|L1.1508|
0005e4 6974734d DCB "Msti"
0005e8 48206b63 DCB "ck H"
0005ec 2074736f DCB "ost "
0005f0 74696e69 DCB "init"
0005f4 00000a2e DCB ".\n\0\0"
|L1.1528|
0005f8 01312d00 DCD 0x01312d00
|L1.1532|
0005fc 6974734d DCB "Msti"
000600 49206b63 DCB "ck I"
000604 69207172 DCB "rq i"
000608 2e74696e DCB "nit."
00060c 0000000a DCB "\n\0\0\0"
|L1.1552|
000610 65736e49 DCB "Inse"
000614 4d207472 DCB "rt M"
000618 726f6d65 DCB "emor"
00061c 74732079 DCB "y st"
000620 0a6b6369 DCB "ick\n"
000624 00000000 DCB "\0\0\0\0"
|L1.1576|
000628 0000002e DCB ".\0\0\0"
|L1.1580|
00062c 00001388 DCD 0x00001388
|L1.1584|
000630 6c65530a DCB "\nSel"
000634 28746365 DCB "ect("
000638 7420312d DCB "-1 t"
00063c 7865206f DCB "o ex"
000640 3a297469 DCB "it):"
000644 00000020 DCB " \0\0\0"
ENDP
Mstpc_Get_Int PROC
;;;950 U16 Mstpc_Get_Int(int num, U8 End_Command)
;;;951 {
000648 e92d40f8 STMFD sp!,{r3-r7,lr}
00064c e1a06000 MOV r6,r0
000650 e1a07001 MOV r7,r1
;;;952 U16 int_status=0;
000654 e3a05000 MOV r5,#0
;;;953 int cnt=0;
000658 e3a04000 MOV r4,#0
;;;954
;;;955 cnt=0;
00065c e3a04000 MOV r4,#0
;;;956 do {
000660 e1a00000 NOP
;;;957 rTP_CMD = GET_INT | num;
|L1.1636|
000664 e3860c70 ORR r0,r6,#0x7000
000668 e51f1568 LDR r1,|L1.264|
00066c e5810000 STR r0,[r1,#0]
;;;958 while(!INT_P_END); // Data must be read after INT_P_END...
000670 e1a00000 NOP
|L1.1652|
000674 e51f0574 LDR r0,|L1.264|
000678 e590000c LDR r0,[r0,#0xc]
00067c e3100080 TST r0,#0x80
000680 0afffffb BEQ |L1.1652|
;;;959 while(RBE);
000684 e1a00000 NOP
|L1.1672|
000688 e51f0588 LDR r0,|L1.264|
00068c e5900004 LDR r0,[r0,#4]
000690 e3100008 TST r0,#8
000694 1afffffb BNE |L1.1672|
;;;960 int_status = (U8)rDAT_FIFO;
000698 e51f0598 LDR r0,|L1.264|
00069c e5900008 LDR r0,[r0,#8]
0006a0 e20050ff AND r5,r0,#0xff
;;;961 if(cnt++>TIME_OUT) break;
0006a4 e1a00004 MOV r0,r4
0006a8 e2844001 ADD r4,r4,#1
0006ac e250cd80 SUBS r12,r0,#0x2000
0006b0 a25cce71 SUBGES r12,r12,#0x710
0006b4 da000000 BLE |L1.1724|
0006b8 ea000001 B |L1.1732|
;;;962 } while(!(int_status==End_Command));
|L1.1724|
0006bc e1550007 CMP r5,r7
0006c0 1affffe7 BNE |L1.1636|
;;;963
;;;964 if(cnt>TIME_OUT) Uart_Printf("Time out(%d)\n", int_status);
|L1.1732|
0006c4 e254cd80 SUBS r12,r4,#0x2000
0006c8 a25cce71 SUBGES r12,r12,#0x710
0006cc da000002 BLE |L1.1756|
0006d0 e1a01005 MOV r1,r5
0006d4 e28f0008 ADR r0,|L1.1764|
0006d8 ebfffffe BL _printf
;;;965
;;;966 //Uart_Printf("Get int cnt(%d)\n", cnt);
;;;967
;;;968 return int_status;
|L1.1756|
0006dc e1a00005 MOV r0,r5
;;;969 }
0006e0 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.1764|
0006e4 656d6954 DCB "Time"
0006e8 74756f20 DCB " out"
0006ec 29642528 DCB "(%d)"
0006f0 0000000a DCB "\n\0\0\0"
ENDP
Mstpc_Write_Rw_Reg_Addr PROC
;;;923 int Mstpc_Write_Rw_Reg_Addr(U8 Read_Addr, U8 Read_Size, U8 Write_Addr, U8 Write_Size)
;;;924 {
0006f4 e52de004 STR lr,[sp,#-4]!
;;;925
;;;926 // 1. SET R/W address in device TPC
;;;927
;;;928 rTP_CMD = SET_RW_REG_ADDRS | 4;
0006f8 e59fc3fc LDR r12,|L1.2812|
0006fc e51fe5fc LDR lr,|L1.264|
000700 e58ec000 STR r12,[lr,#0]
;;;929 // READ_SIZE | READ_ADDR
;;;930 rDAT_FIFO = (Read_Size<<8 | Read_Addr<<0);
000704 e180c401 ORR r12,r0,r1,LSL #8
000708 e58ec008 STR r12,[lr,#8]
;;;931 while(!TBE); // wait until empty
00070c e1a00000 NOP
|L1.1808|
000710 e51fc610 LDR r12,|L1.264|
000714 e59cc004 LDR r12,[r12,#4]
000718 e31c0002 TST r12,#2
00071c 0afffffb BEQ |L1.1808|
;;;932 // WRITE_SIZE | WRITE_ADDR
;;;933 rDAT_FIFO = (Write_Size<<8 | Write_Addr<<0);
000720 e182c403 ORR r12,r2,r3,LSL #8
000724 e51fe624 LDR lr,|L1.264|
000728 e58ec008 STR r12,[lr,#8]
;;;934 while(!TBE);
00072c e1a00000 NOP
|L1.1840|
000730 e51fc630 LDR r12,|L1.264|
000734 e59cc004 LDR r12,[r12,#4]
000738 e31c0002 TST r12,#2
00073c 0afffffb BEQ |L1.1840|
;;;935
;;;936 while(!INT_P_END); // Wait until Protocol end.
000740 e1a00000 NOP
|L1.1860|
000744 e51fc644 LDR r12,|L1.264|
000748 e59cc00c LDR r12,[r12,#0xc]
00074c e31c0080 TST r12,#0x80
000750 0afffffb BEQ |L1.1860|
;;;937 }
000754 e49df004 LDR pc,[sp],#4
ENDP
Mstpc_Read_Status_Reg PROC
;;;972 int Mstpc_Read_Status_Reg(U8 Status_Addr, U8 Status_Size, U8 *Buffer)
;;;973 {
000758 e92d41f0 STMFD sp!,{r4-r8,lr}
00075c e1a08000 MOV r8,r0
000760 e1a05001 MOV r5,r1
000764 e1a06002 MOV r6,r2
;;;974 //int i, cnt;
;;;975 int i;
;;;976 //U16 IntStatus1, htmp;
;;;977 U16 htmp;
;;;978
;;;979 if(Status_Size%1) Status_Size+=1; // Must be read by even number
;;;980
;;;981 // Clear buffer
;;;982 for(i=0; i<Status_Size; i++) {
000768 e3a04000 MOV r4,#0
|L1.1900|
00076c e1540005 CMP r4,r5
000770 aa000005 BGE |L1.1932|
000774 ea000001 B |L1.1920|
|L1.1912|
000778 e2844001 ADD r4,r4,#1
00077c eafffffa B |L1.1900|
;;;983 Buffer[i] = 0x0;
|L1.1920|
000780 e3a00000 MOV r0,#0
000784 e7c60004 STRB r0,[r6,r4]
;;;984 }
000788 eafffffa B |L1.1912|
;;;985 // Set R/W register address
;;;986 Mstpc_Write_Rw_Reg_Addr(Status_Addr, Status_Size, 0x0, 0x0);
|L1.1932|
00078c e3a03000 MOV r3,#0
000790 e3a02000 MOV r2,#0
000794 e1a01005 MOV r1,r5
000798 e1a00008 MOV r0,r8
00079c ebfffffe BL Mstpc_Write_Rw_Reg_Addr
;;;987
;;;988 // Status read command.
;;;989 rTP_CMD = READ_REG | (Status_Size);
0007a0 e3850c40 ORR r0,r5,#0x4000
0007a4 e51f16a4 LDR r1,|L1.264|
0007a8 e5810000 STR r0,[r1,#0]
;;;990 // Read status data.
;;;991 for(i=0; i<(Status_Size); i+=2) {
0007ac e3a04000 MOV r4,#0
|L1.1968|
0007b0 e1540005 CMP r4,r5
0007b4 aa000015 BGE |L1.2064|
0007b8 ea000001 B |L1.1988|
|L1.1980|
0007bc e2844002 ADD r4,r4,#2
0007c0 eafffffa B |L1.1968|
;;;992 while(RBE);
|L1.1988|
0007c4 e1a00000 NOP
|L1.1992|
0007c8 e51f06c8 LDR r0,|L1.264|
0007cc e5900004 LDR r0,[r0,#4]
0007d0 e3100008 TST r0,#8
0007d4 1afffffb BNE |L1.1992|
;;;993 while(!INT_P_END);
0007d8 e1a00000 NOP
|L1.2012|
0007dc e51f06dc LDR r0,|L1.264|
0007e0 e590000c LDR r0,[r0,#0xc]
0007e4 e3100080 TST r0,#0x80
0007e8 0afffffb BEQ |L1.2012|
;;;994 htmp = rDAT_FIFO;
0007ec e51f06ec LDR r0,|L1.264|
0007f0 e5900008 LDR r0,[r0,#8]
0007f4 e1a07800 MOV r7,r0,LSL #16
0007f8 e1a07827 MOV r7,r7,LSR #16
;;;995 Buffer[i+1] = (U8)(htmp>>8);
0007fc e1a00427 MOV r0,r7,LSR #8
000800 e0861004 ADD r1,r6,r4
000804 e5c10001 STRB r0,[r1,#1]
;;;996 Buffer[i] = (U8)htmp;
000808 e7c67004 STRB r7,[r6,r4]
;;;997 }
00080c eaffffea B |L1.1980|
;;;998
;;;999
;;;1000 }
|L1.2064|
000810 e8bd81f0 LDMFD sp!,{r4-r8,pc}
ENDP
Mstpc_Write_Param_Reg PROC
;;;898 int Mstpc_Write_Param_Reg(U32 Block_Addr, U8 Sys_Param, U8 Page_Addr, U8 Cmd_Param)
;;;899 {
000814 e92d4008 STMFD sp!,{r3,lr}
;;;900 U8 Block[3];
;;;901
;;;902 //Uart_Printf("Param:Block[%x], Page[%x]\n", Block_Addr, Page_Addr);
;;;903 Block[0] = (unsigned char)(Block_Addr & 0xFF);
000818 e5cd0000 STRB r0,[sp,#0]
;;;904 Block[1] = (unsigned char)((Block_Addr>>8) & 0xFF);
00081c e1a0c800 MOV r12,r0,LSL #16
000820 e1a0cc2c MOV r12,r12,LSR #24
000824 e5cdc001 STRB r12,[sp,#1]
;;;905 Block[2] = (unsigned char)((Block_Addr>>16) & 0xFF);
000828 e1a0c400 MOV r12,r0,LSL #8
00082c e1a0cc2c MOV r12,r12,LSR #24
000830 e5cdc002 STRB r12,[sp,#2]
;;;906 // 2. Write_Reg TPC
;;;907 rTP_CMD = WRITE_REG | 6;
000834 e59fc2c4 LDR r12,|L1.2816|
000838 e51fe738 LDR lr,|L1.264|
00083c e58ec000 STR r12,[lr,#0]
;;;908 // Block addr2 | Sys Param.
;;;909 rDAT_FIFO = (Block[2]<<8) | (Sys_Param<<0);
000840 e5ddc002 LDRB r12,[sp,#2]
000844 e181c40c ORR r12,r1,r12,LSL #8
000848 e58ec008 STR r12,[lr,#8]
;;;910 while(!TBE);
00084c e1a00000 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -