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

📄 ac97.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\ac97.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  AC97_Port_Init PROC
;;;484    void AC97_Port_Init(void)
;;;485    {
                  |L1.0|
000000  e3a00456          MOV      r0,#0x56000000
;;;486    	//Push AC97 GPIO port configuration
;;;487    	save_AC97_rGPEDAT=rGPEDAT;
000004  e5900044          LDR      r0,[r0,#0x44]
000008  e59f115c          LDR      r1,|L1.364|
00000c  e5810000          STR      r0,[r1,#0]  ; save_AC97_rGPEDAT
;;;488    	save_AC97_rGPECON=rGPECON; 
000010  e3a00456          MOV      r0,#0x56000000
000014  e5900040          LDR      r0,[r0,#0x40]
000018  e59f1150          LDR      r1,|L1.368|
00001c  e5810000          STR      r0,[r1,#0]  ; save_AC97_rGPECON
;;;489    	save_AC97_rGPEUP=rGPEUP;
000020  e3a00456          MOV      r0,#0x56000000
000024  e5900048          LDR      r0,[r0,#0x48]
000028  e59f1144          LDR      r1,|L1.372|
00002c  e5810000          STR      r0,[r1,#0]  ; save_AC97_rGPEUP
;;;490    
;;;491    	//---------------------------------------------------------------------
;;;492    	//   PORT E GROUP
;;;493    	//Ports  :  GPE4    		        GPE3                 GPE2            GPE1              GPE0 
;;;494    	//Signal :  AC_SDATA_OUT   AC_SDATA_IN   AC_nRESET   AC_BIT_CLK   AC_SYNC 
;;;495    	//Binary :   11,                     11,                   11,                11,                 11    
;;;496    	//---------------------------------------------------------------------
;;;497    	rGPECON = rGPECON & ~(0x3ff) | 0x3ff;   //GPE[4:0]=AC_SDATA_OUT   AC_SDATA_IN   AC_nRESET   AC_BIT_CLK   AC_SYNC
000030  e3a00456          MOV      r0,#0x56000000
000034  e5900040          LDR      r0,[r0,#0x40]
000038  e3800fc0          ORR      r0,r0,#0x300
00003c  e38000ff          ORR      r0,r0,#0xff
000040  e3a01456          MOV      r1,#0x56000000
000044  e5810040          STR      r0,[r1,#0x40]
;;;498    	rGPEUP  = rGPEUP  & ~(0x1f)  | 0x1f;    //The pull up function is disabled GPE[4:0] 1 1111
000048  e3a00456          MOV      r0,#0x56000000
00004c  e5900048          LDR      r0,[r0,#0x48]
000050  e380001f          ORR      r0,r0,#0x1f
000054  e3a01456          MOV      r1,#0x56000000
000058  e5810048          STR      r0,[r1,#0x48]
;;;499        	
;;;500    	//For EINT0 Push Button 	
;;;501        	rGPFUP   = ((rGPFUP   & ~(1<<0)) | (1<<0));     //GPF0
00005c  e3a00456          MOV      r0,#0x56000000
000060  e5900058          LDR      r0,[r0,#0x58]
000064  e3800001          ORR      r0,r0,#1
000068  e3a01456          MOV      r1,#0x56000000
00006c  e5810058          STR      r0,[r1,#0x58]
;;;502        	rGPFCON  = ((rGPFCON  & ~(3<<0)) | (1<<1));     //GPF0=EINT0    
000070  e3a00456          MOV      r0,#0x56000000
000074  e5900050          LDR      r0,[r0,#0x50]
000078  e3c00003          BIC      r0,r0,#3
00007c  e3800002          ORR      r0,r0,#2
000080  e3a01456          MOV      r1,#0x56000000
000084  e5810050          STR      r0,[r1,#0x50]
;;;503        	rEXTINT0 = ((rEXTINT0 & ~(7<<0)) | (2<<0));     //EINT0=falling edge triggered 
000088  e3a00456          MOV      r0,#0x56000000
00008c  e5900088          LDR      r0,[r0,#0x88]
000090  e3c00007          BIC      r0,r0,#7
000094  e3800002          ORR      r0,r0,#2
000098  e3a01456          MOV      r1,#0x56000000
00009c  e5810088          STR      r0,[r1,#0x88]
;;;504    	
;;;505    }
0000a0  e1a0f00e          MOV      pc,lr
                          ENDP

                  AC97_Test PROC
;;;104    void AC97_Test(void)
;;;105    {
0000a4  e92d4010          STMFD    sp!,{r4,lr}
;;;106    	int i;
;;;107    
;;;108    	AC97_Port_Init();
0000a8  ebfffffe          BL       AC97_Port_Init
;;;109    	
;;;110    	while(1)
0000ac  e1a00000          NOP      
                  |L1.176|
0000b0  e1a00000          NOP      
;;;111    	{
;;;112    		i=0;
0000b4  e3a04000          MOV      r4,#0
;;;113    		Uart_Printf("\n\n==================== AC97 Function Test ====================\n\n");
0000b8  e59f00b8          LDR      r0,|L1.376|
0000bc  ebfffffe          BL       Uart_Printf
;;;114    		while(1)
0000c0  e1a00000          NOP      
                  |L1.196|
0000c4  e1a00000          NOP      
;;;115    		{   //display menu
;;;116    			Uart_Printf("%2d:%s",i,func_ac97_test[i][1]);
0000c8  e59f00ac          LDR      r0,|L1.380|
0000cc  e0800184          ADD      r0,r0,r4,LSL #3
0000d0  e1a01004          MOV      r1,r4
0000d4  e5902004          LDR      r2,[r0,#4]
0000d8  e28f00a0          ADR      r0,|L1.384|
0000dc  ebfffffe          BL       Uart_Printf
;;;117    			i++;
0000e0  e2844001          ADD      r4,r4,#1
;;;118    			if((int)(func_ac97_test[i][0])==0)
0000e4  e59f0090          LDR      r0,|L1.380|
0000e8  e7900184          LDR      r0,[r0,r4,LSL #3]
0000ec  e3500000          CMP      r0,#0
0000f0  1a000002          BNE      |L1.256|
;;;119    			{
;;;120    				Uart_Printf("\n");
0000f4  e28f008c          ADR      r0,|L1.392|
0000f8  ebfffffe          BL       Uart_Printf
;;;121    				break;
0000fc  ea000004          B        |L1.276|
;;;122    			}
;;;123    			if((i%2)==0)
                  |L1.256|
000100  e3140001          TST      r4,#1
000104  1a000001          BNE      |L1.272|
;;;124    			Uart_Printf("\n");
000108  e28f0078          ADR      r0,|L1.392|
00010c  ebfffffe          BL       Uart_Printf
;;;125    		}
                  |L1.272|
000110  eaffffeb          B        |L1.196|
;;;126    		Uart_Printf("\n============================================================");
                  |L1.276|
000114  e28f0070          ADR      r0,|L1.396|
000118  ebfffffe          BL       Uart_Printf
;;;127    		Uart_Printf("\nSelect #Item or Press enter key to exit:");
00011c  e28f00a8          ADR      r0,|L1.460|
000120  ebfffffe          BL       Uart_Printf
;;;128    		i = Uart_GetIntNum();
000124  ebfffffe          BL       Uart_GetIntNum
000128  e1a04000          MOV      r4,r0
;;;129    		if(i==-1) break;		// return.	
00012c  e3740001          CMN      r4,#1
000130  1a000000          BNE      |L1.312|
000134  ea000008          B        |L1.348|
;;;130    		if(i>=0 && (i<((sizeof(func_ac97_test)-1)/8)) )	// select and execute...
                  |L1.312|
000138  e3540000          CMP      r4,#0
00013c  ba000005          BLT      |L1.344|
000140  e3540005          CMP      r4,#5
000144  2a000003          BCS      |L1.344|
;;;131    			( (void (*)(void)) (func_ac97_test[i][0]) )();
000148  e59f102c          LDR      r1,|L1.380|
00014c  e7910184          LDR      r0,[r1,r4,LSL #3]
000150  e1a0e00f          MOV      lr,pc
000154  e1a0f000          MOV      pc,r0
;;;132    	}
                  |L1.344|
000158  eaffffd4          B        |L1.176|
;;;133    
;;;134    	 rAC_GLBCTRL = 0;
                  |L1.348|
00015c  e3a00000          MOV      r0,#0
000160  e3a0145b          MOV      r1,#0x5b000000
000164  e5810000          STR      r0,[r1,#0]
;;;135    }
000168  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.364|
00016c  0000000c          DCD      ||.bss$2|| + 12
                  |L1.368|
000170  00000008          DCD      ||.bss$2|| + 8
                  |L1.372|
000174  00000010          DCD      ||.bss$2|| + 16
                  |L1.376|
000178  0000008c          DCD      ||.constdata$1|| + 140
                  |L1.380|
00017c  00000000          DCD      func_ac97_test
                  |L1.384|
000180  3a643225          DCB      "%2d:"
000184  00007325          DCB      "%s\0\0"
                  |L1.392|
000188  0000000a          DCB      "\n\0\0\0"
                  |L1.396|
00018c  3d3d3d0a          DCB      "\n==="
000190  3d3d3d3d          DCB      "===="
000194  3d3d3d3d          DCB      "===="
000198  3d3d3d3d          DCB      "===="
00019c  3d3d3d3d          DCB      "===="
0001a0  3d3d3d3d          DCB      "===="
0001a4  3d3d3d3d          DCB      "===="
0001a8  3d3d3d3d          DCB      "===="
0001ac  3d3d3d3d          DCB      "===="
0001b0  3d3d3d3d          DCB      "===="
0001b4  3d3d3d3d          DCB      "===="
0001b8  3d3d3d3d          DCB      "===="
0001bc  3d3d3d3d          DCB      "===="
0001c0  3d3d3d3d          DCB      "===="
0001c4  3d3d3d3d          DCB      "===="
0001c8  0000003d          DCB      "=\0\0\0"
                  |L1.460|
0001cc  6c65530a          DCB      "\nSel"
0001d0  20746365          DCB      "ect "
0001d4  65744923          DCB      "#Ite"
0001d8  726f206d          DCB      "m or"
0001dc  65725020          DCB      " Pre"
0001e0  65207373          DCB      "ss e"
0001e4  7265746e          DCB      "nter"
0001e8  79656b20          DCB      " key"
0001ec  206f7420          DCB      " to "
0001f0  74697865          DCB      "exit"
0001f4  0000003a          DCB      ":\0\0\0"
                          ENDP

                  AC97_Port_Return PROC
;;;507    void AC97_Port_Return(void)
;;;508    {
0001f8  e51f0090          LDR      r0,|L1.368|
;;;509    	//Pop AC97 GPIO port configuration
;;;510    	rGPECON=save_AC97_rGPECON; 
0001fc  e5900000          LDR      r0,[r0,#0]  ; save_AC97_rGPECON
000200  e3a01456          MOV      r1,#0x56000000
000204  e5810040          STR      r0,[r1,#0x40]
;;;511    	rGPEDAT=save_AC97_rGPEDAT;
000208  e51f00a4          LDR      r0,|L1.364|
00020c  e5900000          LDR      r0,[r0,#0]  ; save_AC97_rGPEDAT
000210  e3a01456          MOV      r1,#0x56000000
000214  e5810044          STR      r0,[r1,#0x44]
;;;512    	rGPEUP=save_AC97_rGPEUP;
000218  e51f00ac          LDR      r0,|L1.372|
00021c  e5900000          LDR      r0,[r0,#0]  ; save_AC97_rGPEUP
000220  e3a01456          MOV      r1,#0x56000000
000224  e5810048          STR      r0,[r1,#0x48]
;;;513    }
000228  e1a0f00e          MOV      pc,lr
                          ENDP

                  Delay_After_CommandWrite PROC
;;;1215   void Delay_After_CommandWrite(int time)
;;;1216   {
00022c  e92d4070          STMFD    sp!,{r4-r6,lr}
000230  e1a05000          MOV      r5,r0
;;;1217         	// time=0: adjust the Delay function by WatchDog timer.
;;;1218         	// time>0: the number of loop time
;;;1219         	// Delay time resolution has 30us.
;;;1220   
;;;1221    	int i, adjust=0;
000234  e3a06000          MOV      r6,#0
;;;1222   
;;;1223       	if(time==0)
000238  e3550000          CMP      r5,#0
00023c  1a00000f          BNE      |L1.640|
;;;1224       	{
;;;1225          	time   = 300;
000240  e3a05f4b          MOV      r5,#0x12c
;;;1226           	adjust = 1;
000244  e3a06001          MOV      r6,#1
;;;1227           	delayLoopCount = 500;
000248  e3a00f7d          MOV      r0,#0x1f4
00024c  e59f11a0          LDR      r1,|L1.1012|
000250  e5810000          STR      r0,[r1,#0]  ; delayLoopCount
;;;1228   
;;;1229               	//PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
;;;1230           	rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); 
000254  e59f019c          LDR      r0,|L1.1016|
000258  e3a01453          MOV      r1,#0x53000000
00025c  e5810000          STR      r0,[r1,#0]
;;;1231           	rWTDAT = 0xffff;                              //for first update
000260  e0660806          RSB      r0,r6,r6,LSL #16
000264  e3a01453          MOV      r1,#0x53000000
000268  e5810004          STR      r0,[r1,#4]
;;;1232           	rWTCNT = 0xffff;                              //resolution=64us @any PCLK 
00026c  e3a01453          MOV      r1,#0x53000000
000270  e5810008          STR      r0,[r1,#8]
;;;1233           	rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
000274  e59f0180          LDR      r0,|L1.1020|
000278  e3a01453          MOV      r1,#0x53000000
00027c  e5810000          STR      r0,[r1,#0]
;;;1234       	}
;;;1235   
;;;1236       	for(;time>0;time--)
                  |L1.640|
000280  e1a00000          NOP      
                  |L1.644|
000284  e3550000          CMP      r5,#0
000288  da00000a          BLE      |L1.696|
00028c  ea000001          B        |L1.664|
                  |L1.656|
000290  e2455001          SUB      r5,r5,#1
000294  eafffffa          B        |L1.644|
;;;1237          	for(i=0;i<delayLoopCount;i++);
                  |L1.664|
000298  e3a04000          MOV      r4,#0
                  |L1.668|
00029c  e59f0150          LDR      r0,|L1.1012|
0002a0  e5900000          LDR      r0,[r0,#0]  ; delayLoopCount
0002a4  e1540000          CMP      r4,r0
0002a8  aa000001          BGE      |L1.692|
0002ac  e2844001          ADD      r4,r4,#1
0002b0  eafffff9          B        |L1.668|
                  |L1.692|
0002b4  eafffff5          B        |L1.656|
;;;1238   
;;;1239       	if(adjust==1)
                  |L1.696|
0002b8  e3560001          CMP      r6,#1
0002bc  1a00000b          BNE      |L1.752|
;;;1240       	{
;;;1241           	rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -