📄 i2s_codec.txt
字号:
;;;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 + -