📄 ac97.txt
字号:
; 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 + -