⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mstick.txt

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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 + -