|
|
/**
|
|
|
******************************************************************************
|
|
|
* @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****/
|
|
|
|