📄 ac97.txt
字号:
0002c0 e59f0130 LDR r0,|L1.1016|
0002c4 e3a01453 MOV r1,#0x53000000
0002c8 e5810000 STR r0,[r1,#0]
;;;1242 i = 0xffff - rWTCNT; //1 count => 64us, 300*500 cycle runtime = 64*i us
0002cc e3a00453 MOV r0,#0x53000000
0002d0 e5900008 LDR r0,[r0,#8]
0002d4 e26040ff RSB r4,r0,#0xff
0002d8 e2844cff ADD r4,r4,#0xff00
;;;1243 delayLoopCount = 4500000/(i*64); //300*500:64*i=1*x:30 -> x=150000*30/(64*i)
0002dc e1a00304 MOV r0,r4,LSL #6
0002e0 e59f1118 LDR r1,|L1.1024|
0002e4 ebfffffe BL __rt_sdiv
0002e8 e59f1104 LDR r1,|L1.1012|
0002ec e5810000 STR r0,[r1,#0] ; delayLoopCount
;;;1244 }
;;;1245
;;;1246 }
|L1.752|
0002f0 e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
AC97_Codec_Cmd PROC
;;;684 U16 AC97_Codec_Cmd(U8 CMD_Read, U8 CMD_Offset, U16 CMD_Data)
;;;685 {
0002f4 e92d40f8 STMFD sp!,{r3-r7,lr}
0002f8 e1a04000 MOV r4,r0
0002fc e1a05001 MOV r5,r1
000300 e1a06002 MOV r6,r2
;;;686 U16 Codec_Stat;
;;;687
;;;688 if(CMD_Read == 0)
000304 e3540000 CMP r4,#0
000308 1a000005 BNE |L1.804|
;;;689 {
;;;690 rAC_CODEC_CMD = (0<<23)|(CMD_Offset<<16)|(CMD_Data<<0);
00030c e1860805 ORR r0,r6,r5,LSL #16
000310 e3a0145b MOV r1,#0x5b000000
000314 e5810008 STR r0,[r1,#8]
;;;691 Delay_After_CommandWrite(1); //30us delay.
000318 e3a00001 MOV r0,#1
00031c ebfffffe BL Delay_After_CommandWrite
000320 ea000011 B |L1.876|
;;;692 }
;;;693 else if (CMD_Read ==1)
|L1.804|
000324 e3540001 CMP r4,#1
000328 1a00000d BNE |L1.868|
;;;694 {
;;;695 rAC_CODEC_CMD = (1<<23)|(CMD_Offset<<16)|(CMD_Data<<0);
00032c e1860805 ORR r0,r6,r5,LSL #16
000330 e3800880 ORR r0,r0,#0x800000
000334 e3a0145b MOV r1,#0x5b000000
000338 e5810008 STR r0,[r1,#8]
;;;696 Delay(1000);
00033c e3a00ffa MOV r0,#0x3e8
000340 ebfffffe BL Delay
;;;697
;;;698 Codec_Stat = (U16)(rAC_CODEC_STAT & 0xFFFF);
000344 e3a0045b MOV r0,#0x5b000000
000348 e590000c LDR r0,[r0,#0xc]
00034c e1a07800 MOV r7,r0,LSL #16
000350 e1a07827 MOV r7,r7,LSR #16
;;;699 Delay(1000);
000354 e3a00ffa MOV r0,#0x3e8
000358 ebfffffe BL Delay
;;;700 return Codec_Stat;
00035c e1a00007 MOV r0,r7
;;;701 }
;;;702 else
;;;703 return 0;
;;;704
;;;705 }
|L1.864|
000360 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.868|
000364 e3a00000 MOV r0,#0 ;703
000368 eafffffc B |L1.864| ;703
|L1.876|
00036c eafffffb B |L1.864|
ENDP
AC97_Controller_State PROC
;;;1178 void AC97_Controller_State(void)
;;;1179 {
000370 e92d4010 STMFD sp!,{r4,lr}
;;;1180 U8 state;
;;;1181
;;;1182 state=(U8)(rAC_GLBSTAT);
000374 e3a0045b MOV r0,#0x5b000000
000378 e5900004 LDR r0,[r0,#4]
00037c e20040ff AND r4,r0,#0xff
;;;1183
;;;1184 switch(state)
000380 e3540005 CMP r4,#5
000384 908ff104 ADDLS pc,pc,r4,LSL #2
000388 ea000017 B |L1.1004|
00038c ea000004 B |L1.932|
000390 ea000006 B |L1.944|
000394 ea000008 B |L1.956|
000398 ea00000a B |L1.968|
00039c ea00000c B |L1.980|
0003a0 ea00000e B |L1.992|
;;;1185 {
;;;1186 case 0:
;;;1187 Uart_Printf("AC97 Controller State: Idle\n");
|L1.932|
0003a4 e28f0058 ADR r0,|L1.1028|
0003a8 ebfffffe BL Uart_Printf
;;;1188 break;
0003ac ea00000f B |L1.1008|
;;;1189
;;;1190 case 1:
;;;1191 Uart_Printf("AC97 Controller State: Init\n");
|L1.944|
0003b0 e28f006c ADR r0,|L1.1060|
0003b4 ebfffffe BL Uart_Printf
;;;1192 break;
0003b8 ea00000c B |L1.1008|
;;;1193
;;;1194 case 2:
;;;1195 Uart_Printf("AC97 Controller State: Ready\n");
|L1.956|
0003bc e28f0080 ADR r0,|L1.1092|
0003c0 ebfffffe BL Uart_Printf
;;;1196 break;
0003c4 ea000009 B |L1.1008|
;;;1197
;;;1198 case 3:
;;;1199 Uart_Printf("AC97 Controller State: Active\n");
|L1.968|
0003c8 e28f0094 ADR r0,|L1.1124|
0003cc ebfffffe BL Uart_Printf
;;;1200 break;
0003d0 ea000006 B |L1.1008|
;;;1201
;;;1202 case 4:
;;;1203 Uart_Printf("AC97 Controller State: LP\n");
|L1.980|
0003d4 e28f00a8 ADR r0,|L1.1156|
0003d8 ebfffffe BL Uart_Printf
;;;1204 break;
0003dc ea000003 B |L1.1008|
;;;1205
;;;1206 case 5:
;;;1207 Uart_Printf("AC97 Controller State: Warm\n");
|L1.992|
0003e0 e28f00b8 ADR r0,|L1.1184|
0003e4 ebfffffe BL Uart_Printf
;;;1208 break;
0003e8 ea000000 B |L1.1008|
;;;1209
;;;1210 default:
;;;1211 break;
|L1.1004|
0003ec e1a00000 NOP
;;;1212 }
;;;1213 }
|L1.1008|
0003f0 e8bd8010 LDMFD sp!,{r4,pc}
|L1.1012|
0003f4 00000030 DCD ||.bss$2|| + 48
|L1.1016|
0003f8 00003010 DCD 0x00003010
|L1.1020|
0003fc 00003030 DCD 0x00003030
|L1.1024|
000400 0044aa20 DCD 0x0044aa20
|L1.1028|
000404 37394341 DCB "AC97"
000408 6e6f4320 DCB " Con"
00040c 6c6f7274 DCB "trol"
000410 2072656c DCB "ler "
000414 74617453 DCB "Stat"
000418 49203a65 DCB "e: I"
00041c 0a656c64 DCB "dle\n"
000420 00000000 DCB "\0\0\0\0"
|L1.1060|
000424 37394341 DCB "AC97"
000428 6e6f4320 DCB " Con"
00042c 6c6f7274 DCB "trol"
000430 2072656c DCB "ler "
000434 74617453 DCB "Stat"
000438 49203a65 DCB "e: I"
00043c 0a74696e DCB "nit\n"
000440 00000000 DCB "\0\0\0\0"
|L1.1092|
000444 37394341 DCB "AC97"
000448 6e6f4320 DCB " Con"
00044c 6c6f7274 DCB "trol"
000450 2072656c DCB "ler "
000454 74617453 DCB "Stat"
000458 52203a65 DCB "e: R"
00045c 79646165 DCB "eady"
000460 0000000a DCB "\n\0\0\0"
|L1.1124|
000464 37394341 DCB "AC97"
000468 6e6f4320 DCB " Con"
00046c 6c6f7274 DCB "trol"
000470 2072656c DCB "ler "
000474 74617453 DCB "Stat"
000478 41203a65 DCB "e: A"
00047c 76697463 DCB "ctiv"
000480 00000a65 DCB "e\n\0\0"
|L1.1156|
000484 37394341 DCB "AC97"
000488 6e6f4320 DCB " Con"
00048c 6c6f7274 DCB "trol"
000490 2072656c DCB "ler "
000494 74617453 DCB "Stat"
000498 4c203a65 DCB "e: L"
00049c 00000a50 DCB "P\n\0\0"
|L1.1184|
0004a0 37394341 DCB "AC97"
0004a4 6e6f4320 DCB " Con"
0004a8 6c6f7274 DCB "trol"
0004ac 2072656c DCB "ler "
0004b0 74617453 DCB "Stat"
0004b4 57203a65 DCB "e: W"
0004b8 0a6d7261 DCB "arm\n"
0004bc 00000000 DCB "\0\0\0\0"
ENDP
AC97_CodecExit_PCMOut PROC
;;;1068 void AC97_CodecExit_PCMOut(void)
;;;1069 {
0004c0 e92d4010 STMFD sp!,{r4,lr}
;;;1070 //DACs off
;;;1071 Uart_Printf("\n\n=>DACs off PR1\n");
0004c4 e28f00b0 ADR r0,|L1.1404|
0004c8 ebfffffe BL Uart_Printf
;;;1072 AC97_Codec_Cmd(0,0x26,(1<<8)|(1<<9));
0004cc e3a02fc0 MOV r2,#0x300
0004d0 e3a01026 MOV r1,#0x26
0004d4 e3a00000 MOV r0,#0
0004d8 ebfffffe BL AC97_Codec_Cmd
;;;1073 AC97_Controller_State();
0004dc ebfffffe BL AC97_Controller_State
;;;1074 Uart_Printf("AC97 Codec Powerdown Ctrl/Stat 0x26 Reg.: 0x%x\n", AC97_Codec_Cmd(1,0x26,0x0000));
0004e0 e3a02000 MOV r2,#0
0004e4 e3a01026 MOV r1,#0x26
0004e8 e3a00001 MOV r0,#1
0004ec ebfffffe BL AC97_Codec_Cmd
0004f0 e1a04000 MOV r4,r0
0004f4 e1a01000 MOV r1,r0
0004f8 e28f0090 ADR r0,|L1.1424|
0004fc ebfffffe BL Uart_Printf
;;;1075
;;;1076 //Analog off
;;;1077 Uart_Printf("\n=>Analog off PR2\n");
000500 e28f00b8 ADR r0,|L1.1472|
000504 ebfffffe BL Uart_Printf
;;;1078 AC97_Codec_Cmd(0,0x26,(1<<8)|(1<<9)|(1<<10));
000508 e3a02e70 MOV r2,#0x700
00050c e3a01026 MOV r1,#0x26
000510 e3a00000 MOV r0,#0
000514 ebfffffe BL AC97_Codec_Cmd
;;;1079 AC97_Controller_State();
000518 ebfffffe BL AC97_Controller_State
;;;1080 Uart_Printf("AC97 Codec Powerdown Ctrl/Stat 0x26 Reg.: 0x%x\n", AC97_Codec_Cmd(1,0x26,0x0000));
00051c e3a02000 MOV r2,#0
000520 e3a01026 MOV r1,#0x26
000524 e3a00001 MOV r0,#1
000528 ebfffffe BL AC97_Codec_Cmd
00052c e1a04000 MOV r4,r0
000530 e1a01000 MOV r1,r0
000534 e28f0054 ADR r0,|L1.1424|
000538 ebfffffe BL Uart_Printf
;;;1081
;;;1082 //Digital I/F off
;;;1083 Uart_Printf("\n=>Digital I/F off PR4\n");
00053c e28f0090 ADR r0,|L1.1492|
000540 ebfffffe BL Uart_Printf
;;;1084 AC97_Codec_Cmd(0,0x26,(1<<8)|(1<<9)|(1<<10)|(1<<12));
000544 e3a02d5c MOV r2,#0x1700
000548 e3a01026 MOV r1,#0x26
00054c e3a00000 MOV r0,#0
000550 ebfffffe BL AC97_Codec_Cmd
;;;1085 AC97_Controller_State();
000554 ebfffffe BL AC97_Controller_State
;;;1086 Uart_Printf("AC97 Codec Powerdown Ctrl/Stat 0x26 Reg.: 0x%x\n", AC97_Codec_Cmd(1,0x26,0x0000));
000558 e3a02000 MOV r2,#0
00055c e3a01026 MOV r1,#0x26
000560 e3a00001 MOV r0,#1
000564 ebfffffe BL AC97_Codec_Cmd
000568 e1a04000 MOV r4,r0
00056c e1a01000 MOV r1,r0
000570 e28f0018 ADR r0,|L1.1424|
000574 ebfffffe BL Uart_Printf
;;;1087
;;;1088 }
000578 e8bd8010 LDMFD sp!,{r4,pc}
|L1.1404|
00057c 3e3d0a0a DCB "\n\n=>"
000580 73434144 DCB "DACs"
000584 66666f20 DCB " off"
000588 31525020 DCB " PR1"
00058c 0000000a DCB "\n\0\0\0"
|L1.1424|
000590 37394341 DCB "AC97"
000594 646f4320 DCB " Cod"
000598 50206365 DCB "ec P"
00059c 7265776f DCB "ower"
0005a0 6e776f64 DCB "down"
0005a4 72744320 DCB " Ctr"
0005a8 74532f6c DCB "l/St"
0005ac 30207461 DCB "at 0"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -