📄 ac97.txt
字号:
0005b4 56207469 DCB "it V"
0005b8 6d756c6f DCB "olum"
0005bc 61522065 DCB "e Ra"
0005c0 2165676e DCB "nge!"
0005c4 00000000 DCB "\0\0\0\0"
|L1.1480|
0005c8 6165480a DCB "\nHea"
0005cc 6f687064 DCB "dpho"
0005d0 5620656e DCB "ne V"
0005d4 6d756c6f DCB "olum"
0005d8 654c2065 DCB "e Le"
0005dc 206c6576 DCB "vel "
0005e0 206e4928 DCB "(In "
0005e4 37394341 DCB "AC97"
0005e8 646f4320 DCB " Cod"
0005ec 30206365 DCB "ec 0"
0005f0 52206834 DCB "4h R"
0005f4 292e6765 DCB "eg.)"
0005f8 7830203a DCB ": 0x"
0005fc 00007825 DCB "%x\0\0"
ENDP
DMA0_Play_Done PROC
;;;1261 void __irq DMA0_Play_Done(void)
;;;1262 {
|L1.1536|
000600 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;1263 rSUBSRCPND = BIT_SUB_DMA0;
000604 e3a00780 MOV r0,#0x2000000
000608 e59f1038 LDR r1,|L1.1608|
00060c e5810018 STR r0,[r1,#0x18]
;;;1264 rSUBSRCPND;
000610 e1c10000 BIC r0,r1,r0
000614 e5900018 LDR r0,[r0,#0x18]
;;;1265 ClearPending(BIT_DMA);
000618 e3a00940 MOV r0,#0x100000
00061c e1c11000 BIC r1,r1,r0
000620 e5810000 STR r0,[r1,#0]
000624 e1c10000 BIC r0,r1,r0
000628 e5900010 LDR r0,[r0,#0x10]
00062c e5810010 STR r0,[r1,#0x10]
000630 e1a00001 MOV r0,r1
000634 e5900010 LDR r0,[r0,#0x10]
;;;1266 Uart_Printf("@");
000638 e28f000c ADR r0,|L1.1612|
00063c ebfffffe BL _printf
;;;1267 }
000640 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000644 e25ef004 SUBS pc,lr,#4
|L1.1608|
000648 40200000 DCD 0x40200000
|L1.1612|
00064c 00000040 DCB "@\0\0\0"
ENDP
Muting PROC
;;;1396 void __irq Muting(void)
;;;1397 {
|L1.1616|
000650 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;1398 if(rEINTPEND==(1<<0))
000654 e51f0564 LDR r0,|L1.248|
000658 e5900038 LDR r0,[r0,#0x38]
00065c e3500001 CMP r0,#1
000660 1a000003 BNE |L1.1652|
;;;1399 {
;;;1400 //Delay(1000); For Key bouncing protect!!
;;;1401 //Uart_Printf("EINT0 interrupt is occured\n");
;;;1402 rEINTPEND=(1<<0);
000664 e3a00001 MOV r0,#1
000668 e51f1578 LDR r1,|L1.248|
00066c e5810038 STR r0,[r1,#0x38]
000670 ea000011 B |L1.1724|
;;;1403 }
;;;1404 else if(rEINTPEND==(1<<1))
|L1.1652|
000674 e51f0584 LDR r0,|L1.248|
000678 e5900038 LDR r0,[r0,#0x38]
00067c e3500002 CMP r0,#2
000680 1a000005 BNE |L1.1692|
;;;1405 {
;;;1406 Uart_Printf("EINT1 interrupt is occured\n");
000684 e28f0f46 ADR r0,|L1.1956|
000688 ebfffffe BL _printf
;;;1407 rEINTPEND=(1<<1);
00068c e3a00002 MOV r0,#2
000690 e51f15a0 LDR r1,|L1.248|
000694 e5810038 STR r0,[r1,#0x38]
000698 ea000007 B |L1.1724|
;;;1408 }
;;;1409 else
;;;1410 {
;;;1411 Uart_Printf("rEINTPEND=%x\n",rEINTPEND);
|L1.1692|
00069c e51f05ac LDR r0,|L1.248|
0006a0 e5900038 LDR r0,[r0,#0x38]
0006a4 e1a01000 MOV r1,r0
0006a8 e28f0f44 ADR r0,|L1.1984|
0006ac ebfffffe BL _printf
;;;1412 rEINTPEND=((1<<0)|(1<<1));
0006b0 e3a00003 MOV r0,#3
0006b4 e51f15c4 LDR r1,|L1.248|
0006b8 e5810038 STR r0,[r1,#0x38]
;;;1413 }
;;;1414 ClearPending(BIT_EINT0_2);
|L1.1724|
0006bc e3a00001 MOV r0,#1
0006c0 e51f1080 LDR r1,|L1.1608|
0006c4 e5810000 STR r0,[r1,#0]
0006c8 e1c10000 BIC r0,r1,r0
0006cc e5900010 LDR r0,[r0,#0x10]
0006d0 e5810010 STR r0,[r1,#0x10]
0006d4 e1a00001 MOV r0,r1
0006d8 e5900010 LDR r0,[r0,#0x10]
;;;1415
;;;1416 rEINTMASK = 0x7ffff;
0006dc e59f00ec LDR r0,|L1.2000|
0006e0 e2811646 ADD r1,r1,#0x4600000
0006e4 e5810034 STR r0,[r1,#0x34]
;;;1417 rINTMSK |= (BIT_EINT0_2);
0006e8 e2410646 SUB r0,r1,#0x4600000
0006ec e5900008 LDR r0,[r0,#8]
0006f0 e3800001 ORR r0,r0,#1
0006f4 e2411646 SUB r1,r1,#0x4600000
0006f8 e5810008 STR r0,[r1,#8]
;;;1418
;;;1419 if(AC97_mute) //AC97_mute
0006fc e59f00d0 LDR r0,|L1.2004|
000700 e5d00000 LDRB r0,[r0,#0] ; AC97_mute
000704 e3500000 CMP r0,#0
000708 0a00000d BEQ |L1.1860|
;;;1420 {
;;;1421 AC97_mute = 0;
00070c e3a00000 MOV r0,#0
000710 e59f10bc LDR r1,|L1.2004|
000714 e5c10000 STRB r0,[r1,#0] ; AC97_mute
;;;1422 AC97_Codec_Cmd(0,0x04, Output_Volume|0x8000);
000718 e51f0174 LDR r0,|L1.1452|
00071c e5900000 LDR r0,[r0,#0] ; Output_Volume
000720 e1a00800 MOV r0,r0,LSL #16
000724 e1a00820 MOV r0,r0,LSR #16
000728 e3802c80 ORR r2,r0,#0x8000
00072c e3a01004 MOV r1,#4
000730 e3a00000 MOV r0,#0
000734 ebfffffe BL AC97_Codec_Cmd
;;;1423 Uart_Printf("\nAC97 Mute On...\n");
000738 e28f0098 ADR r0,|L1.2008|
00073c ebfffffe BL _printf
000740 ea00000b B |L1.1908|
;;;1424 }
;;;1425 else //No AC97_mute
;;;1426 {
;;;1427
;;;1428 AC97_mute = 1;
|L1.1860|
000744 e3a00001 MOV r0,#1
000748 e59f1084 LDR r1,|L1.2004|
00074c e5c10000 STRB r0,[r1,#0] ; AC97_mute
;;;1429 AC97_Codec_Cmd(0,0x04, Output_Volume& ~(0x8000));
000750 e51f01ac LDR r0,|L1.1452|
000754 e5900000 LDR r0,[r0,#0] ; Output_Volume
000758 e1a02880 MOV r2,r0,LSL #17
00075c e1a028a2 MOV r2,r2,LSR #17
000760 e3a01004 MOV r1,#4
000764 e3a00000 MOV r0,#0
000768 ebfffffe BL AC97_Codec_Cmd
;;;1430 Uart_Printf("\nAC97 Mute Off...\n");
00076c e28f0078 ADR r0,|L1.2028|
000770 ebfffffe BL _printf
;;;1431 }
;;;1432 rEINTMASK&=~(1<<0);
|L1.1908|
000774 e51f0684 LDR r0,|L1.248|
000778 e5900034 LDR r0,[r0,#0x34]
00077c e3c00001 BIC r0,r0,#1
000780 e51f1690 LDR r1,|L1.248|
000784 e5810034 STR r0,[r1,#0x34]
;;;1433 rINTMSK &= ~(BIT_EINT0_2);
000788 e2410646 SUB r0,r1,#0x4600000
00078c e5900008 LDR r0,[r0,#8]
000790 e3c00001 BIC r0,r0,#1
000794 e2411646 SUB r1,r1,#0x4600000
000798 e5810008 STR r0,[r1,#8]
;;;1434 }
00079c e8bd500f LDMFD sp!,{r0-r3,r12,lr}
0007a0 e25ef004 SUBS pc,lr,#4
|L1.1956|
0007a4 544e4945 DCB "EINT"
0007a8 6e692031 DCB "1 in"
0007ac 72726574 DCB "terr"
0007b0 20747075 DCB "upt "
0007b4 6f207369 DCB "is o"
0007b8 72756363 DCB "ccur"
0007bc 000a6465 DCB "ed\n\0"
|L1.1984|
0007c0 4e494572 DCB "rEIN"
0007c4 4e455054 DCB "TPEN"
0007c8 78253d44 DCB "D=%x"
0007cc 0000000a DCB "\n\0\0\0"
|L1.2000|
0007d0 0007ffff DCD 0x0007ffff
|L1.2004|
0007d4 00000000 DCD AC97_mute
|L1.2008|
0007d8 3943410a DCB "\nAC9"
0007dc 754d2037 DCB "7 Mu"
0007e0 4f206574 DCB "te O"
0007e4 2e2e2e6e DCB "n..."
0007e8 0000000a DCB "\n\0\0\0"
|L1.2028|
0007ec 3943410a DCB "\nAC9"
0007f0 754d2037 DCB "7 Mu"
0007f4 4f206574 DCB "te O"
0007f8 2e2e6666 DCB "ff.."
0007fc 00000a2e DCB ".\n\0\0"
ENDP
AC97_PCMout_DMA0 PROC
;;;827 void AC97_PCMout_DMA0(U32 PCM_Size)
;;;828 {
000800 e92d4010 STMFD sp!,{r4,lr}
000804 e1a04000 MOV r4,r0
;;;829 pISR_EINT0_2= (unsigned)Muting;
000808 e59f0130 LDR r0,|L1.2368|
00080c e59f1130 LDR r1,|L1.2372|
000810 e5810f20 STR r0,[r1,#0xf20]
;;;830 pISR_DMA= (unsigned)DMA0_Play_Done;
000814 e59f012c LDR r0,|L1.2376|
000818 e5810f70 STR r0,[r1,#0xf70]
;;;831
;;;832 rEINTPEND = 0xffffff;
00081c e3e004ff MVN r0,#0xff000000
000820 e51f1730 LDR r1,|L1.248|
000824 e5810038 STR r0,[r1,#0x38]
;;;833 rSRCPND = BIT_EINT0_2; //to clear the previous pending states
000828 e3a00001 MOV r0,#1
00082c e2411646 SUB r1,r1,#0x4600000
000830 e5810000 STR r0,[r1,#0]
;;;834 rINTPND = BIT_EINT0_2;
000834 e3a00001 MOV r0,#1
000838 e1c11000 BIC r1,r1,r0
00083c e5810010 STR r0,[r1,#0x10]
;;;835
;;;836 rINTMSK = ~(BIT_DMA|BIT_EINT0_2);
000840 e59f0104 LDR r0,|L1.2380|
000844 e0011000 AND r1,r1,r0
000848 e5810008 STR r0,[r1,#8]
;;;837 rINTSUBMSK = ~(BIT_SUB_DMA0);
00084c e3e00780 MVN r0,#0x2000000
000850 e0011000 AND r1,r1,r0
000854 e581001c STR r0,[r1,#0x1c]
;;;838 rEINTMASK=~(1<<0);
000858 e3e00001 MVN r0,#1
00085c e2811646 ADD r1,r1,#0x4600000
000860 e5810034 STR r0,[r1,#0x34]
;;;839
;;;840 Play_AC97_BUF=(U32 *)(DOWN_BUF +0x30);
000864 e59f00e4 LDR r0,|L1.2384|
000868 e59f10e4 LDR r1,|L1.2388|
00086c e5810000 STR r0,[r1,#0] ; Play_AC97_BUF
;;;841
;;;842 //DMA Ch0 for PCMInitialize
;;;843 rDISRC0 = (int)Play_AC97_BUF;
000870 e59f00dc LDR r0,|L1.2388|
000874 e5900000 LDR r0,[r0,#0] ; Play_AC97_BUF
000878 e59f10d8 LDR r1,|L1.2392|
00087c e5810000 STR r0,[r1,#0]
;;;844 rDISRCC0 = (0<<1) + (0<<0); //The source is in the system bus(AHB), Increment
000880 e3a00000 MOV r0,#0
000884 e1c11000 BIC r1,r1,r0
000888 e5810004 STR r0,[r1,#4]
;;;845 rDIDST0 = ((U32)0x45000018); //PCM Out Data Fifo
00088c e59f00c8 LDR r0,|L1.2396|
000890 e1c110c0 BIC r1,r1,r0,ASR #1
000894 e5810008 STR r0,[r1,#8]
;;;846 rDIDSTC0 = (1<<1) + (1<<0); //The destination is in the peripheral bus(APB), Fixed
000898 e3a00003 MOV r0,#3
00089c e1c11000 BIC r1,r1,r0
0008a0 e581000c STR r0,[r1,#0xc]
;;;847 rDCON0 = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(5<<24)+(1<<23)+(0<<22)+(2<<20)+(PCM_Size/4);
0008a4 e59f00b4 LDR r0,|L1.2400|
0008a8 e0800124 ADD r0,r0,r4,LSR #2
0008ac e5810010 STR r0,[r1,#0x10]
;;;848 rDMASKTRIG0 = (0<<2) + (1<<1) + (0<<0); //No-stop[2], DMA1 channel On[1], No-sw trigger[0]
0008b0 e3a00002 MOV r0,#2
0008b4 e1c11000 BIC r1,r1,r0
0008b8 e5810020 STR r0,[r1,#0x20]
;;;849
;;;850 //AC97 Initialize
;;;851 Uart_Printf("\nConnect Head Phone into CON20 (Head Phone Out) on SMDK24A0 and Press Key.\n");
0008bc e59f00a0 LDR r0,|L1.2404|
0008c0 ebfffffe BL _printf
;;;852 Uart_Getch();
0008c4 ebfffffe BL Uart_Getch
;;;853 Uart_Printf("\nNow Play...\n");
0008c8 e28f0098 ADR r0,|L1.2408|
0008cc ebfffffe BL _printf
;;;854 Uart_Printf("To Volume Up, Press the 'u' key.\n");
0008d0 e28f00a0 ADR r0,|L1.2424|
0008d4 ebfffffe BL _printf
;;;855 Uart_Printf("To Volume Down, Press the 'd' key.\n");
0008d8 e28f00bc ADR r0,|L1.2460|
0008dc ebfffffe BL _printf
;;;856 Uart_Printf("To Mute On/Off, Press EINT0 Button.\n");
0008e0 e28f00d8 ADR r0,|L1.2496|
0008e4 ebfffffe BL _printf
;;;857 Uart_Printf("\nIf you want to exit, Press the 'x' key.\n");
0008e8 e28f00f8 ADR r0,|L1.2536|
0008ec ebfffffe BL _printf
;;;858 Uart_Printf("Headphone Volume Register = 0x%x\n", Output_Volume);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -