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

📄 dac_codec.txt

📁 stm32.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
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 + -