stm32f4_discovery_audio_codec.h
304 lines
| 12.1 KiB
| text/x-c
|
CLexer
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r14 | /** | ||
****************************************************************************** | ||||
* @file stm32f4_discovery_audio_codec.h | ||||
* @author MCD Application Team | ||||
* @version V1.0.0 | ||||
* @date 19-September-2011 | ||||
* @brief This file contains all the functions prototypes for the | ||||
* stm32f4_discovery_audio_codec.c driver. | ||||
****************************************************************************** | ||||
* @attention | ||||
* | ||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | ||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE | ||||
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY | ||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING | ||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE | ||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | ||||
* | ||||
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> | ||||
****************************************************************************** | ||||
*/ | ||||
/* Define to prevent recursive inclusion -------------------------------------*/ | ||||
#ifndef __STM32F4_DISCOVERY_AUDIOCODEC_H | ||||
#define __STM32F4_DISCOVERY_AUDIOCODEC_H | ||||
/* Includes ------------------------------------------------------------------*/ | ||||
#include "stm32f4xx.h" | ||||
#include "stm32f4xx_gpio.h" | ||||
/** @addtogroup Utilities | ||||
* @{ | ||||
*/ | ||||
/** @addtogroup STM32F4_DISCOVERY | ||||
* @{ | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_AUDIO_CODEC | ||||
* @{ | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_AUDIO_CODEC_Exported_Types | ||||
* @{ | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_AUDIO_CODEC_Exported_Constants | ||||
* @{ | ||||
*/ | ||||
/*------------------------------------ | ||||
CONFIGURATION: Audio Codec Driver Configuration parameters | ||||
----------------------------------------*/ | ||||
#define I2S_INTERRUPT | ||||
/* Audio Transfer mode (DMA, Interrupt or Polling) */ | ||||
#define AUDIO_MAL_MODE_NORMAL /* Uncomment this line to enable the audio | ||||
Transfer using DMA */ | ||||
/* #define AUDIO_MAL_MODE_CIRCULAR */ /* Uncomment this line to enable the audio | ||||
Transfer using DMA */ | ||||
/* For the DMA modes select the interrupt that will be used */ | ||||
#define AUDIO_MAL_DMA_IT_TC_EN /* Uncomment this line to enable DMA Transfer Complete interrupt */ | ||||
/* #define AUDIO_MAL_DMA_IT_HT_EN */ /* Uncomment this line to enable DMA Half Transfer Complete interrupt */ | ||||
/* #define AUDIO_MAL_DMA_IT_TE_EN */ /* Uncomment this line to enable DMA Transfer Error interrupt */ | ||||
/* Select the interrupt preemption priority and subpriority for the DMA interrupt */ | ||||
#define EVAL_AUDIO_IRQ_PREPRIO 0 /* Select the preemption priority level(0 is the highest) */ | ||||
#define EVAL_AUDIO_IRQ_SUBRIO 0 /* Select the sub-priority level (0 is the highest) */ | ||||
/* Uncomment the following line to use the default Codec_TIMEOUT_UserCallback() | ||||
function implemented in stm32f4_discovery_audio_codec.c file. | ||||
Codec_TIMEOUT_UserCallback() function is called whenever a timeout condition | ||||
occurs during communication (waiting on an event that doesn't occur, bus | ||||
errors, busy devices ...). */ | ||||
/* #define USE_DEFAULT_TIMEOUT_CALLBACK */ | ||||
/* Enable this define to use the I2S DMA for writing into DAC register */ | ||||
//#define DAC_USE_I2S_DMA | ||||
/*----------------------------------------------------------------------------*/ | ||||
/*------------------------------------ | ||||
OPTIONAL Configuration defines parameters | ||||
----------------------------------------*/ | ||||
/* I2C clock speed configuration (in Hz) | ||||
WARNING: | ||||
Make sure that this define is not already declared in other files (ie. | ||||
stm322xg_eval.h file). It can be used in parallel by other modules. */ | ||||
#ifndef I2C_SPEED | ||||
#define I2C_SPEED 100000 | ||||
#endif /* I2C_SPEED */ | ||||
/* Uncomment defines below to select standard for audio communication between | ||||
Codec and I2S peripheral */ | ||||
#define I2S_STANDARD_PHILLIPS | ||||
/* #define I2S_STANDARD_MSB */ | ||||
/* #define I2S_STANDARD_LSB */ | ||||
/* Uncomment the defines below to select if the Master clock mode should be | ||||
enabled or not */ | ||||
#define CODEC_MCLK_ENABLED | ||||
/* #deine CODEC_MCLK_DISABLED */ | ||||
/* Uncomment this line to enable verifying data sent to codec after each write | ||||
operation */ | ||||
#define VERIFY_WRITTENDATA | ||||
/*----------------------------------------------------------------------------*/ | ||||
/*----------------------------------- | ||||
Hardware Configuration defines parameters | ||||
-----------------------------------------*/ | ||||
/* Audio Reset Pin definition */ | ||||
#define AUDIO_RESET_GPIO_CLK RCC_AHB1Periph_GPIOD | ||||
#define AUDIO_RESET_PIN GPIO_Pin_4 | ||||
#define AUDIO_RESET_GPIO GPIOD | ||||
/* I2S peripheral configuration defines */ | ||||
#define CODEC_I2S SPI3 | ||||
#define CODEC_I2S_CLK RCC_APB1Periph_SPI3 | ||||
#define CODEC_I2S_ADDRESS 0x40003C0C | ||||
#define CODEC_I2S_GPIO_AF GPIO_AF_SPI3 | ||||
#define CODEC_I2S_IRQ SPI3_IRQn | ||||
#define CODEC_I2S_GPIO_CLOCK (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOA) | ||||
#define CODEC_I2S_WS_PIN GPIO_Pin_4 | ||||
#define CODEC_I2S_SCK_PIN GPIO_Pin_10 | ||||
#define CODEC_I2S_SD_PIN GPIO_Pin_12 | ||||
#define CODEC_I2S_MCK_PIN GPIO_Pin_7 | ||||
#define CODEC_I2S_WS_PINSRC GPIO_PinSource4 | ||||
#define CODEC_I2S_SCK_PINSRC GPIO_PinSource10 | ||||
#define CODEC_I2S_SD_PINSRC GPIO_PinSource12 | ||||
#define CODEC_I2S_MCK_PINSRC GPIO_PinSource7 | ||||
#define CODEC_I2S_GPIO GPIOC | ||||
#define CODEC_I2S_WS_GPIO GPIOA | ||||
#define CODEC_I2S_MCK_GPIO GPIOC | ||||
#define Audio_I2S_IRQHandler SPI3_IRQHandler | ||||
#define AUDIO_MAL_DMA_PERIPH_DATA_SIZE DMA_PeripheralDataSize_HalfWord | ||||
#define AUDIO_MAL_DMA_MEM_DATA_SIZE DMA_MemoryDataSize_HalfWord | ||||
#define DMA_MAX_SZE 0xFFFF | ||||
#define DAC_DHR12L1_ADDRESS 0x4000740C | ||||
#define DAC_DHR12R1_ADDRESS 0x40007408 | ||||
#define DAC_DHR8R1_ADDRESS 0x40007410 | ||||
#define AUDIO_DAC_CHANNEL DAC_Channel_1 | ||||
/* I2S DMA Stream definitions */ | ||||
#define AUDIO_I2S_DMA_CLOCK RCC_AHB1Periph_DMA1 | ||||
#define AUDIO_I2S_DMA_STREAM DMA1_Stream7 | ||||
#define AUDIO_I2S_DMA_DREG CODEC_I2S_ADDRESS | ||||
#define AUDIO_I2S_DMA_CHANNEL DMA_Channel_0 | ||||
#define AUDIO_I2S_DMA_IRQ DMA1_Stream7_IRQn | ||||
#define AUDIO_I2S_DMA_FLAG_TC DMA_FLAG_TCIF7 | ||||
#define AUDIO_I2S_DMA_FLAG_HT DMA_FLAG_HTIF7 | ||||
#define AUDIO_I2S_DMA_FLAG_FE DMA_FLAG_FEIF7 | ||||
#define AUDIO_I2S_DMA_FLAG_TE DMA_FLAG_TEIF7 | ||||
#define AUDIO_I2S_DMA_FLAG_DME DMA_FLAG_DMEIF7 | ||||
#define Audio_MAL_I2S_IRQHandler DMA1_Stream7_IRQHandler | ||||
/* DAC DMA Stream definitions */ | ||||
#define AUDIO_DAC_DMA_CLOCK RCC_AHB1Periph_DMA1 | ||||
#define AUDIO_DAC_DMA_STREAM DMA1_Stream0 | ||||
#define AUDIO_DAC_DMA_DREG DAC_DHR12L1_ADDRESS | ||||
#define AUDIO_DAC_DMA_CHANNEL DMA_Channel_0 | ||||
#define AUDIO_DAC_DMA_IRQ DMA1_Stream0_IRQn | ||||
#define AUDIO_DAC_DMA_FLAG_TC DMA_FLAG_TCIF0 | ||||
#define AUDIO_DAC_DMA_FLAG_HT DMA_FLAG_HTIF0 | ||||
#define AUDIO_DAC_DMA_FLAG_FE DMA_FLAG_FEIF0 | ||||
#define AUDIO_DAC_DMA_FLAG_TE DMA_FLAG_TEIF0 | ||||
#define AUDIO_DAC_DMA_FLAG_DME DMA_FLAG_DMEIF0 | ||||
#define Audio_MAL_DAC_IRQHandler DMA1_Stream0_IRQHandler | ||||
/* I2C peripheral configuration defines (control interface of the audio codec) */ | ||||
#define CODEC_I2C I2C1 | ||||
#define CODEC_I2C_CLK RCC_APB1Periph_I2C1 | ||||
#define CODEC_I2C_GPIO_CLOCK RCC_AHB1Periph_GPIOB | ||||
#define CODEC_I2C_GPIO_AF GPIO_AF_I2C1 | ||||
#define CODEC_I2C_GPIO GPIOB | ||||
#define CODEC_I2C_SCL_PIN GPIO_Pin_6 | ||||
#define CODEC_I2C_SDA_PIN GPIO_Pin_9 | ||||
#define CODEC_I2S_SCL_PINSRC GPIO_PinSource6 | ||||
#define CODEC_I2S_SDA_PINSRC GPIO_PinSource9 | ||||
/* Maximum Timeout values for flags and events waiting loops. These timeouts are | ||||
not based on accurate values, they just guarantee that the application will | ||||
not remain stuck if the I2C communication is corrupted. | ||||
You may modify these timeout values depending on CPU frequency and application | ||||
conditions (interrupts routines ...). */ | ||||
#define CODEC_FLAG_TIMEOUT ((uint32_t)0x1000) | ||||
#define CODEC_LONG_TIMEOUT ((uint32_t)(300 * CODEC_FLAG_TIMEOUT)) | ||||
/*----------------------------------------------------------------------------*/ | ||||
/*----------------------------------- | ||||
Audio Codec User defines | ||||
-----------------------------------------*/ | ||||
/* Audio interface : I2S or DAC */ | ||||
#define AUDIO_INTERFACE_I2S 1 | ||||
#define AUDIO_INTERFACE_DAC 2 | ||||
/* Codec output DEVICE */ | ||||
#define OUTPUT_DEVICE_SPEAKER 1 | ||||
#define OUTPUT_DEVICE_HEADPHONE 2 | ||||
#define OUTPUT_DEVICE_BOTH 3 | ||||
#define OUTPUT_DEVICE_AUTO 4 | ||||
/* Volume Levels values */ | ||||
#define DEFAULT_VOLMIN 0x00 | ||||
#define DEFAULT_VOLMAX 0xFF | ||||
#define DEFAULT_VOLSTEP 0x04 | ||||
#define AUDIO_PAUSE 0 | ||||
#define AUDIO_RESUME 1 | ||||
/* Codec POWER DOWN modes */ | ||||
#define CODEC_PDWN_HW 1 | ||||
#define CODEC_PDWN_SW 2 | ||||
/* MUTE commands */ | ||||
#define AUDIO_MUTE_ON 1 | ||||
#define AUDIO_MUTE_OFF 0 | ||||
/*----------------------------------------------------------------------------*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_AUDIO_CODEC_Exported_Macros | ||||
* @{ | ||||
*/ | ||||
#define VOLUME_CONVERT(x) ((Volume > 100)? 100:((uint8_t)((Volume * 255) / 100))) | ||||
#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_AUDIO_CODEC_Exported_Functions | ||||
* @{ | ||||
*/ | ||||
void EVAL_AUDIO_SetAudioInterface(uint32_t Interface); | ||||
uint32_t EVAL_AUDIO_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); | ||||
uint32_t EVAL_AUDIO_DeInit(void); | ||||
uint32_t EVAL_AUDIO_Play(uint16_t* pBuffer, uint32_t Size); | ||||
uint32_t EVAL_AUDIO_PauseResume(uint32_t Cmd); | ||||
uint32_t EVAL_AUDIO_Stop(uint32_t CodecPowerDown_Mode); | ||||
uint32_t EVAL_AUDIO_VolumeCtl(uint8_t Volume); | ||||
uint32_t EVAL_AUDIO_Mute(uint32_t Command); | ||||
void DAC_Config(void); | ||||
/* User Callbacks: user has to implement these functions in his code if | ||||
they are needed. -----------------------------------------------------------*/ | ||||
uint16_t EVAL_AUDIO_GetSampleCallBack(void); | ||||
/* This function is called when the requested data has been completely transferred. | ||||
In Normal mode (when the define AUDIO_MAL_MODE_NORMAL is enabled) this function | ||||
is called at the end of the whole audio file. | ||||
In circular mode (when the define AUDIO_MAL_MODE_CIRCULAR is enabled) this | ||||
function is called at the end of the current buffer transmission. */ | ||||
void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size); | ||||
/* This function is called when half of the requested buffer has been transferred | ||||
This callback is useful in Circular mode only (when AUDIO_MAL_MODE_CIRCULAR | ||||
define is enabled)*/ | ||||
void EVAL_AUDIO_HalfTransfer_CallBack(uint32_t pBuffer, uint32_t Size); | ||||
/* This function is called when an Interrupt due to transfer error on or peripheral | ||||
error occurs. */ | ||||
void EVAL_AUDIO_Error_CallBack(void* pData); | ||||
/* Codec_TIMEOUT_UserCallback() function is called whenever a timeout condition | ||||
occurs during communication (waiting on an event that doesn't occur, bus | ||||
errors, busy devices ...) on the Codec control interface (I2C). | ||||
You can use the default timeout callback implementation by uncommenting the | ||||
define USE_DEFAULT_TIMEOUT_CALLBACK in stm32f4_discovery_audio_codec.h file. | ||||
Typically the user implementation of this callback should reset I2C peripheral | ||||
and re-initialize communication or in worst case reset all the application. */ | ||||
uint32_t Codec_TIMEOUT_UserCallback(void); | ||||
#endif /* __STM32F4_DISCOVERY_AUDIOCODEC_H */ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ | ||||