📄 ac97.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 842]
; commandline [-errors .\err\ac97.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
AC97_Port_Init PROC
;;;483 void AC97_Port_Init(void)
;;;484 {
|L1.0|
000000 e59f00f0 LDR r0,|L1.248|
;;;485 /*
;;;486 //Push AC97 GPIO port configuration
;;;487 save_AC97_rGPEDAT=rGPEDAT;
;;;488 save_AC97_rGPECON=rGPECON;
;;;489 save_AC97_rGPEUP=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
;;;498 rGPEUP = rGPEUP & ~(0x1f) | 0x1f; //The pull up function is disabled GPE[4:0] 1 1111
;;;499 */
;;;500 //External INT 0
;;;501 //rGPUP = rGPUP & ~(0x1<<0) |(0x1<<0); //The pull up function is disabled GPUP[0]
;;;502 rGPCON_L = (rGPCON_L & 0x3ffffc)|(0x2<<0);
000004 e5900008 LDR r0,[r0,#8]
000008 e3c003f0 BIC r0,r0,#0xc0000003
00000c e3c005ff BIC r0,r0,#0x3fc00000
000010 e3800002 ORR r0,r0,#2
000014 e59f10dc LDR r1,|L1.248|
000018 e5810008 STR r0,[r1,#8]
;;;503 rEXTINTC0 = rEXTINTC0 & ~(7<<0) | (0x4<<0); //EINT0=rising edge triggered
00001c e1a00001 MOV r0,r1
000020 e5900018 LDR r0,[r0,#0x18]
000024 e3c00007 BIC r0,r0,#7
000028 e3800004 ORR r0,r0,#4
00002c e5810018 STR r0,[r1,#0x18]
;;;504
;;;505 //For EINT0 Push Button
;;;506 //rGPFUP = ((rGPFUP & ~(1<<0)) | (1<<0)); //GPF0
;;;507 //rGPFCON = ((rGPFCON & ~(3<<0)) | (1<<1)); //GPF0=EINT0
;;;508 //rEXTINT0 = ((rEXTINT0 & ~(7<<0)) | (2<<0)); //EINT0=falling edge triggered
;;;509
;;;510 }
000030 e12fff1e BX lr
ENDP
Ch16_AC97 PROC
;;;101 void Ch16_AC97(void)
;;;102 {
000034 e92d4010 STMFD sp!,{r4,lr}
;;;103 int i;
;;;104
;;;105 AC97_Port_Init();
000038 ebfffffe BL AC97_Port_Init
;;;106
;;;107 while(1)
00003c e1a00000 NOP
|L1.64|
000040 e1a00000 NOP
;;;108 {
;;;109 i=0;
000044 e3a04000 MOV r4,#0
;;;110 Uart_Printf("\n\n==================== AC97 Function Test ====================\n\n");
000048 e59f00ac LDR r0,|L1.252|
00004c ebfffffe BL _printf
;;;111 while(1)
000050 e1a00000 NOP
|L1.84|
000054 e1a00000 NOP
;;;112 { //display menu
;;;113 Uart_Printf("%2d:%s",i,func_ac97_test[i][1]);
000058 e59f00a0 LDR r0,|L1.256|
00005c e0800184 ADD r0,r0,r4,LSL #3
000060 e1a01004 MOV r1,r4
000064 e5902004 LDR r2,[r0,#4]
000068 e28f0094 ADR r0,|L1.260|
00006c ebfffffe BL _printf
;;;114 i++;
000070 e2844001 ADD r4,r4,#1
;;;115 if((int)(func_ac97_test[i][0])==0)
000074 e59f0084 LDR r0,|L1.256|
000078 e7900184 LDR r0,[r0,r4,LSL #3]
00007c e3500000 CMP r0,#0
000080 1a000002 BNE |L1.144|
;;;116 {
;;;117 Uart_Printf("\n");
000084 e28f0080 ADR r0,|L1.268|
000088 ebfffffe BL _printf
;;;118 break;
00008c ea000004 B |L1.164|
;;;119 }
;;;120 if((i%2)==0)
|L1.144|
000090 e3140001 TST r4,#1
000094 1a000001 BNE |L1.160|
;;;121 Uart_Printf("\n");
000098 e28f006c ADR r0,|L1.268|
00009c ebfffffe BL _printf
;;;122 }
|L1.160|
0000a0 eaffffeb B |L1.84|
;;;123 Uart_Printf("\n============================================================");
|L1.164|
0000a4 e28f0064 ADR r0,|L1.272|
0000a8 ebfffffe BL _printf
;;;124 Uart_Printf("\nSelect #Item or Press enter key to exit:");
0000ac e28f009c ADR r0,|L1.336|
0000b0 ebfffffe BL _printf
;;;125 i = Uart_GetIntNum();
0000b4 ebfffffe BL Uart_GetIntNum
0000b8 e1a04000 MOV r4,r0
;;;126 if(i==-1) break; // return.
0000bc e3740001 CMN r4,#1
0000c0 1a000000 BNE |L1.200|
0000c4 ea000007 B |L1.232|
;;;127 if(i>=0 && (i<((sizeof(func_ac97_test)-1)/8)) ) // select and execute...
|L1.200|
0000c8 e3540000 CMP r4,#0
0000cc ba000004 BLT |L1.228|
0000d0 e3540005 CMP r4,#5
0000d4 2a000002 BCS |L1.228|
;;;128 ( (void (*)(void)) (func_ac97_test[i][0]) )();
0000d8 e59f1020 LDR r1,|L1.256|
0000dc e7910184 LDR r0,[r1,r4,LSL #3]
0000e0 e12fff30 BLX r0
;;;129 }
|L1.228|
0000e4 eaffffd5 B |L1.64|
;;;130
;;;131 rAC_GLBCTRL = 0;
|L1.232|
0000e8 e3a00000 MOV r0,#0
0000ec e3a01445 MOV r1,#0x45000000
0000f0 e5810000 STR r0,[r1,#0]
;;;132 }
0000f4 e8bd8010 LDMFD sp!,{r4,pc}
|L1.248|
0000f8 44800000 DCD 0x44800000
|L1.252|
0000fc 0000008c DCD ||.constdata$1|| + 140
|L1.256|
000100 00000000 DCD func_ac97_test
|L1.260|
000104 3a643225 DCB "%2d:"
000108 00007325 DCB "%s\0\0"
|L1.268|
00010c 0000000a DCB "\n\0\0\0"
|L1.272|
000110 3d3d3d0a DCB "\n==="
000114 3d3d3d3d DCB "===="
000118 3d3d3d3d DCB "===="
00011c 3d3d3d3d DCB "===="
000120 3d3d3d3d DCB "===="
000124 3d3d3d3d DCB "===="
000128 3d3d3d3d DCB "===="
00012c 3d3d3d3d DCB "===="
000130 3d3d3d3d DCB "===="
000134 3d3d3d3d DCB "===="
000138 3d3d3d3d DCB "===="
00013c 3d3d3d3d DCB "===="
000140 3d3d3d3d DCB "===="
000144 3d3d3d3d DCB "===="
000148 3d3d3d3d DCB "===="
00014c 0000003d DCB "=\0\0\0"
|L1.336|
000150 6c65530a DCB "\nSel"
000154 20746365 DCB "ect "
000158 65744923 DCB "#Ite"
00015c 726f206d DCB "m or"
000160 65725020 DCB " Pre"
000164 65207373 DCB "ss e"
000168 7265746e DCB "nter"
00016c 79656b20 DCB " key"
000170 206f7420 DCB " to "
000174 74697865 DCB "exit"
000178 0000003a DCB ":\0\0\0"
ENDP
AC97_Port_Return PROC
;;;512 void AC97_Port_Return(void)
;;;513 {
00017c e12fff1e BX lr
;;;514 //Pop AC97 GPIO port configuration
;;;515 //rGPECON=save_AC97_rGPECON;
;;;516 //rGPEDAT=save_AC97_rGPEDAT;
;;;517 //rGPEUP=save_AC97_rGPEUP;
;;;518 }
ENDP
AC97_Codec_Cmd PROC
;;;695 U16 AC97_Codec_Cmd(U8 CMD_Read, U8 CMD_Offset, U16 CMD_Data)
;;;696 {
000180 e92d40f8 STMFD sp!,{r3-r7,lr}
000184 e1a04000 MOV r4,r0
000188 e1a05001 MOV r5,r1
00018c e1a06002 MOV r6,r2
;;;697 U16 Codec_Stat;
;;;698
;;;699 if(CMD_Read == 0)
000190 e3540000 CMP r4,#0
000194 1a00000a BNE |L1.452|
;;;700 {
;;;701 rAC_CODEC_CMD = (0<<23)|(CMD_Offset<<16)|(CMD_Data<<0);
000198 e1860805 ORR r0,r6,r5,LSL #16
00019c e3a01445 MOV r1,#0x45000000
0001a0 e5810008 STR r0,[r1,#8]
;;;702 Delay(1);
0001a4 e3a00001 MOV r0,#1
0001a8 ebfffffe BL Delay
;;;703 rAC_CODEC_CMD |= (1<<23); //To receive SLOTREQ bits when VRA is '1'.
0001ac e3a00445 MOV r0,#0x45000000
0001b0 e5900008 LDR r0,[r0,#8]
0001b4 e3800880 ORR r0,r0,#0x800000
0001b8 e3a01445 MOV r1,#0x45000000
0001bc e5810008 STR r0,[r1,#8]
0001c0 ea000011 B |L1.524|
;;;704 }
;;;705 else if (CMD_Read ==1)
|L1.452|
0001c4 e3540001 CMP r4,#1
0001c8 1a00000d BNE |L1.516|
;;;706 {
;;;707 rAC_CODEC_CMD = (1<<23)|(CMD_Offset<<16)|(CMD_Data<<0);
0001cc e1860805 ORR r0,r6,r5,LSL #16
0001d0 e3800880 ORR r0,r0,#0x800000
0001d4 e3a01445 MOV r1,#0x45000000
0001d8 e5810008 STR r0,[r1,#8]
;;;708 Delay(1000);
0001dc e3a00ffa MOV r0,#0x3e8
0001e0 ebfffffe BL Delay
;;;709
;;;710 Codec_Stat = (U16)(rAC_CODEC_STAT & 0xFFFF);
0001e4 e3a00445 MOV r0,#0x45000000
0001e8 e590000c LDR r0,[r0,#0xc]
0001ec e1a07800 MOV r7,r0,LSL #16
0001f0 e1a07827 MOV r7,r7,LSR #16
;;;711 Delay(1000);
0001f4 e3a00ffa MOV r0,#0x3e8
0001f8 ebfffffe BL Delay
;;;712 return Codec_Stat;
0001fc e1a00007 MOV r0,r7
;;;713 }
;;;714 else
;;;715 return 0;
;;;716
;;;717 }
|L1.512|
000200 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.516|
000204 e3a00000 MOV r0,#0 ;715
000208 eafffffc B |L1.512| ;715
|L1.524|
00020c eafffffb B |L1.512|
ENDP
AC97_Controller_State PROC
;;;1205 void AC97_Controller_State(void)
;;;1206 {
000210 e92d4010 STMFD sp!,{r4,lr}
;;;1207 U8 state;
;;;1208
;;;1209 state=(U8)(rAC_GLBSTAT);
000214 e3a00445 MOV r0,#0x45000000
000218 e5900004 LDR r0,[r0,#4]
00021c e20040ff AND r4,r0,#0xff
;;;1210
;;;1211 switch(state)
000220 e3540005 CMP r4,#5
000224 908ff104 ADDLS pc,pc,r4,LSL #2
000228 ea000017 B |L1.652|
00022c ea000004 B |L1.580|
000230 ea000006 B |L1.592|
000234 ea000008 B |L1.604|
000238 ea00000a B |L1.616|
00023c ea00000c B |L1.628|
000240 ea00000e B |L1.640|
;;;1212 {
;;;1213 case 0:
;;;1214 Uart_Printf("AC97 Controller State: Idle\n");
|L1.580|
000244 e28f0048 ADR r0,|L1.660|
000248 ebfffffe BL _printf
;;;1215 break;
00024c ea00000f B |L1.656|
;;;1216
;;;1217 case 1:
;;;1218 Uart_Printf("AC97 Controller State: Init\n");
|L1.592|
000250 e28f005c ADR r0,|L1.692|
000254 ebfffffe BL _printf
;;;1219 break;
000258 ea00000c B |L1.656|
;;;1220
;;;1221 case 2:
;;;1222 Uart_Printf("AC97 Controller State: Ready\n");
|L1.604|
00025c e28f0070 ADR r0,|L1.724|
000260 ebfffffe BL _printf
;;;1223 break;
000264 ea000009 B |L1.656|
;;;1224
;;;1225 case 3:
;;;1226 Uart_Printf("AC97 Controller State: Active\n");
|L1.616|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -