📄 i2s_codec.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\i2s_codec.o --depend=.\Obj\i2s_codec.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\source\i2s_codec.c]
THUMB
AREA ||i.AudioFile_Init||, CODE, READONLY, ALIGN=2
AudioFile_Init PROC
;;;875 *******************************************************************************/
;;;876 u32 AudioFile_Init(void)
000000 b510 PUSH {r4,lr}
;;;877 {
;;;878 u32 err = 0;
;;;879
;;;880 /* Initialize the media support */
;;;881 err = Media_Init();
000002 f7fffffe BL Media_Init
;;;882
;;;883 /* Check if Memory initialization is OK */
;;;884 if (err != 0)
000006 b108 CBZ r0,|L1.12|
;;;885 {
;;;886 return 1;
000008 2001 MOVS r0,#1
;;;887 }
;;;888
;;;889 /* Read a Byte buffer and store it in the Header table*/
;;;890 Media_BufferRead(AudioFileHeader, AudioFileAddress, HEADER_SIZE);
;;;891
;;;892 /* Read and check the audio file Header */
;;;893 WaveFileStatus = I2S_CODEC_WaveParsing(AudioFileHeader);
;;;894
;;;895 /* Check if the selected file is a correct wave file */
;;;896 if(WaveFileStatus == Valid_WAVE_File)
;;;897 {
;;;898 /* Read and set the audio data length (/!\ data are counted as BYTES /!\) */
;;;899 AudioDataLength = WAVE_Format.DataSize ;
;;;900
;;;901 /* Read and set the audio frequency */
;;;902 i2saudiofreq = (u16)WAVE_Format.SampleRate;
;;;903
;;;904 /* Return the audio file length */
;;;905 return AudioDataLength;
;;;906 }
;;;907 else /* Wrong wave file */
;;;908 {
;;;909 return 2;
;;;910 }
;;;911 }
00000a bd10 POP {r4,pc}
|L1.12|
00000c 4c0a LDR r4,|L1.56|
00000e 2264 MOVS r2,#0x64 ;890
000010 68a1 LDR r1,[r4,#8] ;890 ; AudioFileAddress
000012 480a LDR r0,|L1.60|
000014 f7fffffe BL Media_BufferRead
000018 4808 LDR r0,|L1.60|
00001a f7fffffe BL I2S_CODEC_WaveParsing
00001e 70a0 STRB r0,[r4,#2] ;893
000020 78a0 LDRB r0,[r4,#2] ;896 ; WaveFileStatus
000022 b930 CBNZ r0,|L1.50|
000024 4905 LDR r1,|L1.60|
000026 3164 ADDS r1,r1,#0x64 ;899
000028 6948 LDR r0,[r1,#0x14] ;899 ; WAVE_Format
00002a 60e0 STR r0,[r4,#0xc] ;902 ; AudioDataLength
00002c 6889 LDR r1,[r1,#8] ;902 ; WAVE_Format
00002e 80a1 STRH r1,[r4,#4] ;902
000030 bd10 POP {r4,pc}
|L1.50|
000032 2002 MOVS r0,#2 ;909
000034 bd10 POP {r4,pc}
;;;912
ENDP
000036 0000 DCW 0x0000
|L1.56|
DCD ||.data||
|L1.60|
DCD ||.bss||
AREA ||i.CODEC_Config||, CODE, READONLY, ALIGN=2
CODEC_Config PROC
;;;1050 *******************************************************************************/
;;;1051 u32 CODEC_Config(u16 OutputDevice, u16 I2S_Standard, u16 I2S_MCLKOutput, u8 Volume)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;1052 {
;;;1053 u32 Standard =0, counter = 0, PLLMode = 0;
000004 2500 MOVS r5,#0
000006 4607 MOV r7,r0 ;1052
000008 460c MOV r4,r1 ;1052
00000a 4690 MOV r8,r2 ;1052
00000c 469a MOV r10,r3 ;1052
00000e 462e MOV r6,r5
;;;1054
;;;1055 /* Command the sending of dummy data */
;;;1056 ResetVar_SendDummyData();
000010 f7fffffe BL ResetVar_SendDummyData
;;;1057
;;;1058 /* Reset the Codec Registers */
;;;1059 I2S_CODEC_Reset();
000014 f7fffffe BL I2S_CODEC_Reset
;;;1060
;;;1061 /* Determine the I2S standard used */
;;;1062 switch (I2S_Standard)
000018 b11c CBZ r4,|L2.34|
00001a 2c10 CMP r4,#0x10
00001c d103 BNE |L2.38|
;;;1063 {
;;;1064 case I2S_Standard_Phillips: Standard = 0x03; break;
;;;1065 case I2S_Standard_MSB: Standard = 0x02; break;
00001e 2402 MOVS r4,#2
000020 e002 B |L2.40|
|L2.34|
000022 2403 MOVS r4,#3 ;1064
000024 e000 B |L2.40|
|L2.38|
;;;1066 default : Standard = 0x01; break;
000026 2401 MOVS r4,#1
|L2.40|
;;;1067 }
;;;1068
;;;1069 /* HEADPHONE codec configuration */
;;;1070 if ((OutputDevice & OutputDevice_HEADPHONE) != 0)
;;;1071 {
;;;1072 /* PLL Slave SD/WS reference mode ----------------------*/
;;;1073 if (I2S_MCLKOutput == I2S_MCLKOutput_Disable)
;;;1074 {
;;;1075 /* set the PLLMode variable */
;;;1076 PLLMode = 0x1;
;;;1077
;;;1078 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with PLL */
;;;1079 counter += CODEC_WriteRegister(0x04, (Standard | 0x20));
;;;1080 /* MCKI input frequency = 256.Fs */
;;;1081 counter += CODEC_WriteRegister(0x05, 0x03);
;;;1082 /* VCOM Power up (PMVCM bit)*/
;;;1083 counter += CODEC_WriteRegister(0x00, 0x40);
;;;1084 /* Enable PLL*/
;;;1085 counter += CODEC_WriteRegister(0x01, 0x01);
;;;1086 }
;;;1087 /* Ext Slave mode with no PLL --------------------------*/
;;;1088 else
;;;1089 {
;;;1090 /* Reset the PLL mode variable */
;;;1091 PLLMode = 0;
;;;1092
;;;1093 /* Phillips(0x03)/MSB(0x02)/LSB(0x01) mode with no PLL */
;;;1094 counter += CODEC_WriteRegister(0x04, Standard);
;;;1095 /* MCKI input frequency = 256.Fs */
;;;1096 counter += CODEC_WriteRegister(0x05, 0x00);
;;;1097 /* VCOM Power up (PMVCM bit)*/
;;;1098 counter += CODEC_WriteRegister(0x00, 0x40);
;;;1099 }
;;;1100
;;;1101 /* Command the sending of dummy data */
;;;1102 SetVar_SendDummyData();
;;;1103
;;;1104 /* Enable the I2S2 TXE Interrupt => Generate the clocks*/
;;;1105 SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, ENABLE);
000028 f8df91e0 LDR r9,|L2.524|
00002c 07b8 LSLS r0,r7,#30 ;1070
00002e d574 BPL |L2.282|
000030 f1b80f00 CMP r8,#0 ;1073
000034 d113 BNE |L2.94|
000036 2601 MOVS r6,#1 ;1076
000038 f0440120 ORR r1,r4,#0x20 ;1079
00003c 2004 MOVS r0,#4 ;1079
00003e f7fffffe BL CODEC_WriteRegister
000042 4605 MOV r5,r0 ;1079
000044 2103 MOVS r1,#3 ;1081
000046 2005 MOVS r0,#5 ;1081
000048 f7fffffe BL CODEC_WriteRegister
00004c 4405 ADD r5,r5,r0 ;1081
00004e 2140 MOVS r1,#0x40 ;1083
000050 2000 MOVS r0,#0 ;1083
000052 f7fffffe BL CODEC_WriteRegister
000056 4405 ADD r5,r5,r0 ;1083
000058 2101 MOVS r1,#1 ;1085
00005a 4608 MOV r0,r1 ;1085
00005c e00b B |L2.118|
|L2.94|
00005e 4621 MOV r1,r4 ;1094
000060 2004 MOVS r0,#4 ;1094
000062 f7fffffe BL CODEC_WriteRegister
000066 4605 MOV r5,r0 ;1094
000068 2100 MOVS r1,#0 ;1096
00006a 2005 MOVS r0,#5 ;1096
00006c f7fffffe BL CODEC_WriteRegister
000070 4405 ADD r5,r5,r0 ;1096
000072 2140 MOVS r1,#0x40 ;1098
000074 2000 MOVS r0,#0 ;1098
|L2.118|
000076 f7fffffe BL CODEC_WriteRegister
00007a 4405 ADD r5,r5,r0 ;1098
00007c f7fffffe BL SetVar_SendDummyData
000080 2201 MOVS r2,#1
000082 2171 MOVS r1,#0x71
000084 4648 MOV r0,r9
000086 f7fffffe BL SPI_I2S_ITConfig
;;;1106
;;;1107 /* Extra Configuration (of the ALC) */
;;;1108 counter += CODEC_WriteRegister(0x06, 0x3C );
00008a 213c MOVS r1,#0x3c
00008c 2006 MOVS r0,#6
00008e f7fffffe BL CODEC_WriteRegister
000092 4405 ADD r5,r5,r0
;;;1109 counter += CODEC_WriteRegister(0x08, 0xE1 );
000094 21e1 MOVS r1,#0xe1
000096 2008 MOVS r0,#8
000098 f7fffffe BL CODEC_WriteRegister
00009c 4405 ADD r5,r5,r0
;;;1110 counter += CODEC_WriteRegister(0x0B, 0x00 );
00009e 2100 MOVS r1,#0
0000a0 200b MOVS r0,#0xb
0000a2 f7fffffe BL CODEC_WriteRegister
0000a6 4405 ADD r5,r5,r0
;;;1111 counter += CODEC_WriteRegister(0x07, 0x20 );
0000a8 2120 MOVS r1,#0x20
0000aa 2007 MOVS r0,#7
0000ac f7fffffe BL CODEC_WriteRegister
0000b0 4405 ADD r5,r5,r0
;;;1112 counter += CODEC_WriteRegister(0x09, 0xC1 );
0000b2 21c1 MOVS r1,#0xc1
0000b4 2009 MOVS r0,#9
0000b6 f7fffffe BL CODEC_WriteRegister
0000ba 4405 ADD r5,r5,r0
;;;1113 counter += CODEC_WriteRegister(0x0C, 0xC1 );
0000bc 21c1 MOVS r1,#0xc1
0000be 200c MOVS r0,#0xc
0000c0 f7fffffe BL CODEC_WriteRegister
0000c4 4405 ADD r5,r5,r0
;;;1114
;;;1115 /* Uncomment these lines and set the correct filters values to use the
;;;1116 codec digital filters (for more details refer to the codec datasheet) */
;;;1117 // /* Filter 1 programming as High Pass filter (Fc=500Hz, Fs=8KHz, K=20, A=1, B=1) */
;;;1118 // counter += CODEC_WriteRegister(0x1C, 0x01);
;;;1119 // counter += CODEC_WriteRegister(0x1D, 0x80);
;;;1120 // counter += CODEC_WriteRegister(0x1E, 0xA0);
;;;1121 // counter += CODEC_WriteRegister(0x1F, 0x0B);
;;;1122
;;;1123 // /* Filter 3 programming as Low Pass filter (Fc=20KHz, Fs=8KHz, K=40, A=1, B=1) */
;;;1124 // counter += CODEC_WriteRegister(0x1C, 0x01);
;;;1125 // counter += CODEC_WriteRegister(0x1D, 0x00);
;;;1126 // counter += CODEC_WriteRegister(0x1E, 0x01);
;;;1127 // counter += CODEC_WriteRegister(0x1F, 0x01);
;;;1128
;;;1129 // /* Equilizer programming BP filter (Fc1=20Hz, Fc2=2.5KHz, Fs=44.1KHz, K=40, A=?, B=?, C=?) */
;;;1130 // counter += CODEC_WriteRegister(0x16, 0x00);
;;;1131 // counter += CODEC_WriteRegister(0x17, 0x75);
;;;1132 // counter += CODEC_WriteRegister(0x18, 0x00);
;;;1133 // counter += CODEC_WriteRegister(0x19, 0x01);
;;;1134 // counter += CODEC_WriteRegister(0x1A, 0x00);
;;;1135 // counter += CODEC_WriteRegister(0x1B, 0x51);
;;;1136
;;;1137 /* MCKI is 256.Fs with no PLL */
;;;1138 counter += CODEC_WriteRegister(0x05, 0x00 );
0000c6 2100 MOVS r1,#0
0000c8 2005 MOVS r0,#5
0000ca f7fffffe BL CODEC_WriteRegister
0000ce 4405 ADD r5,r5,r0
;;;1139 /* Switch control from DAC to Headphone */
;;;1140 counter += CODEC_WriteRegister(0x0F, 0x09 );
0000d0 2109 MOVS r1,#9
0000d2 200f MOVS r0,#0xf
0000d4 f7fffffe BL CODEC_WriteRegister
0000d8 4405 ADD r5,r5,r0
;;;1141 /* Bass Boost and Demphasis enable */
;;;1142 counter += CODEC_WriteRegister(0x0E, 0x18 );
0000da 2118 MOVS r1,#0x18
0000dc 200e MOVS r0,#0xe
0000de f7fffffe BL CODEC_WriteRegister
0000e2 4405 ADD r5,r5,r0
;;;1143 /* Left Channel Digital Volume control */
;;;1144 counter += CODEC_WriteRegister(0x0A, Volume);
0000e4 4651 MOV r1,r10
0000e6 200a MOVS r0,#0xa
0000e8 f7fffffe BL CODEC_WriteRegister
0000ec 4405 ADD r5,r5,r0
;;;1145 /* Right Channel Digital Volume control */
;;;1146 counter += CODEC_WriteRegister(0x0D, Volume);
0000ee 4651 MOV r1,r10
0000f0 200d MOVS r0,#0xd
0000f2 f7fffffe BL CODEC_WriteRegister
0000f6 4405 ADD r5,r5,r0
;;;1147 /* Power up MIN and DAC (PMMIN and PMDAC bits)*/
;;;1148 counter += CODEC_WriteRegister(0x00, 0x74);
0000f8 2174 MOVS r1,#0x74
0000fa 2000 MOVS r0,#0
0000fc f7fffffe BL CODEC_WriteRegister
000100 4405 ADD r5,r5,r0
;;;1149 /* Enable Slave mode and Left/Right HP lines*/
;;;1150 counter += CODEC_WriteRegister(0x01, (0x30 | PLLMode));
000102 f0460130 ORR r1,r6,#0x30
000106 2001 MOVS r0,#1
000108 f7fffffe BL CODEC_WriteRegister
00010c 4405 ADD r5,r5,r0
;;;1151 /* Exit HP mute mode */
;;;1152 counter += CODEC_WriteRegister(0x01, (0x70 | PLLMode));
00010e f0460170 ORR r1,r6,#0x70
000112 2001 MOVS r0,#1
000114 f7fffffe BL CODEC_WriteRegister
000118 4405 ADD r5,r5,r0
|L2.282|
;;;1153 }
;;;1154
;;;1155 /* SPEAKER codec configuration */
;;;1156 if ((OutputDevice & OutputDevice_SPEAKER) != 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -