📄 dac_codec.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Int_Flash\dac_codec.o --depend=.\Int_Flash\dac_codec.d --device=DARMSTM --apcs=interwork -O3 -I..\include -I..\..\..\..\..\INC\ST\STM32F10x\USB -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB --omf_browse=.\Int_Flash\dac_codec.crf ..\source\dac_codec.c]
THUMB
AREA ||i.ReadUnit||, CODE, READONLY, ALIGN=2
ReadUnit PROC
;;;874 static u32 ReadUnit(u8 NbrOfBytes, Endianness BytesFormat)
;;;875 {
000000 b5f0 PUSH {r4-r7,lr}
000002 4602 MOV r2,r0
;;;876 u32 index = 0;
000004 2300 MOVS r3,#0
;;;877 u32 Temp = 0;
000006 4c0e LDR r4,|L1.64|
000008 4d0e LDR r5,|L1.68|
00000a 4618 MOV r0,r3
;;;878
;;;879 if(BytesFormat == LittleEndian)
00000c b961 CBNZ r1,|L1.40|
00000e e008 B |L1.34|
|L1.16|
;;;880 {
;;;881 for(index = 0; index < NbrOfBytes; index++)
;;;882 {
;;;883 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 ;881
|L1.34|
000022 4293 CMP r3,r2 ;881
000024 d3f4 BCC |L1.16|
|L1.38|
;;;884 }
;;;885 }
;;;886 else
;;;887 {
;;;888 for(index = NbrOfBytes; index != 0; index--)
;;;889 {
;;;890 Temp |= AudioFileHeader[HeaderTabIndex++] << ((index-1) * 8);
;;;891 }
;;;892 }
;;;893
;;;894 return Temp;
;;;895 }
000026 bdf0 POP {r4-r7,pc}
|L1.40|
000028 2a00 CMP r2,#0 ;888
00002a d0fc BEQ |L1.38|
00002c 7829 LDRB r1,[r5,#0] ;890 ; HeaderTabIndex
00002e 1e53 SUBS r3,r2,#1 ;890
000030 00de LSLS r6,r3,#3 ;890
000032 5c63 LDRB r3,[r4,r1] ;890
000034 40b3 LSLS r3,r3,r6 ;890
000036 1c49 ADDS r1,r1,#1 ;890
000038 4318 ORRS r0,r0,r3 ;890
00003a 7029 STRB r1,[r5,#0] ;890 ; HeaderTabIndex
00003c 1e52 SUBS r2,r2,#1 ;888
00003e e7f3 B |L1.40|
;;;896
ENDP
|L1.64|
000040 00000000 DCD ||.bss||
|L1.68|
000044 00000000 DCD ||.data||
AREA ||i.DAC_CODEC_WaveParsing||, CODE, READONLY, ALIGN=2
DAC_CODEC_WaveParsing PROC
;;;407 ErrorCode DAC_CODEC_WaveParsing(u8* HeaderTab)
;;;408 {
000000 b570 PUSH {r4-r6,lr}
;;;409 u32 Temp = 0x00;
;;;410 u32 ExtraFormatBytes = 0;
;;;411
;;;412 /* Initialize the HeaderTabIndex variable */
;;;413 HeaderTabIndex = 0;
000002 4c4e LDR r4,|L2.316|
000004 2500 MOVS r5,#0 ;410
000006 7025 STRB r5,[r4,#0] ; HeaderTabIndex
;;;414
;;;415 /* Read chunkID, must be 'RIFF' ----------------------------------------------*/
;;;416 Temp = ReadUnit(4, BigEndian);
000008 2101 MOVS r1,#1
00000a 2004 MOVS r0,#4
00000c f7fffffe BL ReadUnit
;;;417 if(Temp != ChunkID)
000010 494b LDR r1,|L2.320|
000012 4288 CMP r0,r1
000014 d001 BEQ |L2.26|
;;;418 {
;;;419 return(Unvalid_RIFF_ID);
000016 2001 MOVS r0,#1
;;;420 }
;;;421 /* Read the file length ----------------------------------------------------*/
;;;422 WAVE_Format.RIFFchunksize = ReadUnit(4, LittleEndian);
;;;423
;;;424 /* Read the file format, must be 'WAVE' ------------------------------------*/
;;;425 Temp = ReadUnit(4, BigEndian);
;;;426 if(Temp != FileFormat)
;;;427 {
;;;428 return(Unvalid_WAVE_Format);
;;;429 }
;;;430 /* Read the format chunk, must be 'fmt ' -----------------------------------*/
;;;431 Temp = ReadUnit(4, BigEndian);
;;;432 if(Temp != FormatID)
;;;433 {
;;;434 return(Unvalid_FormatChunk_ID);
;;;435 }
;;;436 /* Read the length of the 'fmt' data, must be 0x10 -------------------------*/
;;;437 Temp = ReadUnit(4, LittleEndian);
;;;438 if(Temp != 0x10)
;;;439 {
;;;440 ExtraFormatBytes = 1;
;;;441 }
;;;442 /* Read the audio format, must be 0x01 (PCM) -------------------------------*/
;;;443 WAVE_Format.FormatTag = ReadUnit(2, LittleEndian);
;;;444 if(WAVE_Format.FormatTag != WAVE_FORMAT_PCM)
;;;445 {
;;;446 return(Unsupporetd_FormatTag);
;;;447 }
;;;448 /* Read the number of channels: 0x02->Stereo 0x01->Mono --------------------*/
;;;449 WAVE_Format.NumChannels = ReadUnit(2, LittleEndian);
;;;450
;;;451 /* Read the Sample Rate ----------------------------------------------------*/
;;;452 WAVE_Format.SampleRate = ReadUnit(4, LittleEndian);
;;;453
;;;454 /* Update the OCA value according to the .WAV file Sample Rate */
;;;455 switch(WAVE_Format.SampleRate)
;;;456 {
;;;457 case SampleRate_8000 : TIM2ARRValue = 9000; break; /* 8KHz = 72MHz / 9000 */
;;;458 case SampleRate_11025: TIM2ARRValue = 6531; break; /* 11.025KHz = 72MHz / 6531 */
;;;459 case SampleRate_22050: TIM2ARRValue = 3265; break; /* 22.05KHz = 72MHz / 3265 */
;;;460 case SampleRate_44100: TIM2ARRValue = 1633; break; /* 44.1KHz = 72MHz / 1633 */
;;;461 default: return(Unsupporetd_Sample_Rate);
;;;462 }
;;;463
;;;464 /* Read the Byte Rate ------------------------------------------------------*/
;;;465 WAVE_Format.ByteRate = ReadUnit(4, LittleEndian);
;;;466
;;;467 /* Read the block alignment ------------------------------------------------*/
;;;468 WAVE_Format.BlockAlign = ReadUnit(2, LittleEndian);
;;;469
;;;470 /* Read the number of bits per sample --------------------------------------*/
;;;471 WAVE_Format.BitsPerSample = ReadUnit(2, LittleEndian);
;;;472 if(WAVE_Format.BitsPerSample != Bits_Per_Sample_16)
;;;473 {
;;;474 return(Unsupporetd_Bits_Per_Sample);
;;;475 }
;;;476 /* If there are Extra format bytes, these bytes will be defined in "Fact Chunk" */
;;;477 if(ExtraFormatBytes == 1)
;;;478 {
;;;479 /* Read th Extra format bytes, must be 0x00 ------------------------------*/
;;;480 Temp = ReadUnit(2, LittleEndian);
;;;481 if(Temp != 0x00)
;;;482 {
;;;483 return(Unsupporetd_ExtraFormatBytes);
;;;484 }
;;;485 /* Read the Fact chunk, must be 'fact' -----------------------------------*/
;;;486 Temp = ReadUnit(4, BigEndian);
;;;487 if(Temp != FactID)
;;;488 {
;;;489 return(Unvalid_FactChunk_ID);
;;;490 }
;;;491 /* Read Fact chunk data Size ---------------------------------------------*/
;;;492 Temp = ReadUnit(4, LittleEndian);
;;;493
;;;494 /* Set the index to start reading just after the header end */
;;;495 HeaderTabIndex += Temp;
;;;496 }
;;;497 /* Read the Data chunk, must be 'data' -------------------------------------*/
;;;498 Temp = ReadUnit(4, BigEndian);
;;;499 if(Temp != DataID)
;;;500 {
;;;501 return(Unvalid_DataChunk_ID);
;;;502 }
;;;503 /* Read the number of sample data ------------------------------------------*/
;;;504 WAVE_Format.DataSize = ReadUnit(4, LittleEndian);
;;;505
;;;506 /* Set the data pointer at the beginning of the effective audio data */
;;;507 DataStartAddr += HeaderTabIndex;
;;;508
;;;509 return(Valid_WAVE_File);
;;;510 }
000018 bd70 POP {r4-r6,pc}
|L2.26|
00001a 2100 MOVS r1,#0 ;422
00001c 2004 MOVS r0,#4 ;422
00001e f7fffffe BL ReadUnit
000022 4e48 LDR r6,|L2.324|
000024 2101 MOVS r1,#1 ;425
000026 6030 STR r0,[r6,#0] ;425 ; WAVE_Format
000028 2004 MOVS r0,#4 ;425
00002a f7fffffe BL ReadUnit
00002e 4946 LDR r1,|L2.328|
000030 4288 CMP r0,r1 ;426
000032 d001 BEQ |L2.56|
000034 2002 MOVS r0,#2 ;428
000036 bd70 POP {r4-r6,pc}
|L2.56|
000038 2101 MOVS r1,#1 ;431
00003a 2004 MOVS r0,#4 ;431
00003c f7fffffe BL ReadUnit
000040 4942 LDR r1,|L2.332|
000042 4288 CMP r0,r1 ;432
000044 d001 BEQ |L2.74|
000046 2003 MOVS r0,#3 ;434
000048 bd70 POP {r4-r6,pc}
|L2.74|
00004a 2100 MOVS r1,#0 ;437
00004c 2004 MOVS r0,#4 ;437
00004e f7fffffe BL ReadUnit
000052 2810 CMP r0,#0x10 ;438
000054 d000 BEQ |L2.88|
000056 2501 MOVS r5,#1 ;440
|L2.88|
000058 2100 MOVS r1,#0 ;443
00005a 2002 MOVS r0,#2 ;443
00005c f7fffffe BL ReadUnit
000060 b280 UXTH r0,r0 ;443
000062 80b0 STRH r0,[r6,#4] ;443 ; WAVE_Format
000064 2801 CMP r0,#1 ;444
000066 d001 BEQ |L2.108|
000068 2004 MOVS r0,#4 ;446
00006a bd70 POP {r4-r6,pc}
|L2.108|
00006c 2100 MOVS r1,#0 ;449
00006e 2002 MOVS r0,#2 ;449
000070 f7fffffe BL ReadUnit
000074 80f0 STRH r0,[r6,#6] ;449 ; WAVE_Format
000076 2100 MOVS r1,#0 ;452
000078 2004 MOVS r0,#4 ;452
00007a f7fffffe BL ReadUnit
00007e 60b0 STR r0,[r6,#8] ;455 ; WAVE_Format
000080 f5b05ffa CMP r0,#0x1f40 ;455
000084 d00d BEQ |L2.162|
000086 f5b05f7a CMP r0,#0x3e80 ;455
00008a d00d BEQ |L2.168|
00008c f5a040ac SUB r0,r0,#0x5600 ;455
000090 3822 SUBS r0,r0,#0x22 ;455
000092 d020 BEQ |L2.214|
000094 f5a040ac SUB r0,r0,#0x5600 ;455
000098 3822 SUBS r0,r0,#0x22 ;455
00009a d11f BNE |L2.220|
00009c f2406061 MOV r0,#0x661 ;460
0000a0 e004 B |L2.172|
|L2.162|
0000a2 f2423028 MOV r0,#0x2328 ;457
0000a6 e001 B |L2.172|
|L2.168|
0000a8 f6411083 MOV r0,#0x1983 ;458
|L2.172|
0000ac 80e0 STRH r0,[r4,#6] ;457 ; TIM2ARRValue
0000ae 2100 MOVS r1,#0 ;465
0000b0 2004 MOVS r0,#4 ;465
0000b2 f7fffffe BL ReadUnit
0000b6 60f0 STR r0,[r6,#0xc] ;468 ; WAVE_Format
0000b8 2100 MOVS r1,#0 ;468
0000ba 2002 MOVS r0,#2 ;468
0000bc f7fffffe BL ReadUnit
0000c0 8230 STRH r0,[r6,#0x10] ;468 ; WAVE_Format
0000c2 2100 MOVS r1,#0 ;471
0000c4 2002 MOVS r0,#2 ;471
0000c6 f7fffffe BL ReadUnit
0000ca b280 UXTH r0,r0 ;471
0000cc 8270 STRH r0,[r6,#0x12] ;471 ; WAVE_Format
0000ce 2810 CMP r0,#0x10 ;472
0000d0 d006 BEQ |L2.224|
0000d2 2007 MOVS r0,#7 ;474
0000d4 bd70 POP {r4-r6,pc}
|L2.214|
0000d6 f64040c1 MOV r0,#0xcc1 ;459
0000da e7e7 B |L2.172|
|L2.220|
0000dc 2006 MOVS r0,#6 ;461
0000de bd70 POP {r4-r6,pc}
|L2.224|
0000e0 2d01 CMP r5,#1 ;477
0000e2 d116 BNE |L2.274|
0000e4 2100 MOVS r1,#0 ;480
0000e6 2002 MOVS r0,#2 ;480
0000e8 f7fffffe BL ReadUnit
0000ec b108 CBZ r0,|L2.242|
0000ee 2009 MOVS r0,#9 ;483
0000f0 bd70 POP {r4-r6,pc}
|L2.242|
0000f2 2101 MOVS r1,#1 ;486
0000f4 2004 MOVS r0,#4 ;486
0000f6 f7fffffe BL ReadUnit
0000fa 4915 LDR r1,|L2.336|
0000fc 4288 CMP r0,r1 ;487
0000fe d001 BEQ |L2.260|
000100 200a MOVS r0,#0xa ;489
000102 bd70 POP {r4-r6,pc}
|L2.260|
000104 2100 MOVS r1,#0 ;492
000106 2004 MOVS r0,#4 ;492
000108 f7fffffe BL ReadUnit
00010c 7821 LDRB r1,[r4,#0] ;495 ; HeaderTabIndex
00010e 4408 ADD r0,r0,r1 ;495
000110 7020 STRB r0,[r4,#0] ;495 ; HeaderTabIndex
|L2.274|
000112 2101 MOVS r1,#1 ;498
000114 2004 MOVS r0,#4 ;498
000116 f7fffffe BL ReadUnit
00011a 490e LDR r1,|L2.340|
00011c 4288 CMP r0,r1 ;499
00011e d001 BEQ |L2.292|
000120 2008 MOVS r0,#8 ;501
000122 bd70 POP {r4-r6,pc}
|L2.292|
000124 2100 MOVS r1,#0 ;504
000126 2004 MOVS r0,#4 ;504
000128 f7fffffe BL ReadUnit
00012c 6170 STR r0,[r6,#0x14] ;507 ; WAVE_Format
00012e 7821 LDRB r1,[r4,#0] ;507 ; HeaderTabIndex
000130 6920 LDR r0,[r4,#0x10] ;507 ; DataStartAddr
000132 4408 ADD r0,r0,r1 ;507
000134 6120 STR r0,[r4,#0x10] ;509 ; DataStartAddr
000136 2000 MOVS r0,#0 ;509
000138 bd70 POP {r4-r6,pc}
;;;511
ENDP
00013a 0000 DCW 0x0000
|L2.316|
00013c 00000000 DCD ||.data||
|L2.320|
000140 52494646 DCD 0x52494646
|L2.324|
000144 00000064 DCD ||.bss||+0x64
|L2.328|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -