/** ****************************************************************************** * @file i2s_codec.h * @author MCD Application Team * @version V4.0.0 * @date 21-January-2013 * @brief This file contains all the functions prototypes for the I2S codec * firmware driver. ****************************************************************************** * @attention * *

© COPYRIGHT 2013 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __I2S_CODEC_H #define __I2S_CODEC_H /* .WAV file format : Endian Offset Length Contents big 0 4 bytes 'RIFF' // 0x52494646 little 4 4 bytes big 8 4 bytes 'WAVE' // 0x57415645 Next, the fmt chunk describes the sample format: big 12 4 bytes 'fmt ' // 0x666D7420 little 16 4 bytes 0x00000010 // Length of the fmt data (16 bytes) little 20 2 bytes 0x0001 // Format tag: 1 = PCM little 22 2 bytes // Channels: 1 = mono, 2 = stereo little 24 4 bytes // Samples per second: e.g., 22050 little 28 4 bytes // sample rate * block align little 32 2 bytes // channels * bits/sample / 8 little 34 2 bytes // 8 or 16 Finally, the data chunk contains the sample data: big 36 4 bytes 'data' // 0x64617461 little 40 4 bytes little 44 * */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /* Exported types ------------------------------------------------------------*/ /* Audio file information structure */ typedef struct { uint32_t RIFFchunksize; uint16_t FormatTag; uint16_t NumChannels; uint32_t SampleRate; uint32_t ByteRate; uint16_t BlockAlign; uint16_t BitsPerSample; uint32_t DataSize; } WAVE_FormatTypeDef; /* Error Identification structure */ typedef enum { Valid_WAVE_File = 0, Unvalid_RIFF_ID, Unvalid_WAVE_Format, Unvalid_FormatChunk_ID, Unsupporetd_FormatTag, Unsupporetd_Number_Of_Channel, Unsupporetd_Sample_Rate, Unsupporetd_Bits_Per_Sample, Unvalid_DataChunk_ID, Unsupporetd_ExtraFormatBytes, Unvalid_FactChunk_ID } ErrorCode; /* Exported constants --------------------------------------------------------*/ /* Codec output DEVICE */ #define OutputDevice_SPEAKER 1 #define OutputDevice_HEADPHONE 2 #define OutputDevice_BOTH 3 /* VOLUME control constants */ #define DEFAULT_VOL 0x52 #define VolumeDirection_HIGH 0xF #define VolumeDirection_LOW 0xA #define VolumeDirection_LEVEL 0x0 #define VOLStep 4 /* Forward and Rewind constants */ #define STEP_FORWARD 2 /* 2% of wave file data length*/ #define STEP_BACK 6 /* 6% of wave file data length*/ /* Codec POWER DOWN modes */ #define CodecPowerDown_HW 1 #define CodecPowerDown_SW 2 /* Audio Play STATUS */ #define AudioPlayStatus_STOPPED 0 #define AudioPlayStatus_PLAYING 1 #define AudioPlayStatus_PAUSED 2 /* MUTE commands */ #define MUTE_ON 1 #define MUTE_OFF 0 /* I2S configuration parameters */ #define I2S_STANDARD I2S_Standard_Phillips #define I2S_MCLKOUTPUT I2S_MCLKOutput_Enable /* Exported macro ------------------------------------------------------------*/ /* Exported functions ------------------------------------------------------- */ /* CONFIGURATION */ uint32_t I2S_CODEC_Init(uint32_t OutputDevice, uint32_t Address); void I2S_CODEC_ReplayConfig(uint32_t Repetions); /* AUDIO CONTROL */ uint32_t I2S_CODEC_Play(uint32_t AudioStartPosition); uint32_t I2S_CODEC_Pause(void); uint32_t I2S_CODEC_Stop(void); uint32_t I2S_CODEC_ControlVolume(uint32_t direction, uint8_t volume); void I2S_CODEC_Mute(uint32_t Command); void I2S_CODEC_ForwardPlay(uint32_t Step); void I2S_CODEC_RewindPlay(uint32_t Step); /* EXTRA CONTROLS */ void I2S_CODEC_PowerDown(uint32_t CodecPowerDown_Mode); void I2S_CODEC_Reset(void); uint32_t I2S_CODEC_SpeakerHeadphoneSwap(uint32_t CODEC_AudioOutput, uint32_t Address); uint8_t GetVar_CurrentVolume(void); /* Medium Layer Codec Functions ----------------------------------------------*/ void I2S_CODEC_DataTransfer(void); void I2S_CODEC_UpdateStatus(void); uint32_t GetVar_DataStartAddr(void); ErrorCode I2S_CODEC_WaveParsing(uint8_t* HeaderTab); uint32_t GetVar_CurrentOutputDevice(void); uint32_t GetVar_AudioDataIndex(void); void SetVar_AudioDataIndex(uint32_t value); void ResetVar_AudioDataIndex(void); void IncrementVar_AudioDataIndex(uint32_t IncrementNumber); void DecrementVar_AudioDataIndex(uint32_t DecrementNumber); uint32_t GetVar_AudioReplay(void); void Decrement_AudioReplay(void); uint32_t GetVar_AudioPlayStatus(void); uint32_t SetVar_AudioPlayStatus(uint32_t Status); uint16_t GetVar_i2saudiofreq(void); uint32_t GetVar_AudioDataLength(void); /* Low Layer Codec Function --------------------------------------------------*/ uint32_t SetVar_SendDummyData(void); uint32_t ResetVar_SendDummyData(void); uint32_t GetVar_SendDummyData(void); uint32_t AudioFile_Init(void); void I2S_GPIO_Config(void); void I2S_Config(uint16_t Standard, uint16_t MCLKOutput, uint16_t AudioFreq); uint32_t CODEC_Config(uint16_t AudioOutput, uint16_t I2S_Standard, uint16_t I2S_MCLKOutput, uint8_t Volume); uint32_t Media_Init(void); void Media_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); void Media_StartReadSequence(uint32_t ReadAddr); uint16_t Media_ReadHalfWord(uint32_t Offset); uint8_t Media_ReadByte(uint32_t Offset); void delay(__IO uint32_t nCount); #endif /* __I2S_CODEC_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/