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

📄 i2s_codec.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;1217   
;;;1218     /* Return the counter value */
;;;1219   	return counter;
000206  4628              MOV      r0,r5
;;;1220   }
000208  e8bde8bd          POP      {r4-r10,pc}
;;;1221   
                          ENDP

                  |L6.524|
00020c  40003800          DCD      0x40003800

                          AREA ||i.ReadUnit||, CODE, READONLY, ALIGN=2

                  ReadUnit PROC
;;;1387   static u32 ReadUnit(u8 NbrOfBytes, Endianness BytesFormat)
;;;1388   {
000000  b5f0              PUSH     {r4-r7,lr}
000002  4602              MOV      r2,r0
;;;1389     u32 index = 0;
000004  2300              MOVS     r3,#0
;;;1390     u32 Temp = 0;
000006  4c0e              LDR      r4,|L7.64|
000008  4d0e              LDR      r5,|L7.68|
00000a  4618              MOV      r0,r3
;;;1391   
;;;1392     if(BytesFormat == LittleEndian)
00000c  b961              CBNZ     r1,|L7.40|
00000e  e008              B        |L7.34|
                  |L7.16|
;;;1393     {
;;;1394       for(index = 0; index < NbrOfBytes; index++)
;;;1395       {
;;;1396         Temp |= AudioFileHeader[HeaderTabIndex++] << (index * 8);
000010  7829              LDRB     r1,[r5,#0]  ; HeaderTabIndex
000012  4606              MOV      r6,r0
000014  5c60              LDRB     r0,[r4,r1]
000016  00df              LSLS     r7,r3,#3
000018  40b8              LSLS     r0,r0,r7
00001a  1c49              ADDS     r1,r1,#1
00001c  4330              ORRS     r0,r0,r6
00001e  7029              STRB     r1,[r5,#0]  ; HeaderTabIndex
000020  1c5b              ADDS     r3,r3,#1              ;1394
                  |L7.34|
000022  4293              CMP      r3,r2                 ;1394
000024  d3f4              BCC      |L7.16|
                  |L7.38|
;;;1397       }
;;;1398     }
;;;1399     else
;;;1400     {
;;;1401       for(index = NbrOfBytes; index != 0; index--)
;;;1402       {
;;;1403         Temp |= AudioFileHeader[HeaderTabIndex++] << ((index-1) * 8);
;;;1404       }
;;;1405     }
;;;1406   
;;;1407     return Temp;
;;;1408   }
000026  bdf0              POP      {r4-r7,pc}
                  |L7.40|
000028  2a00              CMP      r2,#0                 ;1401
00002a  d0fc              BEQ      |L7.38|
00002c  7829              LDRB     r1,[r5,#0]            ;1403  ; HeaderTabIndex
00002e  1e53              SUBS     r3,r2,#1              ;1403
000030  00de              LSLS     r6,r3,#3              ;1403
000032  5c63              LDRB     r3,[r4,r1]            ;1403
000034  40b3              LSLS     r3,r3,r6              ;1403
000036  1c49              ADDS     r1,r1,#1              ;1403
000038  4318              ORRS     r0,r0,r3              ;1403
00003a  7029              STRB     r1,[r5,#0]            ;1403  ; HeaderTabIndex
00003c  1e52              SUBS     r2,r2,#1              ;1401
00003e  e7f3              B        |L7.40|
;;;1409   
                          ENDP

                  |L7.64|
000040  00000000          DCD      ||.bss||
                  |L7.68|
000044  00000000          DCD      ||.data||

                          AREA ||i.I2S_CODEC_WaveParsing||, CODE, READONLY, ALIGN=2

                  I2S_CODEC_WaveParsing PROC
;;;546    ErrorCode I2S_CODEC_WaveParsing(u8* HeaderTab)
;;;547    {
000000  b570              PUSH     {r4-r6,lr}
;;;548      u32 Temp = 0x00;
;;;549      u32 ExtraFormatBytes = 0; 
;;;550      
;;;551      /* Initialize the HeaderTabIndex variable */
;;;552      HeaderTabIndex = 0;
000002  4c4f              LDR      r4,|L8.320|
000004  2500              MOVS     r5,#0                 ;549
000006  7025              STRB     r5,[r4,#0]  ; HeaderTabIndex
;;;553    
;;;554      /* Read chunkID, must be 'RIFF'	----------------------------------------------*/
;;;555      Temp = ReadUnit(4, BigEndian);
000008  2101              MOVS     r1,#1
00000a  2004              MOVS     r0,#4
00000c  f7fff7ff          BL       ReadUnit
;;;556      if(Temp != ChunkID)
000010  494c              LDR      r1,|L8.324|
000012  4288              CMP      r0,r1
000014  d001              BEQ      |L8.26|
;;;557      {
;;;558        return(Unvalid_RIFF_ID);
000016  2001              MOVS     r0,#1
;;;559      }
;;;560      /* Read the file length ----------------------------------------------------*/
;;;561      WAVE_Format.RIFFchunksize = ReadUnit(4, LittleEndian);
;;;562    	
;;;563      /* Read the file format, must be 'WAVE' ------------------------------------*/
;;;564      Temp = ReadUnit(4, BigEndian);
;;;565      if(Temp != FileFormat)
;;;566      {
;;;567        return(Unvalid_WAVE_Format);
;;;568      }
;;;569      /* Read the format chunk, must be 'fmt ' -----------------------------------*/
;;;570      Temp = ReadUnit(4, BigEndian);
;;;571      if(Temp != FormatID)
;;;572      {
;;;573        return(Unvalid_FormatChunk_ID);
;;;574      }
;;;575      /* Read the length of the 'fmt' data, must be 0x10 -------------------------*/
;;;576      Temp = ReadUnit(4, LittleEndian);
;;;577      if(Temp != 0x10)
;;;578      {
;;;579        ExtraFormatBytes = 1;
;;;580      }
;;;581      /* Read the audio format, must be 0x01 (PCM) -------------------------------*/
;;;582      WAVE_Format.FormatTag = ReadUnit(2, LittleEndian);
;;;583      if(WAVE_Format.FormatTag != WAVE_FORMAT_PCM)
;;;584      {
;;;585        return(Unsupporetd_FormatTag);	
;;;586      }	
;;;587      /* Read the number of channels: 0x02->Stereo 0x01->Mono --------------------*/
;;;588      WAVE_Format.NumChannels = ReadUnit(2, LittleEndian);
;;;589    
;;;590      /* Read the Sample Rate ----------------------------------------------------*/
;;;591      WAVE_Format.SampleRate = ReadUnit(4, LittleEndian);
;;;592    
;;;593      /* Update the I2S_AudioFreq value according to the .WAV file Sample Rate */
;;;594      switch(WAVE_Format.SampleRate)
;;;595      {
;;;596        case SampleRate_8000 : i2saudiofreq = I2S_AudioFreq_8k;  break; 
;;;597        case SampleRate_16000: i2saudiofreq = I2S_AudioFreq_16k; break; 
;;;598        case SampleRate_22050: i2saudiofreq = I2S_AudioFreq_22k; break; 	
;;;599        case SampleRate_44100: i2saudiofreq = I2S_AudioFreq_44k; break;  		
;;;600        case SampleRate_48000: i2saudiofreq = I2S_AudioFreq_48k; break;  		
;;;601        default: return(Unsupporetd_Sample_Rate);
;;;602      }	
;;;603      /* Read the Byte Rate ------------------------------------------------------*/
;;;604      WAVE_Format.ByteRate = ReadUnit(4, LittleEndian);
;;;605    	
;;;606      /* Read the block alignment ------------------------------------------------*/
;;;607      WAVE_Format.BlockAlign = ReadUnit(2, LittleEndian);
;;;608    	
;;;609      /* Read the number of bits per sample --------------------------------------*/
;;;610      WAVE_Format.BitsPerSample = ReadUnit(2, LittleEndian);
;;;611      if(WAVE_Format.BitsPerSample != Bits_Per_Sample_16)
;;;612      {
;;;613        return(Unsupporetd_Bits_Per_Sample);
;;;614      }
;;;615      /* If there are Extra format bytes, these bytes will be defined in "Fact Chunk" */
;;;616      if(ExtraFormatBytes == 1)
;;;617      {
;;;618        /* Read th Extra format bytes, must be 0x00 ------------------------------*/
;;;619        Temp = ReadUnit(2, LittleEndian);
;;;620        if(Temp != 0x00)
;;;621        {
;;;622          return(Unsupporetd_ExtraFormatBytes);
;;;623        }
;;;624        /* Read the Fact chunk, must be 'fact' -----------------------------------*/
;;;625        Temp = ReadUnit(4, BigEndian);
;;;626        if(Temp != FactID)
;;;627        {
;;;628          return(Unvalid_FactChunk_ID);
;;;629        }
;;;630        /* Read Fact chunk data Size ---------------------------------------------*/
;;;631        Temp = ReadUnit(4, LittleEndian);
;;;632    
;;;633        /* Set the index to start reading just after the header end */
;;;634        HeaderTabIndex += Temp;
;;;635      }
;;;636      /* Read the Data chunk, must be 'data' -------------------------------------*/
;;;637      Temp = ReadUnit(4, BigEndian);
;;;638      if(Temp != DataID)
;;;639      {
;;;640        return(Unvalid_DataChunk_ID);
;;;641      }
;;;642      /* Read the number of sample data ------------------------------------------*/
;;;643      WAVE_Format.DataSize = ReadUnit(4, LittleEndian);
;;;644    
;;;645      /* Set the data pointer at the beginning of the effective audio data */
;;;646    	DataStartAddr += HeaderTabIndex;
;;;647      
;;;648      return(Valid_WAVE_File);	
;;;649    }
000018  bd70              POP      {r4-r6,pc}
                  |L8.26|
00001a  2100              MOVS     r1,#0                 ;561
00001c  2004              MOVS     r0,#4                 ;561
00001e  f7fff7ff          BL       ReadUnit
000022  4e49              LDR      r6,|L8.328|
000024  2101              MOVS     r1,#1                 ;564
000026  6030              STR      r0,[r6,#0]            ;564  ; WAVE_Format
000028  2004              MOVS     r0,#4                 ;564
00002a  f7fff7ff          BL       ReadUnit
00002e  4947              LDR      r1,|L8.332|
000030  4288              CMP      r0,r1                 ;565
000032  d001              BEQ      |L8.56|
000034  2002              MOVS     r0,#2                 ;567
000036  bd70              POP      {r4-r6,pc}
                  |L8.56|
000038  2101              MOVS     r1,#1                 ;570
00003a  2004              MOVS     r0,#4                 ;570
00003c  f7fff7ff          BL       ReadUnit
000040  4943              LDR      r1,|L8.336|
000042  4288              CMP      r0,r1                 ;571
000044  d001              BEQ      |L8.74|
000046  2003              MOVS     r0,#3                 ;573
000048  bd70              POP      {r4-r6,pc}
                  |L8.74|
00004a  2100              MOVS     r1,#0                 ;576
00004c  2004              MOVS     r0,#4                 ;576
00004e  f7fff7ff          BL       ReadUnit
000052  2810              CMP      r0,#0x10              ;577
000054  d000              BEQ      |L8.88|
000056  2501              MOVS     r5,#1                 ;579
                  |L8.88|
000058  2100              MOVS     r1,#0                 ;582
00005a  2002              MOVS     r0,#2                 ;582
00005c  f7fff7ff          BL       ReadUnit
000060  b280              UXTH     r0,r0                 ;582
000062  80b0              STRH     r0,[r6,#4]            ;582  ; WAVE_Format
000064  2801              CMP      r0,#1                 ;583
000066  d001              BEQ      |L8.108|
000068  2004              MOVS     r0,#4                 ;585
00006a  bd70              POP      {r4-r6,pc}
                  |L8.108|
00006c  2100              MOVS     r1,#0                 ;588
00006e  2002              MOVS     r0,#2                 ;588
000070  f7fff7ff          BL       ReadUnit
000074  80f0              STRH     r0,[r6,#6]            ;588  ; WAVE_Format
000076  2100              MOVS     r1,#0                 ;591
000078  2004              MOVS     r0,#4                 ;591
00007a  f7fff7ff          BL       ReadUnit
00007e  f245f245          MOV      r1,#0x5622            ;594
000082  1a42              SUBS     r2,r0,r1              ;594
000084  60b0              STR      r0,[r6,#8]            ;594  ; WAVE_Format
000086  4288              CMP      r0,r1                 ;594
000088  d007              BEQ      |L8.154|
00008a  dc08              BGT      |L8.158|
00008c  f44ff44f          MOV      r1,#0x1f40            ;594
000090  4288              CMP      r0,r1                 ;594
000092  d002              BEQ      |L8.154|
000094  0049              LSLS     r1,r1,#1              ;594
000096  4288              CMP      r0,r1                 ;594
000098  d123              BNE      |L8.226|
                  |L8.154|
00009a  80a1              STRH     r1,[r4,#4]            ;596  ; i2saudiofreq
00009c  e00a              B        |L8.180|
                  |L8.158|
00009e  f5a2f5a2          SUB      r2,r2,#0x5600         ;594
0000a2  3a22              SUBS     r2,r2,#0x22           ;594
0000a4  d01a              BEQ      |L8.220|
0000a6  f5a2f5a2          SUB      r2,r2,#0xf00          ;594
0000aa  3a3c              SUBS     r2,r2,#0x3c           ;594
0000ac  d119              BNE      |L8.226|
0000ae  f64bf64b          MOV      r0,#0xbb80            ;600
                  |L8.178|
0000b2  80a0              STRH     r0,[r4,#4]            ;599  ; i2saudiofreq
                  |L8.180|
0000b4  2100              MOVS     r1,#0                 ;604
0000b6  2004              MOVS     r0,#4                 ;604
0000b8  f7fff7ff          BL       ReadUnit
0000bc  60f0              STR      r0,[r6,#0xc]          ;607  ; WAVE_Format
0000be  2100              MOVS     r1,#0                 ;607
0000c0  2002              MOVS     r0,#2                 ;607
0000c2  f7fff7ff          BL       ReadUnit
0000c6  8230              STRH     r0,[r6,#0x10]         ;607  ; WAVE_Format
0000c8  2100              MOVS     r1,#0                 ;610
0000ca  2002              MOVS     r0,#2                 ;610
0000cc  f7fff7ff          BL       ReadUnit
0000d0  b280              UXTH     r0,r0                 ;610
0000d2  8270              STRH     r0,[r6,#0x12]         ;610  ; WAVE_Format
0000d4  2810              CMP      r0,#0x10              ;611
0000d6  d006              BEQ      |L8.230|
0000d8  2007              MOVS     r0,#7                 ;613
0000da  bd70              POP      {r4-r6,pc}
                  |L8.220|
0000dc  f64af64a          MOV      r0,#0xac44            ;599
0000e0  e7e7              B        |L8.178|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -