📄 ac97.txt
字号:
0008d8 e3a00003 MOV r0,#3
0008dc e3a0144b MOV r1,#0x4b000000
0008e0 e581004c STR r0,[r1,#0x4c]
;;;826 rDCON1 = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(5<<24)+(1<<23)+(0<<22)+(2<<20)+(PCM_Size/4);
0008e4 e59f0154 LDR r0,|L1.2624|
0008e8 e0800124 ADD r0,r0,r4,LSR #2
0008ec e3a0144b MOV r1,#0x4b000000
0008f0 e5810050 STR r0,[r1,#0x50]
;;;827 rDMASKTRIG1 = (0<<2) + (1<<1) + (0<<0); //No-stop[2], DMA1 channel On[1], No-sw trigger[0]
0008f4 e3a00002 MOV r0,#2
0008f8 e3a0144b MOV r1,#0x4b000000
0008fc e5810060 STR r0,[r1,#0x60]
;;;828
;;;829 //AC97 Initialize
;;;830 Uart_Printf("\nConnect Head Phone Line In to CON21 (Head Phone Out) on SMDK2442 and Press Key.\n");
000900 e59f013c LDR r0,|L1.2628|
000904 ebfffffe BL Uart_Printf
;;;831 Uart_Getch();
000908 ebfffffe BL Uart_Getch
;;;832 Uart_Printf("\nNow Play...\n");
00090c e28f0f4d ADR r0,|L1.2632|
000910 ebfffffe BL Uart_Printf
;;;833 Uart_Printf("To Volume Up, Press the 'u' key.\n");
000914 e28f0f4f ADR r0,|L1.2648|
000918 ebfffffe BL Uart_Printf
;;;834 Uart_Printf("To Volume Down, Press the 'd' key.\n");
00091c e28f0f56 ADR r0,|L1.2684|
000920 ebfffffe BL Uart_Printf
;;;835 Uart_Printf("To Mute On/Off, Press EINT0 Button.\n");
000924 e28f0f5d ADR r0,|L1.2720|
000928 ebfffffe BL Uart_Printf
;;;836 Uart_Printf("\nIf you want to exit, Press the 'x' key.\n");
00092c e28f0f65 ADR r0,|L1.2760|
000930 ebfffffe BL Uart_Printf
;;;837 Uart_Printf("Headphone Volume Register = 0x%x\n", Output_Volume);
000934 e51f0220 LDR r0,|L1.1820|
000938 e5901000 LDR r1,[r0,#0] ; Output_Volume
00093c e28f0f6c ADR r0,|L1.2804|
000940 ebfffffe BL Uart_Printf
;;;838
;;;839 //Transfer data enable using AC-Link
;;;840 rAC_GLBCTRL = 0x200C;
000944 e59f01cc LDR r0,|L1.2840|
000948 e3a0145b MOV r1,#0x5b000000
00094c e5810000 STR r0,[r1,#0]
;;;841 //Uart_Printf("\nWrite Value to AC_GLBCTRL Reg. =>0x200C\n");
;;;842 //Uart_Printf("Read Value from AC_GLBCTRL Reg. =>0x%x\n", rAC_GLBCTRL);
;;;843
;;;844 Delay(1000);
000950 e3a00ffa MOV r0,#0x3e8
000954 ebfffffe BL Delay
;;;845
;;;846 while(1)
000958 e1a00000 NOP
|L1.2396|
00095c e1a00000 NOP
;;;847 {
;;;848 //Uart_Printf("STAT3: 0x%x CURR_TC: 0x%x DCDST3: 0x%x\n", rDSTAT3&0x300000, rDSTAT3&0xfffff, rDCDST3);
;;;849 Up_Down_Volume=Uart_Getch();
000960 ebfffffe BL Uart_Getch
000964 e59f11b0 LDR r1,|L1.2844|
000968 e5c10000 STRB r0,[r1,#0] ; Up_Down_Volume
;;;850
;;;851 if( (Up_Down_Volume == 'x') | (Up_Down_Volume == 'X'))
00096c e59f01a8 LDR r0,|L1.2844|
000970 e5d00000 LDRB r0,[r0,#0] ; Up_Down_Volume
000974 e3500078 CMP r0,#0x78
000978 1a000001 BNE |L1.2436|
00097c e3a00001 MOV r0,#1
000980 ea000000 B |L1.2442|
|L1.2436|
000984 e3a00000 MOV r0,#0
|L1.2442|
000988 e59f118c LDR r1,|L1.2844|
00098c e5d11000 LDRB r1,[r1,#0] ; Up_Down_Volume
000990 e3510058 CMP r1,#0x58
000994 1a000001 BNE |L1.2464|
000998 e3a01001 MOV r1,#1
00099c ea000000 B |L1.2468|
|L1.2464|
0009a0 e3a01000 MOV r1,#0
|L1.2468|
0009a4 e1900001 ORRS r0,r0,r1
0009a8 0a000000 BEQ |L1.2480|
;;;852 break;
0009ac ea000003 B |L1.2496|
;;;853 PCM_Out_Volume(Up_Down_Volume);
|L1.2480|
0009b0 e59f0164 LDR r0,|L1.2844|
0009b4 e5d00000 LDRB r0,[r0,#0] ; Up_Down_Volume
0009b8 ebfffffe BL PCM_Out_Volume
;;;854 }
0009bc eaffffe6 B |L1.2396|
;;;855
;;;856 ClearPending(BIT_DMA1);
|L1.2496|
0009c0 e3a00a40 MOV r0,#0x40000
0009c4 e3a0144a MOV r1,#0x4a000000
0009c8 e5810000 STR r0,[r1,#0]
0009cc e3a00a40 MOV r0,#0x40000
0009d0 e3a0144a MOV r1,#0x4a000000
0009d4 e5810010 STR r0,[r1,#0x10]
0009d8 e3a0044a MOV r0,#0x4a000000
0009dc e5900010 LDR r0,[r0,#0x10]
;;;857
;;;858 rDMASKTRIG1 = (1<<2); //DMA1 stop
0009e0 e3a00004 MOV r0,#4
0009e4 e3a0144b MOV r1,#0x4b000000
0009e8 e5810060 STR r0,[r1,#0x60]
;;;859 rINTMSK|= (BIT_DMA1 | BIT_EINT0);
0009ec e3a0044a MOV r0,#0x4a000000
0009f0 e5900008 LDR r0,[r0,#8]
0009f4 e3800a40 ORR r0,r0,#0x40000
0009f8 e3800001 ORR r0,r0,#1
0009fc e3a0144a MOV r1,#0x4a000000
000a00 e5810008 STR r0,[r1,#8]
;;;860
;;;861 //AC97 PCM In Channel Finish
;;;862 rAC_GLBCTRL &= ~(1<<13); //PCM Out Transfer Mode Off
000a04 e3a0045b MOV r0,#0x5b000000
000a08 e5900000 LDR r0,[r0,#0]
000a0c e3c00d80 BIC r0,r0,#0x2000
000a10 e3a0145b MOV r1,#0x5b000000
000a14 e5810000 STR r0,[r1,#0]
;;;863 Uart_Printf("\nEnd of Play!\n");
000a18 e28f0f40 ADR r0,|L1.2848|
000a1c ebfffffe BL Uart_Printf
;;;864 }
000a20 e8bd8010 LDMFD sp!,{r4,pc}
|L1.2596|
000a24 00000000 DCD Muting
|L1.2600|
000a28 31fff000 DCD 0x31fff000
|L1.2604|
000a2c 00000000 DCD DMA1_Play_Done
|L1.2608|
000a30 fffbfffe DCD 0xfffbfffe
|L1.2612|
000a34 31000030 DCD 0x31000030
|L1.2616|
000a38 00000028 DCD ||.bss$2|| + 40
|L1.2620|
000a3c 5b000018 DCD 0x5b000018
|L1.2624|
000a40 a5a00000 DCD 0xa5a00000
|L1.2628|
000a44 000000d0 DCD ||.constdata$1|| + 208
|L1.2632|
000a48 776f4e0a DCB "\nNow"
000a4c 616c5020 DCB " Pla"
000a50 2e2e2e79 DCB "y..."
000a54 0000000a DCB "\n\0\0\0"
|L1.2648|
000a58 56206f54 DCB "To V"
000a5c 6d756c6f DCB "olum"
000a60 70552065 DCB "e Up"
000a64 7250202c DCB ", Pr"
000a68 20737365 DCB "ess "
000a6c 20656874 DCB "the "
000a70 20277527 DCB "\'u\' "
000a74 2e79656b DCB "key."
000a78 0000000a DCB "\n\0\0\0"
|L1.2684|
000a7c 56206f54 DCB "To V"
000a80 6d756c6f DCB "olum"
000a84 6f442065 DCB "e Do"
000a88 202c6e77 DCB "wn, "
000a8c 73657250 DCB "Pres"
000a90 68742073 DCB "s th"
000a94 64272065 DCB "e \'d"
000a98 656b2027 DCB "\' ke"
000a9c 000a2e79 DCB "y.\n\0"
|L1.2720|
000aa0 4d206f54 DCB "To M"
000aa4 20657475 DCB "ute "
000aa8 4f2f6e4f DCB "On/O"
000aac 202c6666 DCB "ff, "
000ab0 73657250 DCB "Pres"
000ab4 49452073 DCB "s EI"
000ab8 2030544e DCB "NT0 "
000abc 74747542 DCB "Butt"
000ac0 0a2e6e6f DCB "on.\n"
000ac4 00000000 DCB "\0\0\0\0"
|L1.2760|
000ac8 2066490a DCB "\nIf "
000acc 20756f79 DCB "you "
000ad0 746e6177 DCB "want"
000ad4 206f7420 DCB " to "
000ad8 74697865 DCB "exit"
000adc 7250202c DCB ", Pr"
000ae0 20737365 DCB "ess "
000ae4 20656874 DCB "the "
000ae8 20277827 DCB "\'x\' "
000aec 2e79656b DCB "key."
000af0 0000000a DCB "\n\0\0\0"
|L1.2804|
000af4 64616548 DCB "Head"
000af8 6e6f6870 DCB "phon"
000afc 6f562065 DCB "e Vo"
000b00 656d756c DCB "lume"
000b04 67655220 DCB " Reg"
000b08 65747369 DCB "iste"
000b0c 203d2072 DCB "r = "
000b10 78257830 DCB "0x%x"
000b14 0000000a DCB "\n\0\0\0"
|L1.2840|
000b18 0000200c DCD 0x0000200c
|L1.2844|
000b1c 0000003c DCD ||.bss$2|| + 60
|L1.2848|
000b20 646e450a DCB "\nEnd"
000b24 20666f20 DCB " of "
000b28 79616c50 DCB "Play"
000b2c 00000a21 DCB "!\n\0\0"
ENDP
Irq_AC97_PCMout PROC
;;;1291 void __irq Irq_AC97_PCMout(void)
;;;1292 {
000b30 e92d100f STMFD sp!,{r0-r3,r12}
;;;1293 U32 i, AC97_Stat;
;;;1294
;;;1295 rINTMSK |=(BIT_WDT_AC97);
000b34 e3a0244a MOV r2,#0x4a000000
000b38 e5922008 LDR r2,[r2,#8]
000b3c e3822f80 ORR r2,r2,#0x200
000b40 e3a0344a MOV r3,#0x4a000000
000b44 e5832008 STR r2,[r3,#8]
;;;1296 rINTSUBMSK|=(BIT_SUB_AC97);
000b48 e3a0244a MOV r2,#0x4a000000
000b4c e592201c LDR r2,[r2,#0x1c]
000b50 e3822c40 ORR r2,r2,#0x4000
000b54 e3a0344a MOV r3,#0x4a000000
000b58 e583201c STR r2,[r3,#0x1c]
;;;1297
;;;1298 AC97_Stat = rAC_GLBSTAT;
000b5c e3a0245b MOV r2,#0x5b000000
000b60 e5922004 LDR r2,[r2,#4]
000b64 e1a01002 MOV r1,r2
;;;1299
;;;1300 if (AC97_Stat & AC97_PCM_OUT_THRESHOLD)
000b68 e3110a40 TST r1,#0x40000
000b6c 0a000014 BEQ |L1.3012|
;;;1301 {
;;;1302 for(i=0; i<PCM_OUT_TRIGGER; i++)
000b70 e3a00000 MOV r0,#0
|L1.2932|
000b74 e3500008 CMP r0,#8
000b78 2a000011 BCS |L1.3012|
000b7c ea000001 B |L1.2952|
|L1.2944|
000b80 e2800001 ADD r0,r0,#1
000b84 eafffffa B |L1.2932|
;;;1303 {
;;;1304 rAC_PCMDATA = *(Play_AC97_BUF++);
|L1.2952|
000b88 e51f2158 LDR r2,|L1.2616|
000b8c e5923000 LDR r3,[r2,#0] ; Play_AC97_BUF
000b90 e51fc160 LDR r12,|L1.2616|
000b94 e4932004 LDR r2,[r3],#4
000b98 e58c3000 STR r3,[r12,#0] ; Play_AC97_BUF
000b9c e3a0345b MOV r3,#0x5b000000
000ba0 e5832018 STR r2,[r3,#0x18]
;;;1305
;;;1306 if(Play_AC97_BUF == End_AC97_BUF)
000ba4 e51f2174 LDR r2,|L1.2616|
000ba8 e5922000 LDR r2,[r2,#0] ; Play_AC97_BUF
000bac e59f32d0 LDR r3,|L1.3716|
000bb0 e5933000 LDR r3,[r3,#0] ; End_AC97_BUF
000bb4 e1520003 CMP r2,r3
000bb8 1a000000 BNE |L1.3008|
;;;1307 break;
000bbc ea000000 B |L1.3012|
;;;1308 }
|L1.3008|
000bc0 eaffffee B |L1.2944|
;;;1309 }
;;;1310
;;;1311 if(Play_AC97_BUF == End_AC97_BUF)
|L1.3012|
000bc4 e51f2194 LDR r2,|L1.2616|
000bc8 e5922000 LDR r2,[r2,#0] ; Play_AC97_BUF
000bcc e59f32b0 LDR r3,|L1.3716|
000bd0 e5933000 LDR r3,[r3,#0] ; End_AC97_BUF
000bd4 e1520003 CMP r2,r3
000bd8 1a000007 BNE |L1.3068|
;;;1312 {
;;;1313 rAC_GLBCTRL &= ~(0x40000); //PCM Out channel threshold INT disable
000bdc e3a0245b MOV r2,#0x5b000000
000be0 e5922000 LDR r2,[r2,#0]
000be4 e3c22a40 BIC r2,r2,#0x40000
000be8 e3a0345b MOV r3,#0x5b000000
000bec e5832000 STR r2,[r3,#0]
;;;1314 PCM_Out_INT_Exit =1;
000bf0 e3a02001 MOV r2,#1
000bf4 e59f328c LDR r3,|L1.3720|
000bf8 e1c320b0 STRH r2,[r3,#0] ; PCM_Out_INT_Exit
;;;1315 }
;;;1316
;;;1317 rSUBSRCPND=(BIT_SUB_AC97);
|L1.3068|
000bfc e3a02c40 MOV r2,#0x4000
000c00 e3a0344a MOV r3,#0x4a000000
000c04 e5832018 STR r2,[r3,#0x18]
;;;1318 ClearPending(BIT_WDT_AC97);
000c08 e3a02f80 MOV r2,#0x200
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -