📄 ac97.txt
字号:
0008f0 e51f034c LDR r0,|L1.1452|
0008f4 e5901000 LDR r1,[r0,#0] ; Output_Volume
0008f8 e28f0f45 ADR r0,|L1.2580|
0008fc ebfffffe BL _printf
;;;859
;;;860 //Transfer data enable using AC-Link
;;;861 rAC_GLBCTRL = 0x200C;
000900 e59f0130 LDR r0,|L1.2616|
000904 e3a01445 MOV r1,#0x45000000
000908 e5810000 STR r0,[r1,#0]
;;;862 //Uart_Printf("\nWrite Value to AC_GLBCTRL Reg. =>0x200C\n");
;;;863 //Uart_Printf("Read Value from AC_GLBCTRL Reg. =>0x%x\n", rAC_GLBCTRL);
;;;864
;;;865 Delay(1000);
00090c e3a00ffa MOV r0,#0x3e8
000910 ebfffffe BL Delay
;;;866
;;;867 while(1)
000914 e1a00000 NOP
|L1.2328|
000918 e1a00000 NOP
;;;868 {
;;;869 //Uart_Printf("STAT3: 0x%x CURR_TC: 0x%x DCDST3: 0x%x\n", rDSTAT3&0x300000, rDSTAT3&0xfffff, rDCDST3);
;;;870 Up_Down_Volume=Uart_Getch();
00091c ebfffffe BL Uart_Getch
000920 e59f1114 LDR r1,|L1.2620|
000924 e5c10000 STRB r0,[r1,#0] ; Up_Down_Volume
;;;871
;;;872 if( (Up_Down_Volume == 'x') | (Up_Down_Volume == 'X'))
000928 e59f010c LDR r0,|L1.2620|
00092c e5d00000 LDRB r0,[r0,#0] ; Up_Down_Volume
000930 e3500078 CMP r0,#0x78
000934 1a000041 BNE |L1.2624|
000938 e3a00001 MOV r0,#1
00093c ea000040 B |L1.2628|
|L1.2368|
000940 00000000 DCD Muting
|L1.2372|
000944 13fff000 DCD 0x13fff000
|L1.2376|
000948 00000000 DCD DMA0_Play_Done
|L1.2380|
00094c ffeffffe DCD 0xffeffffe
|L1.2384|
000950 11000030 DCD 0x11000030
|L1.2388|
000954 0000001c DCD ||.bss$2|| + 28
|L1.2392|
000958 40400000 DCD 0x40400000
|L1.2396|
00095c 45000018 DCD 0x45000018
|L1.2400|
000960 a5a00000 DCD 0xa5a00000
|L1.2404|
000964 000000d0 DCD ||.constdata$1|| + 208
|L1.2408|
000968 776f4e0a DCB "\nNow"
00096c 616c5020 DCB " Pla"
000970 2e2e2e79 DCB "y..."
000974 0000000a DCB "\n\0\0\0"
|L1.2424|
000978 56206f54 DCB "To V"
00097c 6d756c6f DCB "olum"
000980 70552065 DCB "e Up"
000984 7250202c DCB ", Pr"
000988 20737365 DCB "ess "
00098c 20656874 DCB "the "
000990 20277527 DCB "\'u\' "
000994 2e79656b DCB "key."
000998 0000000a DCB "\n\0\0\0"
|L1.2460|
00099c 56206f54 DCB "To V"
0009a0 6d756c6f DCB "olum"
0009a4 6f442065 DCB "e Do"
0009a8 202c6e77 DCB "wn, "
0009ac 73657250 DCB "Pres"
0009b0 68742073 DCB "s th"
0009b4 64272065 DCB "e \'d"
0009b8 656b2027 DCB "\' ke"
0009bc 000a2e79 DCB "y.\n\0"
|L1.2496|
0009c0 4d206f54 DCB "To M"
0009c4 20657475 DCB "ute "
0009c8 4f2f6e4f DCB "On/O"
0009cc 202c6666 DCB "ff, "
0009d0 73657250 DCB "Pres"
0009d4 49452073 DCB "s EI"
0009d8 2030544e DCB "NT0 "
0009dc 74747542 DCB "Butt"
0009e0 0a2e6e6f DCB "on.\n"
0009e4 00000000 DCB "\0\0\0\0"
|L1.2536|
0009e8 2066490a DCB "\nIf "
0009ec 20756f79 DCB "you "
0009f0 746e6177 DCB "want"
0009f4 206f7420 DCB " to "
0009f8 74697865 DCB "exit"
0009fc 7250202c DCB ", Pr"
000a00 20737365 DCB "ess "
000a04 20656874 DCB "the "
000a08 20277827 DCB "\'x\' "
000a0c 2e79656b DCB "key."
000a10 0000000a DCB "\n\0\0\0"
|L1.2580|
000a14 64616548 DCB "Head"
000a18 6e6f6870 DCB "phon"
000a1c 6f562065 DCB "e Vo"
000a20 656d756c DCB "lume"
000a24 67655220 DCB " Reg"
000a28 65747369 DCB "iste"
000a2c 203d2072 DCB "r = "
000a30 78257830 DCB "0x%x"
000a34 0000000a DCB "\n\0\0\0"
|L1.2616|
000a38 0000200c DCD 0x0000200c
|L1.2620|
000a3c 0000002c DCD ||.bss$2|| + 44
|L1.2624|
000a40 e3a00000 MOV r0,#0
|L1.2628|
000a44 e51f1010 LDR r1,|L1.2620|
000a48 e5d11000 LDRB r1,[r1,#0] ; Up_Down_Volume
000a4c e3510058 CMP r1,#0x58
000a50 1a000001 BNE |L1.2652|
000a54 e3a01001 MOV r1,#1
000a58 ea000000 B |L1.2656|
|L1.2652|
000a5c e3a01000 MOV r1,#0
|L1.2656|
000a60 e1900001 ORRS r0,r0,r1
000a64 0a000000 BEQ |L1.2668|
;;;873 break;
000a68 ea000003 B |L1.2684|
;;;874 PCM_Out_Volume(Up_Down_Volume);
|L1.2668|
000a6c e51f0038 LDR r0,|L1.2620|
000a70 e5d00000 LDRB r0,[r0,#0] ; Up_Down_Volume
000a74 ebfffffe BL PCM_Out_Volume
;;;875 }
000a78 eaffffa6 B |L1.2328|
;;;876
;;;877 //ClearPending(BIT_DMA);
;;;878
;;;879 rDMASKTRIG0 = (1<<2); //DMA0 stop
|L1.2684|
000a7c e3a00004 MOV r0,#4
000a80 e51f1130 LDR r1,|L1.2392|
000a84 e5810020 STR r0,[r1,#0x20]
;;;880
;;;881 rINTSUBMSK|=(BIT_SUB_DMA0);
000a88 e0410980 SUB r0,r1,r0,LSL #19
000a8c e590001c LDR r0,[r0,#0x1c]
000a90 e3800780 ORR r0,r0,#0x2000000
000a94 e2411980 SUB r1,r1,#0x200000
000a98 e581001c STR r0,[r1,#0x1c]
;;;882 rINTMSK|= (BIT_DMA | BIT_EINT0_2);
000a9c e1a00001 MOV r0,r1
000aa0 e5900008 LDR r0,[r0,#8]
000aa4 e3800940 ORR r0,r0,#0x100000
000aa8 e3800001 ORR r0,r0,#1
000aac e5810008 STR r0,[r1,#8]
;;;883 rEINTMASK=0xffffff;
000ab0 e3e004ff MVN r0,#0xff000000
000ab4 e2811646 ADD r1,r1,#0x4600000
000ab8 e5810034 STR r0,[r1,#0x34]
;;;884 //AC97 PCM In Channel Finish
;;;885 rAC_GLBCTRL &= ~(1<<13); //PCM Out Transfer Mode Off
000abc e3a00445 MOV r0,#0x45000000
000ac0 e5900000 LDR r0,[r0,#0]
000ac4 e3c00d80 BIC r0,r0,#0x2000
000ac8 e3a01445 MOV r1,#0x45000000
000acc e5810000 STR r0,[r1,#0]
;;;886 Uart_Printf("\nEnd of Play!\n");
000ad0 e28f0004 ADR r0,|L1.2780|
000ad4 ebfffffe BL _printf
;;;887 }
000ad8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.2780|
000adc 646e450a DCB "\nEnd"
000ae0 20666f20 DCB " of "
000ae4 79616c50 DCB "Play"
000ae8 00000a21 DCB "!\n\0\0"
ENDP
Irq_AC97_PCMout PROC
;;;1285 void __irq Irq_AC97_PCMout(void)
;;;1286 {
000aec e92d100f STMFD sp!,{r0-r3,r12}
;;;1287 U32 i, AC97_Stat;
;;;1288
;;;1289 rINTMSK |=(BIT_AC97_NFLASH);
000af0 e51f24b0 LDR r2,|L1.1608|
000af4 e5922008 LDR r2,[r2,#8]
000af8 e3822740 ORR r2,r2,#0x1000000
000afc e51f34bc LDR r3,|L1.1608|
000b00 e5832008 STR r2,[r3,#8]
;;;1290 rINTSUBMSK|=(BIT_SUB_AC97);
000b04 e1a02003 MOV r2,r3
000b08 e592201c LDR r2,[r2,#0x1c]
000b0c e3822840 ORR r2,r2,#0x400000
000b10 e583201c STR r2,[r3,#0x1c]
;;;1291
;;;1292 AC97_Stat = rAC_GLBSTAT;
000b14 e3a02445 MOV r2,#0x45000000
000b18 e5922004 LDR r2,[r2,#4]
000b1c e1a01002 MOV r1,r2
;;;1293
;;;1294 if (AC97_Stat & AC97_PCM_OUT_THRESHOLD)
000b20 e3110a40 TST r1,#0x40000
000b24 0a000014 BEQ |L1.2940|
;;;1295 {
;;;1296 for(i=0; i<PCM_OUT_TRIGGER; i++)
000b28 e3a00000 MOV r0,#0
|L1.2860|
000b2c e3500008 CMP r0,#8
000b30 2a000011 BCS |L1.2940|
000b34 ea000001 B |L1.2880|
|L1.2872|
000b38 e2800001 ADD r0,r0,#1
000b3c eafffffa B |L1.2860|
;;;1297 {
;;;1298 rAC_PCMDATA = *(Play_AC97_BUF++);
|L1.2880|
000b40 e51f21f4 LDR r2,|L1.2388|
000b44 e5923000 LDR r3,[r2,#0] ; Play_AC97_BUF
000b48 e51fc1fc LDR r12,|L1.2388|
000b4c e4932004 LDR r2,[r3],#4
000b50 e58c3000 STR r3,[r12,#0] ; Play_AC97_BUF
000b54 e3a03445 MOV r3,#0x45000000
000b58 e5832018 STR r2,[r3,#0x18]
;;;1299
;;;1300 if(Play_AC97_BUF == End_AC97_BUF)
000b5c e51f2210 LDR r2,|L1.2388|
000b60 e5922000 LDR r2,[r2,#0] ; Play_AC97_BUF
000b64 e59f31cc LDR r3,|L1.3384|
000b68 e5933000 LDR r3,[r3,#0] ; End_AC97_BUF
000b6c e1520003 CMP r2,r3
000b70 1a000000 BNE |L1.2936|
;;;1301 break;
000b74 ea000000 B |L1.2940|
;;;1302 }
|L1.2936|
000b78 eaffffee B |L1.2872|
;;;1303 }
;;;1304
;;;1305 if(Play_AC97_BUF == End_AC97_BUF)
|L1.2940|
000b7c e51f2230 LDR r2,|L1.2388|
000b80 e5922000 LDR r2,[r2,#0] ; Play_AC97_BUF
000b84 e59f31ac LDR r3,|L1.3384|
000b88 e5933000 LDR r3,[r3,#0] ; End_AC97_BUF
000b8c e1520003 CMP r2,r3
000b90 1a000007 BNE |L1.2996|
;;;1306 {
;;;1307 rAC_GLBCTRL &= ~(0x40000); //PCM Out channel threshold INT disable
000b94 e3a02445 MOV r2,#0x45000000
000b98 e5922000 LDR r2,[r2,#0]
000b9c e3c22a40 BIC r2,r2,#0x40000
000ba0 e3a03445 MOV r3,#0x45000000
000ba4 e5832000 STR r2,[r3,#0]
;;;1308 PCM_Out_INT_Exit =1;
000ba8 e3a02001 MOV r2,#1
000bac e59f3188 LDR r3,|L1.3388|
000bb0 e1c320b0 STRH r2,[r3,#0] ; PCM_Out_INT_Exit
;;;1309 }
;;;1310
;;;1311 rSUBSRCPND=(BIT_SUB_AC97);
|L1.2996|
000bb4 e3a02840 MOV r2,#0x400000
000bb8 e51f3578 LDR r3,|L1.1608|
000bbc e5832018 STR r2,[r3,#0x18]
;;;1312 rSUBSRCPND;
000bc0 e1c32002 BIC r2,r3,r2
000bc4 e5922018 LDR r2,[r2,#0x18]
;;;1313 ClearPending(BIT_AC97_NFLASH);
000bc8 e3a02740 MOV r2,#0x1000000
000bcc e1c33002 BIC r3,r3,r2
000bd0 e5832000 STR r2,[r3,#0]
000bd4 e1c32002 BIC r2,r3,r2
000bd8 e5922010 LDR r2,[r2,#0x10]
000bdc e5832010 STR r2,[r3,#0x10]
000be0 e1a02003 MOV r2,r3
000be4 e5922010 LDR r2,[r2,#0x10]
;;;1314
;;;1315 rINTSUBMSK &= ~(BIT_SUB_AC97);
000be8 e1a02003 MOV r2,r3
000bec e592201c LDR r2,[r2,#0x1c]
000bf0 e3c22840 BIC r2,r2,#0x400000
000bf4 e583201c STR r2,[r3,#0x1c]
;;;1316 rINTMSK &= ~(BIT_AC97_NFLASH);
000bf8 e1a02003 MOV r2,r3
000bfc e5922008 LDR r2,[r2,#8]
000c00 e3c22740 BIC r2,r2,#0x1000000
000c04 e5832008 STR r2,[r3,#8]
;;;1317 }
000c08 e8bd100f LDMFD sp!,{r0-r3,r12}
000c0c e25ef004 SUBS pc,lr,#4
ENDP
AC97_PCMout_INT PROC
;;;890 void AC97_PCMout_INT(U32 PCM_Size)
;;;891 {
000c10 e92d4010 STMFD sp!,{r4,lr}
000c14 e1a04000 MOV r4,r0
;;;892 //Record AC97_BUF initialize
;;;893 Rec_AC97_BUF = (U32 *)(DOWN_BUF);
000c18 e3a00544 MOV r0,#0x11000000
000c1c e59f111c LDR r1,|L1.3392|
000c20 e5810000 STR r0,[r1,#0] ; Rec_AC97_BUF
;;;894 Play_AC97_BUF = (Rec_AC97_BUF + 0x30);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -