]> git.gag.com Git - fw/stlink/blobdiff - example/stm32f4/Utilities/STM32F4-Discovery/stm32f4_discovery_audio_codec.h
Added STM32F4-Discovery utilities
[fw/stlink] / example / stm32f4 / Utilities / STM32F4-Discovery / stm32f4_discovery_audio_codec.h
diff --git a/example/stm32f4/Utilities/STM32F4-Discovery/stm32f4_discovery_audio_codec.h b/example/stm32f4/Utilities/STM32F4-Discovery/stm32f4_discovery_audio_codec.h
new file mode 100644 (file)
index 0000000..33ba0e7
--- /dev/null
@@ -0,0 +1,304 @@
+/**
+  ******************************************************************************
+  * @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>&copy; 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****/