📄 ac97.txt
字号:
0005b0 20363278 DCB "x26 "
0005b4 2e676552 DCB "Reg."
0005b8 7830203a DCB ": 0x"
0005bc 000a7825 DCB "%x\n\0"
|L1.1472|
0005c0 413e3d0a DCB "\n=>A"
0005c4 6f6c616e DCB "nalo"
0005c8 666f2067 DCB "g of"
0005cc 52502066 DCB "f PR"
0005d0 00000a32 DCB "2\n\0\0"
|L1.1492|
0005d4 443e3d0a DCB "\n=>D"
0005d8 74696769 DCB "igit"
0005dc 49206c61 DCB "al I"
0005e0 6f20462f DCB "/F o"
0005e4 50206666 DCB "ff P"
0005e8 000a3452 DCB "R4\n\0"
ENDP
PCM_Out_Volume PROC
;;;738 void PCM_Out_Volume(U8 Up_Down_Volume)
;;;739 {
0005ec e92d4010 STMFD sp!,{r4,lr}
0005f0 e1a04000 MOV r4,r0
;;;740 if( ( Up_Down_Volume == 'u') | (Up_Down_Volume == 'U') )
0005f4 e3540075 CMP r4,#0x75
0005f8 1a000001 BNE |L1.1540|
0005fc e3a00001 MOV r0,#1
000600 ea000000 B |L1.1544|
|L1.1540|
000604 e3a00000 MOV r0,#0
|L1.1544|
000608 e3540055 CMP r4,#0x55
00060c 1a000001 BNE |L1.1560|
000610 e3a01001 MOV r1,#1
000614 ea000000 B |L1.1564|
|L1.1560|
000618 e3a01000 MOV r1,#0
|L1.1564|
00061c e1900001 ORRS r0,r0,r1
000620 0a000017 BEQ |L1.1668|
;;;741 {
;;;742 if (Output_Volume == 0x0000)
000624 e59f00f0 LDR r0,|L1.1820|
000628 e5900000 LDR r0,[r0,#0] ; Output_Volume
00062c e3500000 CMP r0,#0
000630 1a000002 BNE |L1.1600|
;;;743 {
;;;744 Uart_Printf("\nLimit Volume Range!");
000634 e28f00e4 ADR r0,|L1.1824|
000638 ebfffffe BL Uart_Printf
00063c ea000010 B |L1.1668|
;;;745 }
;;;746 else
;;;747 {
;;;748 Output_Volume -= 0x0101;
|L1.1600|
000640 e59f00d4 LDR r0,|L1.1820|
000644 e5900000 LDR r0,[r0,#0] ; Output_Volume
000648 e3e01f40 MVN r1,#0x100
00064c e0800001 ADD r0,r0,r1
000650 e59f10c4 LDR r1,|L1.1820|
000654 e5810000 STR r0,[r1,#0] ; Output_Volume
;;;749 AC97_Codec_Cmd(0,0x04, Output_Volume); // PCM out Volume Up
000658 e59f00bc LDR r0,|L1.1820|
00065c e5900000 LDR r0,[r0,#0] ; Output_Volume
000660 e1a02800 MOV r2,r0,LSL #16
000664 e1a02822 MOV r2,r2,LSR #16
000668 e3a01004 MOV r1,#4
00066c e3a00000 MOV r0,#0
000670 ebfffffe BL AC97_Codec_Cmd
;;;750 Uart_Printf("\nHeadphone Volume Level (In AC97 Codec 04h Reg.): 0x%x", Output_Volume);
000674 e59f00a0 LDR r0,|L1.1820|
000678 e5901000 LDR r1,[r0,#0] ; Output_Volume
00067c e28f00b4 ADR r0,|L1.1848|
000680 ebfffffe BL Uart_Printf
;;;751 }
;;;752 }
;;;753
;;;754 if ( ( Up_Down_Volume == 'd') | (Up_Down_Volume == 'D') )
|L1.1668|
000684 e3540064 CMP r4,#0x64
000688 1a000001 BNE |L1.1684|
00068c e3a00001 MOV r0,#1
000690 ea000000 B |L1.1688|
|L1.1684|
000694 e3a00000 MOV r0,#0
|L1.1688|
000698 e3540044 CMP r4,#0x44
00069c 1a000001 BNE |L1.1704|
0006a0 e3a01001 MOV r1,#1
0006a4 ea000000 B |L1.1708|
|L1.1704|
0006a8 e3a01000 MOV r1,#0
|L1.1708|
0006ac e1900001 ORRS r0,r0,r1
0006b0 0a000018 BEQ |L1.1816|
;;;755 {
;;;756 if (Output_Volume == 0x1F1F)
0006b4 e59f0060 LDR r0,|L1.1820|
0006b8 e5900000 LDR r0,[r0,#0] ; Output_Volume
0006bc e240cd7c SUB r12,r0,#0x1f00
0006c0 e25cc01f SUBS r12,r12,#0x1f
0006c4 1a000002 BNE |L1.1748|
;;;757 {
;;;758 Uart_Printf("\nLimit Volume Range!");
0006c8 e28f0050 ADR r0,|L1.1824|
0006cc ebfffffe BL Uart_Printf
0006d0 ea000010 B |L1.1816|
;;;759 }
;;;760 else
;;;761 {
;;;762 Output_Volume += 0x0101;
|L1.1748|
0006d4 e59f0040 LDR r0,|L1.1820|
0006d8 e5900000 LDR r0,[r0,#0] ; Output_Volume
0006dc e2800f40 ADD r0,r0,#0x100
0006e0 e2800001 ADD r0,r0,#1
0006e4 e59f1030 LDR r1,|L1.1820|
0006e8 e5810000 STR r0,[r1,#0] ; Output_Volume
;;;763 AC97_Codec_Cmd(0,0x04, Output_Volume); // PCM out Volume Down
0006ec e59f0028 LDR r0,|L1.1820|
0006f0 e5900000 LDR r0,[r0,#0] ; Output_Volume
0006f4 e1a02800 MOV r2,r0,LSL #16
0006f8 e1a02822 MOV r2,r2,LSR #16
0006fc e3a01004 MOV r1,#4
000700 e3a00000 MOV r0,#0
000704 ebfffffe BL AC97_Codec_Cmd
;;;764 Uart_Printf("\nHeadphone Volume Level (In AC97 Codec 04h Reg.): 0x%x", Output_Volume);
000708 e59f000c LDR r0,|L1.1820|
00070c e5901000 LDR r1,[r0,#0] ; Output_Volume
000710 e28f0020 ADR r0,|L1.1848|
000714 ebfffffe BL Uart_Printf
;;;765 }
;;;766 }
;;;767 }
|L1.1816|
000718 e8bd8010 LDMFD sp!,{r4,pc}
|L1.1820|
00071c 0000001c DCD ||.bss$2|| + 28
|L1.1824|
000720 6d694c0a DCB "\nLim"
000724 56207469 DCB "it V"
000728 6d756c6f DCB "olum"
00072c 61522065 DCB "e Ra"
000730 2165676e DCB "nge!"
000734 00000000 DCB "\0\0\0\0"
|L1.1848|
000738 6165480a DCB "\nHea"
00073c 6f687064 DCB "dpho"
000740 5620656e DCB "ne V"
000744 6d756c6f DCB "olum"
000748 654c2065 DCB "e Le"
00074c 206c6576 DCB "vel "
000750 206e4928 DCB "(In "
000754 37394341 DCB "AC97"
000758 646f4320 DCB " Cod"
00075c 30206365 DCB "ec 0"
000760 52206834 DCB "4h R"
000764 292e6765 DCB "eg.)"
000768 7830203a DCB ": 0x"
00076c 00007825 DCB "%x\0\0"
ENDP
DMA1_Play_Done PROC
;;;1273 void __irq DMA1_Play_Done(void)
;;;1274 {
|L1.1904|
000770 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;1275 ClearPending(BIT_DMA1);
000774 e3a00a40 MOV r0,#0x40000
000778 e3a0144a MOV r1,#0x4a000000
00077c e5810000 STR r0,[r1,#0]
000780 e3a00a40 MOV r0,#0x40000
000784 e3a0144a MOV r1,#0x4a000000
000788 e5810010 STR r0,[r1,#0x10]
00078c e3a0044a MOV r0,#0x4a000000
000790 e5900010 LDR r0,[r0,#0x10]
;;;1276 Uart_Printf("\n~~~");
000794 e28f0008 ADR r0,|L1.1956|
000798 ebfffffe BL Uart_Printf
;;;1277 }
00079c e8bd500f LDMFD sp!,{r0-r3,r12,lr}
0007a0 e25ef004 SUBS pc,lr,#4
|L1.1956|
0007a4 7e7e7e0a DCB "\n~~~"
0007a8 00000000 DCB "\0\0\0\0"
ENDP
Muting PROC
;;;1399 void __irq Muting(void)
;;;1400 {
|L1.1964|
0007ac e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;1401
;;;1402 ClearPending(BIT_EINT0);
0007b0 e3a00001 MOV r0,#1
0007b4 e3a0144a MOV r1,#0x4a000000
0007b8 e5810000 STR r0,[r1,#0]
0007bc e3a00001 MOV r0,#1
0007c0 e3a0144a MOV r1,#0x4a000000
0007c4 e5810010 STR r0,[r1,#0x10]
0007c8 e3a0044a MOV r0,#0x4a000000
0007cc e5900010 LDR r0,[r0,#0x10]
;;;1403
;;;1404 if(AC97_mute) //AC97_mute
0007d0 e59f0078 LDR r0,|L1.2128|
0007d4 e5d00000 LDRB r0,[r0,#0] ; AC97_mute
0007d8 e3500000 CMP r0,#0
0007dc 0a00000d BEQ |L1.2072|
;;;1405 {
;;;1406 AC97_mute = 0;
0007e0 e3a00000 MOV r0,#0
0007e4 e59f1064 LDR r1,|L1.2128|
0007e8 e5c10000 STRB r0,[r1,#0] ; AC97_mute
;;;1407 AC97_Codec_Cmd(0,0x04, Output_Volume|0x8000);
0007ec e51f00d8 LDR r0,|L1.1820|
0007f0 e5900000 LDR r0,[r0,#0] ; Output_Volume
0007f4 e1a00800 MOV r0,r0,LSL #16
0007f8 e1a00820 MOV r0,r0,LSR #16
0007fc e3802c80 ORR r2,r0,#0x8000
000800 e3a01004 MOV r1,#4
000804 e3a00000 MOV r0,#0
000808 ebfffffe BL AC97_Codec_Cmd
;;;1408 Uart_Printf("\nAC97 Mute On...\n");
00080c e28f0040 ADR r0,|L1.2132|
000810 ebfffffe BL Uart_Printf
000814 ea00000b B |L1.2120|
;;;1409 }
;;;1410 else //No AC97_mute
;;;1411 {
;;;1412
;;;1413 AC97_mute = 1;
|L1.2072|
000818 e3a00001 MOV r0,#1
00081c e59f102c LDR r1,|L1.2128|
000820 e5c10000 STRB r0,[r1,#0] ; AC97_mute
;;;1414 AC97_Codec_Cmd(0,0x04, Output_Volume& ~(0x8000));
000824 e51f0110 LDR r0,|L1.1820|
000828 e5900000 LDR r0,[r0,#0] ; Output_Volume
00082c e1a02880 MOV r2,r0,LSL #17
000830 e1a028a2 MOV r2,r2,LSR #17
000834 e3a01004 MOV r1,#4
000838 e3a00000 MOV r0,#0
00083c ebfffffe BL AC97_Codec_Cmd
;;;1415 Uart_Printf("\nAC97 Mute Off...\n");
000840 e28f0020 ADR r0,|L1.2152|
000844 ebfffffe BL Uart_Printf
;;;1416 }
;;;1417 }
|L1.2120|
000848 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
00084c e25ef004 SUBS pc,lr,#4
|L1.2128|
000850 00000000 DCD AC97_mute
|L1.2132|
000854 3943410a DCB "\nAC9"
000858 754d2037 DCB "7 Mu"
00085c 4f206574 DCB "te O"
000860 2e2e2e6e DCB "n..."
000864 0000000a DCB "\n\0\0\0"
|L1.2152|
000868 3943410a DCB "\nAC9"
00086c 754d2037 DCB "7 Mu"
000870 4f206574 DCB "te O"
000874 2e2e6666 DCB "ff.."
000878 00000a2e DCB ".\n\0\0"
ENDP
AC97_PCMout_DMA1 PROC
;;;813 void AC97_PCMout_DMA1(U32 PCM_Size)
;;;814 {
00087c e92d4010 STMFD sp!,{r4,lr}
000880 e1a04000 MOV r4,r0
;;;815 pISR_EINT0= (unsigned)Muting;
000884 e59f0198 LDR r0,|L1.2596|
000888 e59f1198 LDR r1,|L1.2600|
00088c e5810f20 STR r0,[r1,#0xf20]
;;;816 pISR_DMA1= (unsigned)DMA1_Play_Done;
000890 e59f0194 LDR r0,|L1.2604|
000894 e5810f68 STR r0,[r1,#0xf68]
;;;817 rINTMSK = ~(BIT_DMA1|BIT_EINT0);
000898 e59f0190 LDR r0,|L1.2608|
00089c e3a0144a MOV r1,#0x4a000000
0008a0 e5810008 STR r0,[r1,#8]
;;;818
;;;819 Play_AC97_BUF=(U32 *)(DOWN_BUF +0x30);
0008a4 e59f0188 LDR r0,|L1.2612|
0008a8 e59f1188 LDR r1,|L1.2616|
0008ac e5810000 STR r0,[r1,#0] ; Play_AC97_BUF
;;;820
;;;821 //DMA Ch1 for PCMInitialize
;;;822 rDISRC1 = (int)Play_AC97_BUF;
0008b0 e59f0180 LDR r0,|L1.2616|
0008b4 e5900000 LDR r0,[r0,#0] ; Play_AC97_BUF
0008b8 e3a0144b MOV r1,#0x4b000000
0008bc e5810040 STR r0,[r1,#0x40]
;;;823 rDISRCC1 = (0<<1) + (0<<0); //The source is in the system bus(AHB), Increment
0008c0 e3a00000 MOV r0,#0
0008c4 e3a0144b MOV r1,#0x4b000000
0008c8 e5810044 STR r0,[r1,#0x44]
;;;824 rDIDST1 = ((U32)0x5b000018); //PCM Out Data Fifo
0008cc e59f0168 LDR r0,|L1.2620|
0008d0 e3a0144b MOV r1,#0x4b000000
0008d4 e5810048 STR r0,[r1,#0x48]
;;;825 rDIDSTC1 = (1<<1) + (1<<0); //The destination is in the peripheral bus(APB), Fixed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -