📄 dac_codec.txt
字号:
000148 57415645 DCD 0x57415645
|L2.332|
00014c 666d7420 DCD 0x666d7420
|L2.336|
000150 66616374 DCD 0x66616374
|L2.340|
000154 64617461 DCD 0x64617461
AREA ||i.Media_BufferRead||, CODE, READONLY, ALIGN=1
Media_BufferRead PROC
000000 f7ffbffe B.W SPI_FLASH_BufferRead
ENDP
AREA ||i.Media_Init||, CODE, READONLY, ALIGN=1
Media_Init PROC
000000 b510 PUSH {r4,lr}
000002 f7fffffe BL SPI_FLASH_Init
000006 2000 MOVS r0,#0
000008 bd10 POP {r4,pc}
ENDP
AREA ||i.AudioFile_Init||, CODE, READONLY, ALIGN=2
AudioFile_Init PROC
;;;725 u32 AudioFile_Init(void)
;;;726 {
000000 b510 PUSH {r4,lr}
000002 f7fffffe BL SPI_FLASH_Init
;;;727 u32 err = 0;
;;;728
;;;729 /* Initialize the media support */
;;;730 err = Media_Init();
;;;731
;;;732 /* Check if Memory initialization is OK */
;;;733 if (err != 0)
;;;734 {
;;;735 return 1;
;;;736 }
;;;737
;;;738 /* Read a Byte buffer and store it in the Header table*/
;;;739 Media_BufferRead(AudioFileHeader, AudioFileAddress, HEADER_SIZE);
000006 4c0a LDR r4,|L5.48|
000008 68a1 LDR r1,[r4,#8] ; AudioFileAddress
00000a 2264 MOVS r2,#0x64
00000c 4809 LDR r0,|L5.52|
00000e f7fffffe BL SPI_FLASH_BufferRead
;;;740
;;;741 /* Read and check the audio file Header */
;;;742 WaveFileStatus = DAC_CODEC_WaveParsing(AudioFileHeader);
000012 4808 LDR r0,|L5.52|
000014 f7fffffe BL DAC_CODEC_WaveParsing
000018 70a0 STRB r0,[r4,#2] ; WaveFileStatus
;;;743
;;;744 /* Check if the selected file is a correct wave file */
;;;745 if(WaveFileStatus == Valid_WAVE_File)
00001a 78a0 LDRB r0,[r4,#2] ; WaveFileStatus
00001c b930 CBNZ r0,|L5.44|
;;;746 {
;;;747 /* Read and set the audio data length (/!\ data are counted as BYTES /!\) */
;;;748 AudioDataLength = WAVE_Format.DataSize ;
00001e 4905 LDR r1,|L5.52|
000020 3164 ADDS r1,r1,#0x64
000022 6948 LDR r0,[r1,#0x14] ; WAVE_Format
;;;749
;;;750 /* Read and set the audio frequency */
;;;751 dacaudiofreq = (u16)WAVE_Format.SampleRate;
000024 60e0 STR r0,[r4,#0xc] ; AudioDataLength
000026 6889 LDR r1,[r1,#8] ; WAVE_Format
000028 80a1 STRH r1,[r4,#4] ; dacaudiofreq
;;;752
;;;753 /* Return the audio file length */
;;;754 return AudioDataLength;
;;;755 }
;;;756 else /* Wrong wave file */
;;;757 {
;;;758 return 2;
;;;759 }
;;;760 }
00002a bd10 POP {r4,pc}
|L5.44|
00002c 2002 MOVS r0,#2 ;758
00002e bd10 POP {r4,pc}
;;;761
ENDP
|L5.48|
000030 00000000 DCD ||.data||
|L5.52|
000034 00000000 DCD ||.bss||
AREA ||i.DAC_CODEC_Init||, CODE, READONLY, ALIGN=2
DAC_CODEC_Init PROC
;;;102 u32 DAC_CODEC_Init(u32 Address)
;;;103 {
000000 e92d43f8 PUSH {r3-r9,lr}
;;;104 u32 count = 0;
;;;105
;;;106 /* Set the audio file address */
;;;107 AudioFileAddress = (vu32) Address;
000004 4c25 LDR r4,|L6.156|
000006 60a0 STR r0,[r4,#8] ; AudioFileAddress
000008 201c MOVS r0,#0x1c
00000a f88d0000 STRB r0,[sp,#0]
00000e 2500 MOVS r5,#0
000010 f88d5001 STRB r5,[sp,#1]
000014 f88d5002 STRB r5,[sp,#2]
000018 2001 MOVS r0,#1
00001a f88d0003 STRB r0,[sp,#3]
00001e 4668 MOV r0,sp
000020 f7fffffe BL NVIC_Init
000024 2101 MOVS r1,#1
000026 200d MOVS r0,#0xd
000028 f7fffffe BL RCC_APB2PeriphClockCmd
00002c 2610 MOVS r6,#0x10
00002e f8ad6000 STRH r6,[sp,#0]
000032 2703 MOVS r7,#3
000034 f88d7002 STRB r7,[sp,#2]
000038 f88d5003 STRB r5,[sp,#3]
00003c 4669 MOV r1,sp
00003e 4818 LDR r0,|L6.160|
000040 f7fffffe BL GPIO_Init
000044 f44f587c MOV r8,#0x3f00
000048 f8ad8000 STRH r8,[sp,#0]
00004c 4d15 LDR r5,|L6.164|
00004e f88d7002 STRB r7,[sp,#2]
000052 f88d6003 STRB r6,[sp,#3]
000056 4669 MOV r1,sp
000058 4628 MOV r0,r5
00005a f7fffffe BL GPIO_Init
00005e 2101 MOVS r1,#1
000060 0748 LSLS r0,r1,#29
000062 f7fffffe BL RCC_APB1PeriphClockCmd
000066 4641 MOV r1,r8
000068 4628 MOV r0,r5
00006a f7fffffe BL GPIO_ResetBits
;;;108
;;;109 /* Configure I2S interrupt Channel */
;;;110 NVIC_Config();
;;;111
;;;112 /* Configure the DAC pin (PA4) */
;;;113 DAC_GPIO_Config();
;;;114
;;;115 /* Read the Audio file to extract the audio data length and frequency */
;;;116 errorcode = AudioFile_Init();
00006e f7fffffe BL AudioFile_Init
;;;117
;;;118 if (errorcode < 3)
000072 62a0 STR r0,[r4,#0x28] ; errorcode
000074 2803 CMP r0,#3
000076 d206 BCS |L6.134|
;;;119 {
;;;120 /* Turn on LD2 connected to PB.09 */
;;;121 GPIO_SetBits(GPIOB, GPIO_Pin_9);
000078 1569 ASRS r1,r5,#21
00007a 4628 MOV r0,r5
00007c f7fffffe BL GPIO_SetBits
;;;122
;;;123 return errorcode;
000080 6aa0 LDR r0,[r4,#0x28] ; errorcode
|L6.130|
;;;124 }
;;;125
;;;126 /* Configure the DAC peripheral */
;;;127 DAC_Config(dacaudiofreq);
;;;128
;;;129 if (count != 0)
;;;130 {
;;;131 /* Turn on LD1 connected to PB.08 */
;;;132 GPIO_SetBits(GPIOB, GPIO_Pin_8);
;;;133
;;;134 return 3;
;;;135 }
;;;136
;;;137 /* Turn on LD4 connected to PB.11 */
;;;138 GPIO_SetBits(GPIOB, GPIO_Pin_11);
;;;139
;;;140 return 0; /* Configuration is OK */
;;;141 }
000082 e8bd83f8 POP {r3-r9,pc}
|L6.134|
000086 88a0 LDRH r0,[r4,#4] ;127 ; dacaudiofreq
000088 f7fffffe BL DAC_Config
00008c f44f6100 MOV r1,#0x800 ;138
000090 4628 MOV r0,r5 ;138
000092 f7fffffe BL GPIO_SetBits
000096 2000 MOVS r0,#0 ;140
000098 e7f3 B |L6.130|
;;;142
ENDP
00009a 0000 DCW 0x0000
|L6.156|
00009c 00000000 DCD ||.data||
|L6.160|
0000a0 40010800 DCD 0x40010800
|L6.164|
0000a4 40010c00 DCD 0x40010c00
AREA ||i.DAC_CODEC_ReplayConfig||, CODE, READONLY, ALIGN=2
DAC_CODEC_ReplayConfig PROC
;;;152 /* Audio Replay number set by user */
;;;153 AudioReplay = Repetions;
000000 4901 LDR r1,|L7.8|
000002 6188 STR r0,[r1,#0x18] ; AudioReplay
;;;154
;;;155 /* Audio Replays number remaining (if AudioReplay != 0) */
;;;156 AudioReplayCount = Repetions;
;;;157 }
000004 61c8 STR r0,[r1,#0x1c] ; AudioReplayCount
000006 4770 BX lr
;;;158
ENDP
|L7.8|
000008 00000000 DCD ||.data||
AREA ||i.SetVar_AudioPlayStatus||, CODE, READONLY, ALIGN=2
SetVar_AudioPlayStatus PROC
000000 4901 LDR r1,|L8.8|
000002 6248 STR r0,[r1,#0x24] ; AudioPlayStatus
000004 6a48 LDR r0,[r1,#0x24] ; AudioPlayStatus
000006 4770 BX lr
ENDP
|L8.8|
000008 00000000 DCD ||.data||
AREA ||i.Media_StartReadSequence||, CODE, READONLY, ALIGN=1
Media_StartReadSequence PROC
000000 4770 BX lr
ENDP
AREA ||i.DAC_CODEC_Play||, CODE, READONLY, ALIGN=2
DAC_CODEC_Play PROC
;;;166 u32 DAC_CODEC_Play(u32 AudioStartPosition)
;;;167 {
000000 b570 PUSH {r4-r6,lr}
;;;168 /* Send the read command to the media */
;;;169 Media_StartReadSequence(AudioFileAddress + AudioStartPosition + 1);
000002 4c0a LDR r4,|L10.44|
000004 68a0 LDR r0,[r4,#8] ; AudioFileAddress
000006 2001 MOVS r0,#1
000008 6260 STR r0,[r4,#0x24] ; AudioPlayStatus
;;;170
;;;171 /* Set Playing status to inform other modules about the codec status */
;;;172 SetVar_AudioPlayStatus(AudioPlayStatus_PLAYING);
;;;173
;;;174 /* Set autoreload value */
;;;175 TIM_SetAutoreload(TIM2, TIM2ARRValue);
00000a 88e1 LDRH r1,[r4,#6] ; TIM2ARRValue
00000c 0785 LSLS r5,r0,#30
00000e 4628 MOV r0,r5
000010 f7fffffe BL TIM_SetAutoreload
;;;176
;;;177 /* Start TIM2 */
;;;178 TIM_Cmd(TIM2, ENABLE);
000014 2101 MOVS r1,#1
000016 4628 MOV r0,r5
000018 f7fffffe BL TIM_Cmd
;;;179
;;;180 /* Enable TIM2 interrupt used for sound wave amplitude update */
;;;181 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
00001c 2201 MOVS r2,#1
00001e 4611 MOV r1,r2
000020 4628 MOV r0,r5
000022 f7fffffe BL TIM_ITConfig
;;;182
;;;183 return AudioDataIndex;
000026 6960 LDR r0,[r4,#0x14] ; AudioDataIndex
;;;184 }
000028 bd70 POP {r4-r6,pc}
;;;185
ENDP
00002a 0000 DCW 0x0000
|L10.44|
00002c 00000000 DCD ||.data||
AREA ||i.DAC_CODEC_Pause||, CODE, READONLY, ALIGN=2
DAC_CODEC_Pause PROC
;;;193 u32 DAC_CODEC_Pause()
;;;194 {
000000 b510 PUSH {r4,lr}
;;;195 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
000002 2101 MOVS r1,#1
000004 078c LSLS r4,r1,#30
000006 4620 MOV r0,r4
000008 f7fffffe BL TIM_ClearITPendingBit
;;;196
;;;197 /* Disable TIM2 update interrupt */
;;;198 TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
00000c 2200 MOVS r2,#0
00000e 2101 MOVS r1,#1
000010 4620 MOV r0,r4
000012 f7fffffe BL TIM_ITConfig
000016 4808 LDR r0,|L11.56|
000018 2102 MOVS r1,#2
00001a 6241 STR r1,[r0,#0x24] ; AudioPlayStatus
;;;199
;;;200 /* Set Paused status to inform other modules about the codec status */
;;;201 SetVar_AudioPlayStatus(AudioPlayStatus_PAUSED);
;;;202
;;;203 /* Reset local variables */
;;;204 monovar = 0;
00001c 2100 MOVS r1,#0
00001e 62c1 STR r1,[r0,#0x2c] ; monovar
;;;205 tmpvar = 0;
000020 6301 STR r1,[r0,#0x30] ; tmpvar
;;;206
;;;207 if (WAVE_Format.NumChannels == Channel_MONO)
000022 4906 LDR r1,|L11.60|
000024 88c9 LDRH r1,[r1,#6] ; WAVE_Format
000026 2901 CMP r1,#1
000028 d103 BNE |L11.50|
;;;208 {
;;;209 /* Force the parity of the address */
;;;210 AudioDataIndex &= 0xFFFFFFFE;
00002a 6941 LDR r1,[r0,#0x14] ; AudioDataIndex
00002c f0210101 BIC r1,r1,#1
000030 6141 STR r1,[r0,#0x14] ; AudioDataIndex
|L11.50|
;;;211 }
;;;212 /* Return the current data pointer position */
;;;213 return AudioDataIndex;
000032 6940 LDR r0,[r0,#0x14] ; AudioDataIndex
;;;214 }
000034 bd10 POP {r4,pc}
;;;215
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -