📄 mstick.txt
字号:
|L1.2128|
000850 e51fc750 LDR r12,|L1.264|
000854 e59cc004 LDR r12,[r12,#4]
000858 e31c0002 TST r12,#2
00085c 0afffffb BEQ |L1.2128|
;;;911 // Block addr0 | Block addr1
;;;912 rDAT_FIFO = (Block[0]<<8) | (Block[1]<<0);
000860 e5ddc001 LDRB r12,[sp,#1]
000864 e5dde000 LDRB lr,[sp,#0]
000868 e18cc40e ORR r12,r12,lr,LSL #8
00086c e51fe76c LDR lr,|L1.264|
000870 e58ec008 STR r12,[lr,#8]
;;;913 while(!TBE);
000874 e1a00000 NOP
|L1.2168|
000878 e51fc778 LDR r12,|L1.264|
00087c e59cc004 LDR r12,[r12,#4]
000880 e31c0002 TST r12,#2
000884 0afffffb BEQ |L1.2168|
;;;914 // Page addr | CMD param.
;;;915 rDAT_FIFO = (Page_Addr<<8) | (Cmd_Param<<0);
000888 e183c402 ORR r12,r3,r2,LSL #8
00088c e51fe78c LDR lr,|L1.264|
000890 e58ec008 STR r12,[lr,#8]
;;;916 while(!TBE);
000894 e1a00000 NOP
|L1.2200|
000898 e51fc798 LDR r12,|L1.264|
00089c e59cc004 LDR r12,[r12,#4]
0008a0 e31c0002 TST r12,#2
0008a4 0afffffb BEQ |L1.2200|
;;;917
;;;918 while(!INT_P_END);
0008a8 e1a00000 NOP
|L1.2220|
0008ac e51fc7ac LDR r12,|L1.264|
0008b0 e59cc00c LDR r12,[r12,#0xc]
0008b4 e31c0080 TST r12,#0x80
0008b8 0afffffb BEQ |L1.2220|
;;;919
;;;920 }
0008bc e8bd8008 LDMFD sp!,{r3,pc}
ENDP
Ms_Page_Read PROC
;;;619 void Ms_Page_Read(U32 Block_Addr, U32 Page_Addr, U8 *Extra_Buffer, U8 *Read_Buffer)
;;;620 {
0008c0 e92d43f8 STMFD sp!,{r3-r9,lr}
0008c4 e1a08000 MOV r8,r0
0008c8 e1a07001 MOV r7,r1
0008cc e1a09002 MOV r9,r2
0008d0 e1a06003 MOV r6,r3
;;;621
;;;622 //int i, cnt=0;
;;;623 int i;
;;;624 //unsigned short IntStatus1, IntStatus2;
;;;625 //U16 Calc_Chksum, In_Chksum, htmp;
;;;626 U16 htmp;
;;;627
;;;628 // 1. SET R/W address in device TPC
;;;629 Mstpc_Write_Rw_Reg_Addr(0x0, 0x00, 0x10, 0x6);
0008d4 e3a03006 MOV r3,#6
0008d8 e3a02010 MOV r2,#0x10
0008dc e3a01000 MOV r1,#0
0008e0 e3a00000 MOV r0,#0
0008e4 ebfffffe BL Mstpc_Write_Rw_Reg_Addr
;;;630
;;;631 // 2. Write_Reg TPC
;;;632 Mstpc_Write_Param_Reg(Block_Addr, PARAM_BAMD, Page_Addr, DE_AREA);
0008e8 e3a03020 MOV r3,#0x20
0008ec e20720ff AND r2,r7,#0xff
0008f0 e3a01080 MOV r1,#0x80
0008f4 e1a00008 MOV r0,r8
0008f8 ebfffffe BL Mstpc_Write_Param_Reg
;;;633
;;;634 // 3. SET_CMD TPC
;;;635 Mstpc_Set_Command(BLOCK_READ);
0008fc e3a000aa MOV r0,#0xaa
000900 ebfffffe BL Mstpc_Set_Command
;;;636
;;;637 // 4. Get_Int or Get status.
;;;638 #if 1
;;;639 Int_Status = Mstpc_Get_Int(1, INT_BREQ|INT_CED);
000904 e3a010a0 MOV r1,#0xa0
000908 e3a00001 MOV r0,#1
00090c ebfffffe BL Mstpc_Get_Int
000910 e59f11ec LDR r1,|L1.2820|
000914 e5c10000 STRB r0,[r1,#0] ; Int_Status
;;;640 //Uart_Printf("Page read cnt(%x).\n", Int_Status);
;;;641
;;;642 Mstpc_Read_Status_Reg(EXTRA_REG_START,EXTRA_SIZE, Extra_Buffer);
000918 e1a02009 MOV r2,r9
00091c e3a01009 MOV r1,#9
000920 e3a00016 MOV r0,#0x16
000924 ebfffffe BL Mstpc_Read_Status_Reg
;;;643 #else
;;;644 // 4. Get INT register
;;;645 Int_Status = Mstpc_Get_Int(1, INT_BREQ);
;;;646 //Uart_Printf("Page read cnt(%x).\n", Int_Status);
;;;647 #endif
;;;648
;;;649 rTP_CMD = READ_PAGE_DATA | ONEPAGE_SIZE;
000928 e3a00d88 MOV r0,#0x2200
00092c e51f182c LDR r1,|L1.264|
000930 e5810000 STR r0,[r1,#0]
;;;650
;;;651 for(i=0; i<ONEPAGE_SIZE; i+=2) {
000934 e3a04000 MOV r4,#0
|L1.2360|
000938 e3540f80 CMP r4,#0x200
00093c aa000010 BGE |L1.2436|
000940 ea000001 B |L1.2380|
|L1.2372|
000944 e2844002 ADD r4,r4,#2
000948 eafffffa B |L1.2360|
;;;652 while(RBE);
|L1.2380|
00094c e1a00000 NOP
|L1.2384|
000950 e51f0850 LDR r0,|L1.264|
000954 e5900004 LDR r0,[r0,#4]
000958 e3100008 TST r0,#8
00095c 1afffffb BNE |L1.2384|
;;;653 htmp = rDAT_FIFO;
000960 e51f0860 LDR r0,|L1.264|
000964 e5900008 LDR r0,[r0,#8]
000968 e1a05800 MOV r5,r0,LSL #16
00096c e1a05825 MOV r5,r5,LSR #16
;;;654 Read_Buffer[i+1] = (U8)(htmp>>8); // High byte
000970 e1a00425 MOV r0,r5,LSR #8
000974 e0861004 ADD r1,r6,r4
000978 e5c10001 STRB r0,[r1,#1]
;;;655 Read_Buffer[i] = (U8)htmp; // Low byte
00097c e7c65004 STRB r5,[r6,r4]
;;;656 } while(!INT_P_END);
000980 eaffffef B |L1.2372|
|L1.2436|
000984 e1a00000 NOP
|L1.2440|
000988 e51f0888 LDR r0,|L1.264|
00098c e590000c LDR r0,[r0,#0xc]
000990 e3100080 TST r0,#0x80
000994 0afffffb BEQ |L1.2440|
;;;657
;;;658 Int_Status = Mstpc_Get_Int(1, INT_CED);
000998 e3a01080 MOV r1,#0x80
00099c e3a00001 MOV r0,#1
0009a0 ebfffffe BL Mstpc_Get_Int
0009a4 e59f1158 LDR r1,|L1.2820|
0009a8 e5c10000 STRB r0,[r1,#0] ; Int_Status
;;;659
;;;660 #if 0
;;;661 Uart_Printf("\nRead Page data is");
;;;662 for(i=0; i<ONEPAGE_SIZE; i++) {
;;;663 if(!(i%16)) Uart_Printf("\n%3x: ", i);
;;;664 Uart_Printf("[%02x]", Read_Buffer[i]);
;;;665 }
;;;666 Uart_Printf("\n");
;;;667 #endif
;;;668
;;;669
;;;670 }
0009ac e8bd83f8 LDMFD sp!,{r3-r9,pc}
ENDP
Test_Ms_Block_Read PROC
;;;124 void Test_Ms_Block_Read(void)
;;;125 {
0009b0 e92d41f0 STMFD sp!,{r4-r8,lr}
0009b4 e24ddf84 SUB sp,sp,#0x210
;;;126 U32 i;
;;;127 U32 blocknum, pagenum;
;;;128 U8 Read_Buffer[ONEPAGE_SIZE], Extra_Buffer[STATUS_SIZE];
;;;129 U16 In_Chksum, Calc_Chksum;
;;;130
;;;131 Uart_Printf("Input Block # for read block : ");
0009b8 e28f0f52 ADR r0,|L1.2824|
0009bc ebfffffe BL _printf
;;;132 blocknum = Uart_GetIntNum();
0009c0 ebfffffe BL Uart_GetIntNum
0009c4 e1a08000 MOV r8,r0
;;;133
;;;134 for(pagenum=0; pagenum<PAGE_IN_BLOCK_NUM; pagenum++) {
0009c8 e3a05000 MOV r5,#0
|L1.2508|
0009cc e3550020 CMP r5,#0x20
0009d0 2a000047 BCS |L1.2804|
0009d4 ea000001 B |L1.2528|
|L1.2520|
0009d8 e2855001 ADD r5,r5,#1
0009dc eafffffa B |L1.2508|
;;;135 Uart_Printf("Ms_Page_Read(%d,%d)\n", blocknum, pagenum);
|L1.2528|
0009e0 e1a02005 MOV r2,r5
0009e4 e1a01008 MOV r1,r8
0009e8 e28f0f4e ADR r0,|L1.2856|
0009ec ebfffffe BL _printf
;;;136 Ms_Page_Read(blocknum, pagenum, Extra_Buffer, Read_Buffer);
0009f0 e28d3010 ADD r3,sp,#0x10
0009f4 e28d2004 ADD r2,sp,#4
0009f8 e1a01005 MOV r1,r5
0009fc e1a00008 MOV r0,r8
000a00 ebfffffe BL Ms_Page_Read
;;;137
;;;138 // Calc checksum...
;;;139 for(Calc_Chksum=0, i=0; i<ONEPAGE_SIZE; i++) {
000a04 e3a06000 MOV r6,#0
000a08 e3a04000 MOV r4,#0
|L1.2572|
000a0c e3540f80 CMP r4,#0x200
000a10 2a000007 BCS |L1.2612|
000a14 ea000001 B |L1.2592|
|L1.2584|
000a18 e2844001 ADD r4,r4,#1
000a1c eafffffa B |L1.2572|
;;;140 Calc_Chksum += Read_Buffer[i];
|L1.2592|
000a20 e28d0010 ADD r0,sp,#0x10
000a24 e7d00004 LDRB r0,[r0,r4]
000a28 e0800006 ADD r0,r0,r6
000a2c e3c06b40 BIC r6,r0,#0x10000
;;;141 }
000a30 eafffff8 B |L1.2584|
;;;142 In_Chksum = (U16)Extra_Buffer[4] | (U16)(((U16)Extra_Buffer[5])<<8);
|L1.2612|
000a34 e5dd0008 LDRB r0,[sp,#8]
000a38 e5dd1009 LDRB r1,[sp,#9]
000a3c e1807401 ORR r7,r0,r1,LSL #8
;;;143 if(Calc_Chksum!=In_Chksum) {
000a40 e1560007 CMP r6,r7
000a44 0a000003 BEQ |L1.2648|
;;;144 Uart_Printf("Checksum ERROR(IN:%x,Calc:%x)\n", In_Chksum, Calc_Chksum);
000a48 e1a02006 MOV r2,r6
000a4c e1a01007 MOV r1,r7
000a50 e28f00e8 ADR r0,|L1.2880|
000a54 ebfffffe BL _printf
;;;145 }
;;;146
;;;147 #if 1
;;;148
;;;149 Uart_Printf("\nExtra data is");
|L1.2648|
000a58 e28f0f40 ADR r0,|L1.2912|
000a5c ebfffffe BL _printf
;;;150 for(i=0; i<EXTRA_SIZE; i++) {
000a60 e3a04000 MOV r4,#0
|L1.2660|
000a64 e3540009 CMP r4,#9
000a68 2a00000c BCS |L1.2720|
000a6c ea000001 B |L1.2680|
|L1.2672|
000a70 e2844001 ADD r4,r4,#1
000a74 eafffffa B |L1.2660|
;;;151 if(!(i%16)) Uart_Printf("\n%3x: ", i);
|L1.2680|
000a78 e314000f TST r4,#0xf
000a7c 1a000002 BNE |L1.2700|
000a80 e1a01004 MOV r1,r4
000a84 e28f00e4 ADR r0,|L1.2928|
000a88 ebfffffe BL _printf
;;;152 Uart_Printf("[%02x]", Extra_Buffer[i]);
|L1.2700|
000a8c e28d0004 ADD r0,sp,#4
000a90 e7d01004 LDRB r1,[r0,r4]
000a94 e28f00dc ADR r0,|L1.2936|
000a98 ebfffffe BL _printf
;;;153 }
000a9c eafffff3 B |L1.2672|
;;;154
;;;155 Uart_Printf("\nRead Page data is");
|L1.2720|
000aa0 e28f00d8 ADR r0,|L1.2944|
000aa4 ebfffffe BL _printf
;;;156 for(i=0; i<ONEPAGE_SIZE; i++) {
000aa8 e3a04000 MOV r4,#0
|L1.2732|
000aac e3540f80 CMP r4,#0x200
000ab0 2a00000c BCS |L1.2792|
000ab4 ea000001 B |L1.2752|
|L1.2744|
000ab8 e2844001 ADD r4,r4,#1
000abc eafffffa B |L1.2732|
;;;157 if(!(i%16)) Uart_Printf("\n%3x: ", i);
|L1.2752|
000ac0 e314000f TST r4,#0xf
000ac4 1a000002 BNE |L1.2772|
000ac8 e1a01004 MOV r1,r4
000acc e28f009c ADR r0,|L1.2928|
000ad0 ebfffffe BL _printf
;;;158 Uart_Printf("[%02x]", Read_Buffer[i]);
|L1.2772|
000ad4 e28d0010 ADD r0,sp,#0x10
000ad8 e7d01004 LDRB r1,[r0,r4]
000adc e28f0094 ADR r0,|L1.2936|
000ae0 ebfffffe BL _printf
;;;159 }
000ae4 eafffff3 B |L1.2744|
;;;160 Uart_Printf("\n");
|L1.2792|
000ae8 e28f00a4 ADR r0,|L1.2964|
000aec ebfffffe BL _printf
;;;161 #endif
;;;162 }
000af0 eaffffb8 B |L1.2520|
;;;163
;;;164 }
|L1.2804|
000af4 e28ddf84 ADD sp,sp,#0x210
000af8 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.2812|
000afc 00008004 DCD 0x00008004
|L1.2816|
000b00 0000b006 DCD 0x0000b006
|L1.2820|
000b04 00000010 DCD ||.bss$2|| + 16
|L1.2824|
000b08 75706e49 DCB "Inpu"
000b0c 6c422074 DCB "t Bl"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -