aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h')
-rw-r--r--thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h284
1 files changed, 284 insertions, 0 deletions
diff --git a/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h
new file mode 100644
index 0000000..6204868
--- /dev/null
+++ b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Utilities/STM32_EVAL/STM32373C_EVAL/stm32373c_eval_audio_codec.h
@@ -0,0 +1,284 @@
+/**
+ ******************************************************************************
+ * @file stm32373c_eval_audio_codec.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 20-September-2012
+ * @brief This file contains all the functions prototypes for the
+ * stm32373c_eval_audio_codec.c driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+ *
+ * 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 __STM32373C_EVAL_AUDIOCODEC_H
+#define __STM32373C_EVAL_AUDIOCODEC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32373c_eval.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup STM32373C_EVAL
+ * @{
+ */
+
+/** @defgroup STM32373C_EVAL_AUDIO_CODEC
+ * @{
+ */
+
+
+/** @defgroup STM32373C_EVAL_AUDIO_CODEC_Exported_Types
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32373C_EVAL_AUDIO_CODEC_Exported_Constants
+ * @{
+ */
+
+/*----------------------------------------------------------------------------
+ CONFIGURATION: Audio Codec Driver Configuration parameters
+ ----------------------------------------------------------------------------*/
+/* 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 stm32373c_eval_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 */
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+ OPTIONAL Configuration defines parameters
+ ----------------------------------------------------------------------------*/
+/* I2C clock speed configuration (in Hz)
+ WARNING:
+ Make sure that this define is not already declared in other files (ie.
+ stm32373c_eval.h file). It can be used in parallel by other modules. */
+
+/* I2C TIMING Register define when I2C clock source is SYSCLK */
+/* set TIMING to 0xC062121F to reach 100 KHz speed (Rise time = 640ns, Fall time = 20ns) */
+
+#define CODEC_I2C_TIMING 0xC062121F
+
+/* 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_AHBPeriph_GPIOD
+#define AUDIO_RESET_PIN GPIO_Pin_11
+#define AUDIO_RESET_GPIO GPIOD
+
+/* I2S peripheral configuration defines */
+#define CODEC_I2S SPI1
+#define CODEC_I2S_CLK RCC_APB2Periph_SPI1
+#define CODEC_I2S_ADDRESS 0x4001300C
+#define CODEC_I2S_GPIO_AF GPIO_AF_5
+#define CODEC_I2S_IRQ SPI1_IRQn
+#define CODEC_I2S_GPIO_CLOCK (RCC_AHBPeriph_GPIOC)
+#define CODEC_I2S_WS_PIN GPIO_Pin_6
+#define CODEC_I2S_SCK_PIN GPIO_Pin_7
+#define CODEC_I2S_SD_PIN GPIO_Pin_9
+#define CODEC_I2S_MCK_PIN GPIO_Pin_8
+#define CODEC_I2S_WS_PINSRC GPIO_PinSource6
+#define CODEC_I2S_SCK_PINSRC GPIO_PinSource7
+#define CODEC_I2S_SD_PINSRC GPIO_PinSource9
+#define CODEC_I2S_MCK_PINSRC GPIO_PinSource8
+#define CODEC_I2S_GPIO GPIOC
+#define CODEC_I2S_MCK_GPIO GPIOC
+
+ /* I2S DMA channel definitions */
+#define AUDIO_MAL_DMA_CLOCK RCC_AHBPeriph_DMA1
+#define AUDIO_MAL_DMA_CHANNEL DMA1_Channel3
+#define AUDIO_MAL_DMA_IRQ DMA1_Channel3_IRQn
+#define AUDIO_MAL_DMA_FLAG_TC DMA1_FLAG_TC3
+#define AUDIO_MAL_DMA_FLAG_HT DMA1_FLAG_HT3
+#define AUDIO_MAL_DMA_FLAG_TE DMA1_FLAG_TE3
+
+#define Audio_MAL_IRQHandler DMA1_Channel3_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
+
+/* I2C peripheral configuration defines (control interface of the audio codec) */
+#define CODEC_I2C I2C2
+#define CODEC_I2C_CLK RCC_APB1Periph_I2C2
+#define CODEC_I2C_GPIO_CLOCK RCC_AHBPeriph_GPIOB
+#define CODEC_I2C_GPIO_AF GPIO_AF_4
+#define CODEC_I2C_GPIO GPIOA
+#define CODEC_I2C_SCL_PIN GPIO_Pin_9
+#define CODEC_I2C_SDA_PIN GPIO_Pin_10
+#define CODEC_I2S_SCL_PINSRC GPIO_PinSource9
+#define CODEC_I2S_SDA_PINSRC GPIO_PinSource10
+
+/* 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
+ ----------------------------------------------------------------------------*/
+/* 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 STM32373C_EVAL_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 STM32373C_EVAL_AUDIO_CODEC_Exported_Functions
+ * @{
+ */
+
+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);
+
+uint32_t Codec_SwitchOutput(uint8_t Output);
+
+/* User Callbacks: user has to implement these functions in his code if
+ they are needed. -----------------------------------------------------------*/
+
+/* 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 stm32373c_eval_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);
+void Audio_MAL_IRQHandler(void);
+void Audio_MAL_Play(uint32_t Addr, uint32_t Size);
+
+#endif /* __STM32373C_EVAL_AUDIOCODEC_H */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/