📄 ac97.txt
字号:
000c24 e59f0114 LDR r0,|L1.3392|
000c28 e5900000 LDR r0,[r0,#0] ; Rec_AC97_BUF
000c2c e28000c0 ADD r0,r0,#0xc0
000c30 e51f12e4 LDR r1,|L1.2388|
000c34 e5810000 STR r0,[r1,#0] ; Play_AC97_BUF
;;;895 End_AC97_BUF = (Rec_AC97_BUF + 0x30 + PCM_Size/4);
000c38 e1a00124 MOV r0,r4,LSR #2
000c3c e59f10fc LDR r1,|L1.3392|
000c40 e5911000 LDR r1,[r1,#0] ; Rec_AC97_BUF
000c44 e0810100 ADD r0,r1,r0,LSL #2
000c48 e28000c0 ADD r0,r0,#0xc0
000c4c e59f10e4 LDR r1,|L1.3384|
000c50 e5810000 STR r0,[r1,#0] ; End_AC97_BUF
;;;896
;;;897 //IRQ Initialization
;;;898 pISR_AC97_NFLASH = (unsigned)Irq_AC97_PCMout;
000c54 e59f00e8 LDR r0,|L1.3396|
000c58 e51f131c LDR r1,|L1.2372|
000c5c e5810f80 STR r0,[r1,#0xf80]
;;;899
;;;900 Uart_Printf("\nConnect Head Phone into CON20 on SMDK24A0 and Press any key.\n");
000c60 e28f00e0 ADR r0,|L1.3400|
000c64 ebfffffe BL _printf
;;;901 Uart_Getch();
000c68 ebfffffe BL Uart_Getch
;;;902 Uart_Printf("\nNow Play...\n");
000c6c e24f0fc3 ADR r0,|L1.2408|
000c70 ebfffffe BL _printf
;;;903 Uart_Printf("Headphone Volume Register = 0x%x\n", Output_Volume);
000c74 e51f06d0 LDR r0,|L1.1452|
000c78 e5901000 LDR r1,[r0,#0] ; Output_Volume
000c7c e24f0f9c ADR r0,|L1.2580|
000c80 ebfffffe BL _printf
;;;904
;;;905 ClearPending(BIT_AC97_NFLASH);
000c84 e3a00740 MOV r0,#0x1000000
000c88 e51f1648 LDR r1,|L1.1608|
000c8c e5810000 STR r0,[r1,#0]
000c90 e1c10000 BIC r0,r1,r0
000c94 e5900010 LDR r0,[r0,#0x10]
000c98 e5810010 STR r0,[r1,#0x10]
000c9c e1a00001 MOV r0,r1
000ca0 e5900010 LDR r0,[r0,#0x10]
;;;906 rSUBSRCPND=(BIT_SUB_AC97);
000ca4 e3a00840 MOV r0,#0x400000
000ca8 e1c11000 BIC r1,r1,r0
000cac e5810018 STR r0,[r1,#0x18]
;;;907
;;;908 rINTMSK=~(BIT_AC97_NFLASH);
000cb0 e3e00740 MVN r0,#0x1000000
000cb4 e0011000 AND r1,r1,r0
000cb8 e5810008 STR r0,[r1,#8]
;;;909 rINTSUBMSK=~(BIT_SUB_AC97);
000cbc e3e00840 MVN r0,#0x400000
000cc0 e0011000 AND r1,r1,r0
000cc4 e581001c STR r0,[r1,#0x1c]
;;;910
;;;911 rAC_GLBCTRL = 0x4100C; //PCM Out channel threshold INT enable, PIO Mode On
000cc8 e59f00b8 LDR r0,|L1.3464|
000ccc e3a01445 MOV r1,#0x45000000
000cd0 e5810000 STR r0,[r1,#0]
;;;912
;;;913 while(1)
000cd4 e1a00000 NOP
|L1.3288|
000cd8 e1a00000 NOP
;;;914 {
;;;915 if(PCM_Out_INT_Exit == 1)
000cdc e59f0058 LDR r0,|L1.3388|
000ce0 e1d000f0 LDRSH r0,[r0,#0] ; PCM_Out_INT_Exit
000ce4 e3500001 CMP r0,#1
000ce8 1a000000 BNE |L1.3312|
;;;916 break;
000cec ea000000 B |L1.3316|
;;;917 }
|L1.3312|
000cf0 eafffff8 B |L1.3288|
;;;918
;;;919 rAC_GLBCTRL &= ~(1<<12); //PCM Out Transfer PIO Mode Off
|L1.3316|
000cf4 e3a00445 MOV r0,#0x45000000
000cf8 e5900000 LDR r0,[r0,#0]
000cfc e3c00d40 BIC r0,r0,#0x1000
000d00 e3a01445 MOV r1,#0x45000000
000d04 e5810000 STR r0,[r1,#0]
;;;920
;;;921 rINTSUBMSK|=(BIT_SUB_NFLASH|BIT_SUB_AC97);
000d08 e241064e SUB r0,r1,#0x4e00000
000d0c e590001c LDR r0,[r0,#0x1c]
000d10 e3800860 ORR r0,r0,#0x600000
000d14 e241164e SUB r1,r1,#0x4e00000
000d18 e581001c STR r0,[r1,#0x1c]
;;;922 rINTMSK|=(BIT_AC97_NFLASH);
000d1c e1a00001 MOV r0,r1
000d20 e5900008 LDR r0,[r0,#8]
000d24 e3800740 ORR r0,r0,#0x1000000
000d28 e5810008 STR r0,[r1,#8]
;;;923
;;;924 Uart_Printf("\nEnd of Play!\n");
000d2c e24f0f96 ADR r0,|L1.2780|
000d30 ebfffffe BL _printf
;;;925 }
000d34 e8bd8010 LDMFD sp!,{r4,pc}
|L1.3384|
000d38 00000020 DCD ||.bss$2|| + 32
|L1.3388|
000d3c 00000000 DCD ||.bss$2||
|L1.3392|
000d40 00000018 DCD ||.bss$2|| + 24
|L1.3396|
000d44 00000000 DCD Irq_AC97_PCMout
|L1.3400|
000d48 6e6f430a DCB "\nCon"
000d4c 7463656e DCB "nect"
000d50 61654820 DCB " Hea"
000d54 68502064 DCB "d Ph"
000d58 20656e6f DCB "one "
000d5c 6f746e69 DCB "into"
000d60 4e4f4320 DCB " CON"
000d64 6f203032 DCB "20 o"
000d68 4d53206e DCB "n SM"
000d6c 34324b44 DCB "DK24"
000d70 61203041 DCB "A0 a"
000d74 5020646e DCB "nd P"
000d78 73736572 DCB "ress"
000d7c 796e6120 DCB " any"
000d80 79656b20 DCB " key"
000d84 00000a2e DCB ".\n\0\0"
|L1.3464|
000d88 0004100c DCD 0x0004100c
ENDP
AC97_CodecInit_PCMOut PROC
;;;624 void AC97_CodecInit_PCMOut( U16 AC97_fs)
;;;625 {
000d8c e92d4010 STMFD sp!,{r4,lr}
000d90 e1a04000 MOV r4,r0
;;;626
;;;627 AC97_Codec_Cmd(0,0x00,0x683F); //codec soft reset
000d94 e59f2168 LDR r2,|L1.3844|
000d98 e3a01000 MOV r1,#0
000d9c e3a00000 MOV r0,#0
000da0 ebfffffe BL AC97_Codec_Cmd
;;;628
;;;629 AC97_Codec_Cmd(0,0x2A,0x0001); //variable rate enable
000da4 e3a02001 MOV r2,#1
000da8 e3a0102a MOV r1,#0x2a
000dac e3a00000 MOV r0,#0
000db0 ebfffffe BL AC97_Codec_Cmd
;;;630 //Uart_Printf("\nVRA Enable(1)/Disable(0): 0x%x\n", (0x1&AC97_Codec_Cmd(1,0x2A,0x0001)));
;;;631
;;;632 if(AC97_fs==48000){
000db4 e244cc80 SUB r12,r4,#0x8000
000db8 e25ccdee SUBS r12,r12,#0x3b80
000dbc 1a000004 BNE |L1.3540|
;;;633 //DAC Sampling frequency 48kHz
;;;634 AC97_Codec_Cmd(0,0x2C,0xbb80);
000dc0 e59f2140 LDR r2,|L1.3848|
000dc4 e3a0102c MOV r1,#0x2c
000dc8 e3a00000 MOV r0,#0
000dcc ebfffffe BL AC97_Codec_Cmd
000dd0 ea00000e B |L1.3600|
;;;635 }
;;;636 else if(AC97_fs==44100){
|L1.3540|
000dd4 e244ccac SUB r12,r4,#0xac00
000dd8 e25cc044 SUBS r12,r12,#0x44
000ddc 1a000004 BNE |L1.3572|
;;;637 //DAC Sampling frequency 44.1kHz
;;;638 AC97_Codec_Cmd(0,0x2C,0xac44);
000de0 e59f2124 LDR r2,|L1.3852|
000de4 e3a0102c MOV r1,#0x2c
000de8 e3a00000 MOV r0,#0
000dec ebfffffe BL AC97_Codec_Cmd
000df0 ea000006 B |L1.3600|
;;;639 }
;;;640 else if(AC97_fs==22050){
|L1.3572|
000df4 e244cc56 SUB r12,r4,#0x5600
000df8 e25cc022 SUBS r12,r12,#0x22
000dfc 1a000003 BNE |L1.3600|
;;;641 //DAC Sampling frequency 22.05kHz
;;;642 AC97_Codec_Cmd(0,0x2C,0x5622);
000e00 e59f2108 LDR r2,|L1.3856|
000e04 e3a0102c MOV r1,#0x2c
000e08 e3a00000 MOV r0,#0
000e0c ebfffffe BL AC97_Codec_Cmd
;;;643 }
;;;644
;;;645 AC97_Codec_Cmd(0,0x26, (1<<8)); // all power on except ADC blcok
|L1.3600|
000e10 e3a02f40 MOV r2,#0x100
000e14 e3a01026 MOV r1,#0x26
000e18 e3a00000 MOV r0,#0
000e1c ebfffffe BL AC97_Codec_Cmd
;;;646 //Uart_Printf("AC97 Codec 0x26 Reg.: 0x%x\n\n", AC97_Codec_Cmd(1,0x26,0x0000));
;;;647
;;;648 AC97_Codec_Cmd(0,0x18,0x0000); // PCM out volume on
000e20 e3a02000 MOV r2,#0
000e24 e3a01018 MOV r1,#0x18
000e28 e3a00000 MOV r0,#0
000e2c ebfffffe BL AC97_Codec_Cmd
;;;649 AC97_Codec_Cmd(0,0x20,0x0000); // general purpose
000e30 e3a02000 MOV r2,#0
000e34 e3a01020 MOV r1,#0x20
000e38 e3a00000 MOV r0,#0
000e3c ebfffffe BL AC97_Codec_Cmd
;;;650 AC97_Codec_Cmd(0,0x04,0x1A1A); // Aux out(HP out) volume on
000e40 e59f20cc LDR r2,|L1.3860|
000e44 e3a01004 MOV r1,#4
000e48 e3a00000 MOV r0,#0
000e4c ebfffffe BL AC97_Codec_Cmd
;;;651
;;;652 Output_Volume = AC97_Codec_Cmd(1,0x04,0x00000); //HP out volume
000e50 e3a02000 MOV r2,#0
000e54 e3a01004 MOV r1,#4
000e58 e3a00001 MOV r0,#1
000e5c ebfffffe BL AC97_Codec_Cmd
000e60 e51f18bc LDR r1,|L1.1452|
000e64 e5810000 STR r0,[r1,#0] ; Output_Volume
;;;653 }
000e68 e8bd8010 LDMFD sp!,{r4,pc}
ENDP
AC97_Codec_Ready PROC
;;;1244 void __irq AC97_Codec_Ready(void)
;;;1245 {
000e6c e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;1246 if ( (rAC_GLBSTAT& 0x400000))
000e70 e3a00445 MOV r0,#0x45000000
000e74 e5900004 LDR r0,[r0,#4]
000e78 e3100840 TST r0,#0x400000
000e7c 0a000009 BEQ |L1.3752|
;;;1247 {
;;;1248 Codec_Ready_Irq=1;
000e80 e3a00001 MOV r0,#1
000e84 e59f108c LDR r1,|L1.3864|
000e88 e5c10000 STRB r0,[r1,#0] ; Codec_Ready_Irq
;;;1249 Uart_Printf("AC97 Codec Ready!\n");
000e8c e28f0088 ADR r0,|L1.3868|
000e90 ebfffffe BL _printf
;;;1250 rAC_GLBCTRL &= ~(0x400000); // codec ready interrupt disable
000e94 e3a00445 MOV r0,#0x45000000
000e98 e5900000 LDR r0,[r0,#0]
000e9c e3c00840 BIC r0,r0,#0x400000
000ea0 e3a01445 MOV r1,#0x45000000
000ea4 e5810000 STR r0,[r1,#0]
;;;1251 }
;;;1252
;;;1253 rSUBSRCPND=(BIT_SUB_AC97);
|L1.3752|
000ea8 e3a00840 MOV r0,#0x400000
000eac e51f186c LDR r1,|L1.1608|
000eb0 e5810018 STR r0,[r1,#0x18]
;;;1254 rSUBSRCPND;
000eb4 e1c10000 BIC r0,r1,r0
000eb8 e5900018 LDR r0,[r0,#0x18]
;;;1255 ClearPending(BIT_AC97_NFLASH);
000ebc e3a00740 MOV r0,#0x1000000
000ec0 e1c11000 BIC r1,r1,r0
000ec4 e5810000 STR r0,[r1,#0]
000ec8 e1c10000 BIC r0,r1,r0
000ecc e5900010 LDR r0,[r0,#0x10]
000ed0 e5810010 STR r0,[r1,#0x10]
000ed4 e1a00001 MOV r0,r1
000ed8 e5900010 LDR r0,[r0,#0x10]
;;;1256
;;;1257 rINTSUBMSK &= ~(BIT_SUB_AC97);
000edc e1a00001 MOV r0,r1
000ee0 e590001c LDR r0,[r0,#0x1c]
000ee4 e3c00840 BIC r0,r0,#0x400000
000ee8 e581001c STR r0,[r1,#0x1c]
;;;1258 rINTMSK &=~(BIT_AC97_NFLASH);
000eec e1a00001 MOV r0,r1
000ef0 e5900008 LDR r0,[r0,#8]
000ef4 e3c00740 BIC r0,r0,#0x1000000
000ef8 e5810008 STR r0,[r1,#8]
;;;1259 }
000efc e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000f00 e25ef004 SUBS pc,lr,#4
|L1.3844|
000f04 0000683f DCD 0x0000683f
|L1.3848|
000f08 0000bb80 DCD 0x0000bb80
|L1.3852|
000f0c 0000ac44 DCD 0x0000ac44
|L1.3856|
000f10 00005622 DCD 0x00005622
|L1.3860|
000f14 00001a1a DCD 0x00001a1a
|L1.3864|
000f18 0000002d DCD ||.bss$2|| + 45
|L1.3868|
000f1c 37394341 DCB "AC97"
000f20 646f4320 DCB " Cod"
000f24 52206365 DCB "ec R"
000f28 79646165 DCB "eady"
000f2c 00000a21 DCB "!\n\0\0"
ENDP
AC97_Init PROC
;;;520 void AC97_Init(void)
;;;521 {
000f30 e92d4010 STMFD sp!,{r4,lr}
;;;522 int i=0;
000f34 e3a04000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -