⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2s_codec.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -