mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Aug 20 10:45:13 2015 +0100
Revision:
613:bc40b8d2aec4
Parent:
532:fe11edbda85c
Synchronized with git revision 92ca8c7b60a283b6bb60eb65b183dac1599f0ade

Full URL: https://github.com/mbedmicro/mbed/commit/92ca8c7b60a283b6bb60eb65b183dac1599f0ade/

Nordic: update application start address in GCC linker script

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 532:fe11edbda85c 1 /**
mbed_official 532:fe11edbda85c 2 ******************************************************************************
mbed_official 532:fe11edbda85c 3 * @file stm32f4xx_hal_spdifrx.c
mbed_official 532:fe11edbda85c 4 * @author MCD Application Team
mbed_official 613:bc40b8d2aec4 5 * @version V1.3.2
mbed_official 613:bc40b8d2aec4 6 * @date 26-June-2015
mbed_official 532:fe11edbda85c 7 * @brief This file provides firmware functions to manage the following
mbed_official 532:fe11edbda85c 8 * functionalities of the SPDIFRX audio interface:
mbed_official 532:fe11edbda85c 9 * + Initialization and Configuration
mbed_official 532:fe11edbda85c 10 * + Data transfers functions
mbed_official 532:fe11edbda85c 11 * + DMA transfers management
mbed_official 532:fe11edbda85c 12 * + Interrupts and flags management
mbed_official 532:fe11edbda85c 13 @verbatim
mbed_official 532:fe11edbda85c 14 ===============================================================================
mbed_official 532:fe11edbda85c 15 ##### How to use this driver #####
mbed_official 532:fe11edbda85c 16 ===============================================================================
mbed_official 532:fe11edbda85c 17 [..]
mbed_official 532:fe11edbda85c 18 The SPDIFRX HAL driver can be used as follow:
mbed_official 532:fe11edbda85c 19
mbed_official 532:fe11edbda85c 20 (#) Declare SPDIFRX_HandleTypeDef handle structure.
mbed_official 532:fe11edbda85c 21 (#) Initialize the SPDIFRX low level resources by implement the HAL_SPDIFRX_MspInit() API:
mbed_official 532:fe11edbda85c 22 (##) Enable the SPDIFRX interface clock.
mbed_official 532:fe11edbda85c 23 (##) SPDIFRX pins configuration:
mbed_official 532:fe11edbda85c 24 (+++) Enable the clock for the SPDIFRX GPIOs.
mbed_official 532:fe11edbda85c 25 (+++) Configure these SPDIFRX pins as alternate function pull-up.
mbed_official 532:fe11edbda85c 26 (##) NVIC configuration if you need to use interrupt process (HAL_SPDIFRX_ReceiveControlFlow_IT() and HAL_SPDIFRX_ReceiveDataFlow_IT() API's).
mbed_official 532:fe11edbda85c 27 (+++) Configure the SPDIFRX interrupt priority.
mbed_official 532:fe11edbda85c 28 (+++) Enable the NVIC SPDIFRX IRQ handle.
mbed_official 532:fe11edbda85c 29 (##) DMA Configuration if you need to use DMA process (HAL_SPDIFRX_ReceiveDataFlow_DMA() and HAL_SPDIFRX_ReceiveControlFlow_DMA() API's).
mbed_official 532:fe11edbda85c 30 (+++) Declare a DMA handle structure for the reception of the Data Flow channel.
mbed_official 532:fe11edbda85c 31 (+++) Declare a DMA handle structure for the reception of the Control Flow channel.
mbed_official 532:fe11edbda85c 32 (+++) Enable the DMAx interface clock.
mbed_official 532:fe11edbda85c 33 (+++) Configure the declared DMA handle structure CtrlRx/DataRx with the required parameters.
mbed_official 532:fe11edbda85c 34 (+++) Configure the DMA Channel.
mbed_official 532:fe11edbda85c 35 (+++) Associate the initialized DMA handle to the SPDIFRX DMA CtrlRx/DataRx handle.
mbed_official 532:fe11edbda85c 36 (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the
mbed_official 532:fe11edbda85c 37 DMA CtrlRx/DataRx channel.
mbed_official 532:fe11edbda85c 38
mbed_official 532:fe11edbda85c 39 (#) Program the input selection, re-tries number, wait for activity, channel status selection, data format, stereo mode and masking of user bits
mbed_official 532:fe11edbda85c 40 using HAL_SPDIFRX_Init() function.
mbed_official 532:fe11edbda85c 41
mbed_official 532:fe11edbda85c 42 -@- The specific SPDIFRX interrupts (RXNE/CSRNE and Error Interrupts) will be managed using the macros
mbed_official 532:fe11edbda85c 43 __SPDIFRX_ENABLE_IT() and __SPDIFRX_DISABLE_IT() inside the receive process.
mbed_official 532:fe11edbda85c 44 -@- Make sure that ck_spdif clock is configured.
mbed_official 532:fe11edbda85c 45
mbed_official 532:fe11edbda85c 46 (#) Three operation modes are available within this driver :
mbed_official 532:fe11edbda85c 47
mbed_official 532:fe11edbda85c 48 *** Polling mode for reception operation (for debug purpose) ***
mbed_official 532:fe11edbda85c 49 ================================================================
mbed_official 532:fe11edbda85c 50 [..]
mbed_official 532:fe11edbda85c 51 (+) Receive data flow in blocking mode using HAL_SPDIFRX_ReceiveDataFlow()
mbed_official 532:fe11edbda85c 52 (+) Receive control flow of data in blocking mode using HAL_SPDIFRX_ReceiveControlFlow()
mbed_official 532:fe11edbda85c 53
mbed_official 532:fe11edbda85c 54 *** Interrupt mode for reception operation ***
mbed_official 532:fe11edbda85c 55 =========================================
mbed_official 532:fe11edbda85c 56 [..]
mbed_official 532:fe11edbda85c 57 (+) Receive an amount of data (Data Flow) in non blocking mode using HAL_SPDIFRX_ReceiveDataFlow_IT()
mbed_official 532:fe11edbda85c 58 (+) Receive an amount of data (Control Flow) in non blocking mode using HAL_SPDIFRX_ReceiveControlFlow_IT()
mbed_official 532:fe11edbda85c 59 (+) At reception end of half transfer HAL_SPDIFRX_RxHalfCpltCallback is executed and user can
mbed_official 532:fe11edbda85c 60 add his own code by customization of function pointer HAL_SPDIFRX_RxHalfCpltCallback
mbed_official 532:fe11edbda85c 61 (+) At reception end of transfer HAL_SPDIFRX_RxCpltCallback is executed and user can
mbed_official 532:fe11edbda85c 62 add his own code by customization of function pointer HAL_SPDIFRX_RxCpltCallback
mbed_official 532:fe11edbda85c 63 (+) In case of transfer Error, HAL_SPDIFRX_ErrorCallback() function is executed and user can
mbed_official 532:fe11edbda85c 64 add his own code by customization of function pointer HAL_SPDIFRX_ErrorCallback
mbed_official 532:fe11edbda85c 65
mbed_official 532:fe11edbda85c 66 *** DMA mode for reception operation ***
mbed_official 532:fe11edbda85c 67 ========================================
mbed_official 532:fe11edbda85c 68 [..]
mbed_official 532:fe11edbda85c 69 (+) Receive an amount of data (Data Flow) in non blocking mode (DMA) using HAL_SPDIFRX_ReceiveDataFlow_DMA()
mbed_official 532:fe11edbda85c 70 (+) Receive an amount of data (Control Flow) in non blocking mode (DMA) using HAL_SPDIFRX_ReceiveControlFlow_DMA()
mbed_official 532:fe11edbda85c 71 (+) At reception end of half transfer HAL_SPDIFRX_RxHalfCpltCallback is executed and user can
mbed_official 532:fe11edbda85c 72 add his own code by customization of function pointer HAL_SPDIFRX_RxHalfCpltCallback
mbed_official 532:fe11edbda85c 73 (+) At reception end of transfer HAL_SPDIFRX_RxCpltCallback is executed and user can
mbed_official 532:fe11edbda85c 74 add his own code by customization of function pointer HAL_SPDIFRX_RxCpltCallback
mbed_official 532:fe11edbda85c 75 (+) In case of transfer Error, HAL_SPDIFRX_ErrorCallback() function is executed and user can
mbed_official 532:fe11edbda85c 76 add his own code by customization of function pointer HAL_SPDIFRX_ErrorCallback
mbed_official 532:fe11edbda85c 77 (+) Stop the DMA Transfer using HAL_SPDIFRX_DMAStop()
mbed_official 532:fe11edbda85c 78
mbed_official 532:fe11edbda85c 79 *** SPDIFRX HAL driver macros list ***
mbed_official 532:fe11edbda85c 80 =============================================
mbed_official 532:fe11edbda85c 81 [..]
mbed_official 532:fe11edbda85c 82 Below the list of most used macros in USART HAL driver.
mbed_official 532:fe11edbda85c 83 (+) __HAL_SPDIFRX_IDLE: Disable the specified SPDIFRX peripheral (IDEL State)
mbed_official 532:fe11edbda85c 84 (+) __HAL_SPDIFRX_SYNC: Enable the synchronization state of the specified SPDIFRX peripheral (SYNC State)
mbed_official 532:fe11edbda85c 85 (+) __HAL_SPDIFRX_RCV: Enable the receive state of the specified SPDIFRX peripheral (RCV State)
mbed_official 532:fe11edbda85c 86 (+) __HAL_SPDIFRX_ENABLE_IT : Enable the specified SPDIFRX interrupts
mbed_official 532:fe11edbda85c 87 (+) __HAL_SPDIFRX_DISABLE_IT : Disable the specified SPDIFRX interrupts
mbed_official 532:fe11edbda85c 88 (+) __HAL_SPDIFRX_GET_FLAG: Check whether the specified SPDIFRX flag is set or not.
mbed_official 532:fe11edbda85c 89
mbed_official 532:fe11edbda85c 90 [..]
mbed_official 532:fe11edbda85c 91 (@) You can refer to the SPDIFRX HAL driver header file for more useful macros
mbed_official 532:fe11edbda85c 92
mbed_official 532:fe11edbda85c 93 @endverbatim
mbed_official 532:fe11edbda85c 94 ******************************************************************************
mbed_official 532:fe11edbda85c 95 * @attention
mbed_official 532:fe11edbda85c 96 *
mbed_official 532:fe11edbda85c 97 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 532:fe11edbda85c 98 *
mbed_official 532:fe11edbda85c 99 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 532:fe11edbda85c 100 * are permitted provided that the following conditions are met:
mbed_official 532:fe11edbda85c 101 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 532:fe11edbda85c 102 * this list of conditions and the following disclaimer.
mbed_official 532:fe11edbda85c 103 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 532:fe11edbda85c 104 * this list of conditions and the following disclaimer in the documentation
mbed_official 532:fe11edbda85c 105 * and/or other materials provided with the distribution.
mbed_official 532:fe11edbda85c 106 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 532:fe11edbda85c 107 * may be used to endorse or promote products derived from this software
mbed_official 532:fe11edbda85c 108 * without specific prior written permission.
mbed_official 532:fe11edbda85c 109 *
mbed_official 532:fe11edbda85c 110 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 532:fe11edbda85c 111 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 532:fe11edbda85c 112 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 532:fe11edbda85c 113 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 532:fe11edbda85c 114 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 532:fe11edbda85c 115 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 532:fe11edbda85c 116 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 532:fe11edbda85c 117 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 532:fe11edbda85c 118 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 532:fe11edbda85c 119 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 532:fe11edbda85c 120 *
mbed_official 532:fe11edbda85c 121 ******************************************************************************
mbed_official 532:fe11edbda85c 122 */
mbed_official 532:fe11edbda85c 123
mbed_official 532:fe11edbda85c 124 /* Includes ------------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 125 #include "stm32f4xx_hal.h"
mbed_official 532:fe11edbda85c 126
mbed_official 532:fe11edbda85c 127 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 532:fe11edbda85c 128 * @{
mbed_official 532:fe11edbda85c 129 */
mbed_official 532:fe11edbda85c 130 /** @defgroup SPDIFRX SPDIFRX
mbed_official 532:fe11edbda85c 131 * @brief SPDIFRX HAL module driver
mbed_official 532:fe11edbda85c 132 * @{
mbed_official 532:fe11edbda85c 133 */
mbed_official 532:fe11edbda85c 134
mbed_official 532:fe11edbda85c 135 #ifdef HAL_SPDIFRX_MODULE_ENABLED
mbed_official 532:fe11edbda85c 136
mbed_official 532:fe11edbda85c 137 #if defined(STM32F446xx)
mbed_official 532:fe11edbda85c 138
mbed_official 532:fe11edbda85c 139 /* Private typedef -----------------------------------------------------------*/
mbed_official 532:fe11edbda85c 140 /* Private define ------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 141 #define SPDIFRX_TIMEOUT_VALUE 0xFFFF
mbed_official 532:fe11edbda85c 142
mbed_official 532:fe11edbda85c 143 /* Private macro -------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 144 /* Private variables ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 145 /* Private function prototypes -----------------------------------------------*/
mbed_official 532:fe11edbda85c 146 /** @addtogroup SPDIFRX_Private_Functions
mbed_official 532:fe11edbda85c 147 * @{
mbed_official 532:fe11edbda85c 148 */
mbed_official 532:fe11edbda85c 149 static void SPDIFRX_DMARxCplt(DMA_HandleTypeDef *hdma);
mbed_official 532:fe11edbda85c 150 static void SPDIFRX_DMARxHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 532:fe11edbda85c 151 static void SPDIFRX_DMACxCplt(DMA_HandleTypeDef *hdma);
mbed_official 532:fe11edbda85c 152 static void SPDIFRX_DMACxHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 532:fe11edbda85c 153 static void SPDIFRX_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 532:fe11edbda85c 154 static void SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif);
mbed_official 532:fe11edbda85c 155 static void SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif);
mbed_official 532:fe11edbda85c 156 static HAL_StatusTypeDef SPDIFRX_WaitOnFlagUntilTimeout(SPDIFRX_HandleTypeDef *hspdif, uint32_t Flag, FlagStatus Status, uint32_t Timeout);
mbed_official 532:fe11edbda85c 157 /**
mbed_official 532:fe11edbda85c 158 * @}
mbed_official 532:fe11edbda85c 159 */
mbed_official 532:fe11edbda85c 160 /* Exported functions ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 161
mbed_official 532:fe11edbda85c 162 /** @defgroup SPDIFRX_Exported_Functions SPDIFRX Exported Functions
mbed_official 532:fe11edbda85c 163 * @{
mbed_official 532:fe11edbda85c 164 */
mbed_official 532:fe11edbda85c 165
mbed_official 532:fe11edbda85c 166 /** @defgroup SPDIFRX_Exported_Functions_Group1 Initialization and de-initialization functions
mbed_official 532:fe11edbda85c 167 * @brief Initialization and Configuration functions
mbed_official 532:fe11edbda85c 168 *
mbed_official 532:fe11edbda85c 169 @verbatim
mbed_official 532:fe11edbda85c 170 ===============================================================================
mbed_official 532:fe11edbda85c 171 ##### Initialization and de-initialization functions #####
mbed_official 532:fe11edbda85c 172 ===============================================================================
mbed_official 532:fe11edbda85c 173 [..] This subsection provides a set of functions allowing to initialize and
mbed_official 532:fe11edbda85c 174 de-initialize the SPDIFRX peripheral:
mbed_official 532:fe11edbda85c 175
mbed_official 532:fe11edbda85c 176 (+) User must Implement HAL_SPDIFRX_MspInit() function in which he configures
mbed_official 532:fe11edbda85c 177 all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC ).
mbed_official 532:fe11edbda85c 178
mbed_official 532:fe11edbda85c 179 (+) Call the function HAL_SPDIFRX_Init() to configure the SPDIFRX peripheral with
mbed_official 532:fe11edbda85c 180 the selected configuration:
mbed_official 532:fe11edbda85c 181 (++) Input Selection (IN0, IN1,...)
mbed_official 532:fe11edbda85c 182 (++) Maximum allowed re-tries during synchronization phase
mbed_official 532:fe11edbda85c 183 (++) Wait for activity on SPDIF selected input
mbed_official 532:fe11edbda85c 184 (++) Channel status selection (from channel A or B)
mbed_official 532:fe11edbda85c 185 (++) Data format (LSB, MSB, ...)
mbed_official 532:fe11edbda85c 186 (++) Stereo mode
mbed_official 532:fe11edbda85c 187 (++) User bits masking (PT,C,U,V,...)
mbed_official 532:fe11edbda85c 188
mbed_official 532:fe11edbda85c 189 (+) Call the function HAL_SPDIFRX_DeInit() to restore the default configuration
mbed_official 532:fe11edbda85c 190 of the selected SPDIFRXx peripheral.
mbed_official 532:fe11edbda85c 191 @endverbatim
mbed_official 532:fe11edbda85c 192 * @{
mbed_official 532:fe11edbda85c 193 */
mbed_official 532:fe11edbda85c 194
mbed_official 532:fe11edbda85c 195 /**
mbed_official 532:fe11edbda85c 196 * @brief Initializes the SPDIFRX according to the specified parameters
mbed_official 532:fe11edbda85c 197 * in the SPDIFRX_InitTypeDef and create the associated handle.
mbed_official 532:fe11edbda85c 198 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 199 * @retval HAL status
mbed_official 532:fe11edbda85c 200 */
mbed_official 532:fe11edbda85c 201 HAL_StatusTypeDef HAL_SPDIFRX_Init(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 202 {
mbed_official 532:fe11edbda85c 203 uint32_t tmpreg = 0;
mbed_official 532:fe11edbda85c 204
mbed_official 532:fe11edbda85c 205 /* Check the SPDIFRX handle allocation */
mbed_official 532:fe11edbda85c 206 if(hspdif == NULL)
mbed_official 532:fe11edbda85c 207 {
mbed_official 532:fe11edbda85c 208 return HAL_ERROR;
mbed_official 532:fe11edbda85c 209 }
mbed_official 532:fe11edbda85c 210
mbed_official 532:fe11edbda85c 211 /* Check the SPDIFRX parameters */
mbed_official 532:fe11edbda85c 212 assert_param(IS_STEREO_MODE(hspdif->Init.StereoMode));
mbed_official 532:fe11edbda85c 213 assert_param(IS_SPDIFRX_INPUT_SELECT(hspdif->Init.InputSelection));
mbed_official 532:fe11edbda85c 214 assert_param(IS_SPDIFRX_MAX_RETRIES(hspdif->Init.Retries));
mbed_official 532:fe11edbda85c 215 assert_param(IS_SPDIFRX_WAIT_FOR_ACTIVITY(hspdif->Init.WaitForActivity));
mbed_official 532:fe11edbda85c 216 assert_param(IS_SPDIFRX_CHANNEL(hspdif->Init.ChannelSelection));
mbed_official 532:fe11edbda85c 217 assert_param(IS_SPDIFRX_DATA_FORMAT(hspdif->Init.DataFormat));
mbed_official 532:fe11edbda85c 218 assert_param(IS_PREAMBLE_TYPE_MASK(hspdif->Init.PreambleTypeMask));
mbed_official 532:fe11edbda85c 219 assert_param(IS_CHANNEL_STATUS_MASK(hspdif->Init.ChannelStatusMask));
mbed_official 532:fe11edbda85c 220 assert_param(IS_VALIDITY_MASK(hspdif->Init.ValidityBitMask));
mbed_official 532:fe11edbda85c 221 assert_param(IS_PARITY_ERROR_MASK(hspdif->Init.ParityErrorMask));
mbed_official 532:fe11edbda85c 222
mbed_official 532:fe11edbda85c 223 if(hspdif->State == HAL_SPDIFRX_STATE_RESET)
mbed_official 532:fe11edbda85c 224 {
mbed_official 532:fe11edbda85c 225 /* Allocate lock resource and initialize it */
mbed_official 532:fe11edbda85c 226 hspdif->Lock = HAL_UNLOCKED;
mbed_official 532:fe11edbda85c 227 /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
mbed_official 532:fe11edbda85c 228 HAL_SPDIFRX_MspInit(hspdif);
mbed_official 532:fe11edbda85c 229 }
mbed_official 532:fe11edbda85c 230
mbed_official 532:fe11edbda85c 231 /* SPDIFRX peripheral state is BUSY*/
mbed_official 532:fe11edbda85c 232 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
mbed_official 532:fe11edbda85c 233
mbed_official 532:fe11edbda85c 234 /* Disable SPDIFRX interface (IDLE State) */
mbed_official 532:fe11edbda85c 235 __HAL_SPDIFRX_IDLE(hspdif);
mbed_official 532:fe11edbda85c 236
mbed_official 532:fe11edbda85c 237 /* Reset the old SPDIFRX CR configuration */
mbed_official 532:fe11edbda85c 238 tmpreg = hspdif->Instance->CR;
mbed_official 532:fe11edbda85c 239
mbed_official 532:fe11edbda85c 240 tmpreg &= ~((uint16_t) SPDIFRX_CR_RXSTEO | SPDIFRX_CR_DRFMT | SPDIFRX_CR_PMSK |
mbed_official 532:fe11edbda85c 241 SPDIFRX_CR_VMSK | SPDIFRX_CR_CUMSK | SPDIFRX_CR_PTMSK |
mbed_official 532:fe11edbda85c 242 SPDIFRX_CR_CHSEL | SPDIFRX_CR_NBTR | SPDIFRX_CR_WFA |
mbed_official 532:fe11edbda85c 243 SPDIFRX_CR_INSEL);
mbed_official 532:fe11edbda85c 244
mbed_official 532:fe11edbda85c 245 /* Sets the new configuration of the SPDIFRX peripheral */
mbed_official 532:fe11edbda85c 246 tmpreg |= ((uint16_t) hspdif->Init.StereoMode |
mbed_official 532:fe11edbda85c 247 hspdif->Init.InputSelection |
mbed_official 532:fe11edbda85c 248 hspdif->Init.Retries |
mbed_official 532:fe11edbda85c 249 hspdif->Init.WaitForActivity |
mbed_official 532:fe11edbda85c 250 hspdif->Init.ChannelSelection |
mbed_official 532:fe11edbda85c 251 hspdif->Init.DataFormat |
mbed_official 532:fe11edbda85c 252 hspdif->Init.PreambleTypeMask |
mbed_official 532:fe11edbda85c 253 hspdif->Init.ChannelStatusMask |
mbed_official 532:fe11edbda85c 254 hspdif->Init.ValidityBitMask |
mbed_official 532:fe11edbda85c 255 hspdif->Init.ParityErrorMask);
mbed_official 532:fe11edbda85c 256
mbed_official 532:fe11edbda85c 257 hspdif->Instance->CR = tmpreg;
mbed_official 532:fe11edbda85c 258
mbed_official 532:fe11edbda85c 259 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 260
mbed_official 532:fe11edbda85c 261 /* SPDIFRX peripheral state is READY*/
mbed_official 532:fe11edbda85c 262 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 263
mbed_official 532:fe11edbda85c 264 return HAL_OK;
mbed_official 532:fe11edbda85c 265 }
mbed_official 532:fe11edbda85c 266
mbed_official 532:fe11edbda85c 267 /**
mbed_official 532:fe11edbda85c 268 * @brief DeInitializes the SPDIFRX peripheral
mbed_official 532:fe11edbda85c 269 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 270 * @retval HAL status
mbed_official 532:fe11edbda85c 271 */
mbed_official 532:fe11edbda85c 272 HAL_StatusTypeDef HAL_SPDIFRX_DeInit(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 273 {
mbed_official 532:fe11edbda85c 274 /* Check the SPDIFRX handle allocation */
mbed_official 532:fe11edbda85c 275 if(hspdif == NULL)
mbed_official 532:fe11edbda85c 276 {
mbed_official 532:fe11edbda85c 277 return HAL_ERROR;
mbed_official 532:fe11edbda85c 278 }
mbed_official 532:fe11edbda85c 279
mbed_official 532:fe11edbda85c 280 /* Check the parameters */
mbed_official 532:fe11edbda85c 281 assert_param(IS_SPDIFRX_ALL_INSTANCE(hspdif->Instance));
mbed_official 532:fe11edbda85c 282
mbed_official 532:fe11edbda85c 283 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
mbed_official 532:fe11edbda85c 284
mbed_official 532:fe11edbda85c 285 /* Disable SPDIFRX interface (IDLE state) */
mbed_official 532:fe11edbda85c 286 __HAL_SPDIFRX_IDLE(hspdif);
mbed_official 532:fe11edbda85c 287
mbed_official 532:fe11edbda85c 288 /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */
mbed_official 532:fe11edbda85c 289 HAL_SPDIFRX_MspDeInit(hspdif);
mbed_official 532:fe11edbda85c 290
mbed_official 532:fe11edbda85c 291 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 292
mbed_official 532:fe11edbda85c 293 /* SPDIFRX peripheral state is RESET*/
mbed_official 532:fe11edbda85c 294 hspdif->State = HAL_SPDIFRX_STATE_RESET;
mbed_official 532:fe11edbda85c 295
mbed_official 532:fe11edbda85c 296 /* Release Lock */
mbed_official 532:fe11edbda85c 297 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 298
mbed_official 532:fe11edbda85c 299 return HAL_OK;
mbed_official 532:fe11edbda85c 300 }
mbed_official 532:fe11edbda85c 301
mbed_official 532:fe11edbda85c 302 /**
mbed_official 532:fe11edbda85c 303 * @brief SPDIFRX MSP Init
mbed_official 532:fe11edbda85c 304 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 305 * @retval None
mbed_official 532:fe11edbda85c 306 */
mbed_official 532:fe11edbda85c 307 __weak void HAL_SPDIFRX_MspInit(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 308 {
mbed_official 532:fe11edbda85c 309 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 310 the HAL_SPDIFRX_MspInit could be implemented in the user file
mbed_official 532:fe11edbda85c 311 */
mbed_official 532:fe11edbda85c 312 }
mbed_official 532:fe11edbda85c 313
mbed_official 532:fe11edbda85c 314 /**
mbed_official 532:fe11edbda85c 315 * @brief SPDIFRX MSP DeInit
mbed_official 532:fe11edbda85c 316 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 317 * @retval None
mbed_official 532:fe11edbda85c 318 */
mbed_official 532:fe11edbda85c 319 __weak void HAL_SPDIFRX_MspDeInit(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 320 {
mbed_official 532:fe11edbda85c 321 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 322 the HAL_SPDIFRX_MspDeInit could be implemented in the user file
mbed_official 532:fe11edbda85c 323 */
mbed_official 532:fe11edbda85c 324 }
mbed_official 532:fe11edbda85c 325
mbed_official 532:fe11edbda85c 326 /**
mbed_official 532:fe11edbda85c 327 * @brief Sets the SPDIFRX dtat format according to the specified parameters
mbed_official 532:fe11edbda85c 328 * in the SPDIFRX_InitTypeDef.
mbed_official 532:fe11edbda85c 329 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 330 * @param sDataFormat: SPDIFRX data format
mbed_official 532:fe11edbda85c 331 * @retval HAL status
mbed_official 532:fe11edbda85c 332 */
mbed_official 532:fe11edbda85c 333 HAL_StatusTypeDef HAL_SPDIFRX_SetDataFormat(SPDIFRX_HandleTypeDef *hspdif, SPDIFRX_SetDataFormatTypeDef sDataFormat)
mbed_official 532:fe11edbda85c 334 {
mbed_official 532:fe11edbda85c 335 uint32_t tmpreg = 0;
mbed_official 532:fe11edbda85c 336
mbed_official 532:fe11edbda85c 337 /* Check the SPDIFRX handle allocation */
mbed_official 532:fe11edbda85c 338 if(hspdif == NULL)
mbed_official 532:fe11edbda85c 339 {
mbed_official 532:fe11edbda85c 340 return HAL_ERROR;
mbed_official 532:fe11edbda85c 341 }
mbed_official 532:fe11edbda85c 342
mbed_official 532:fe11edbda85c 343 /* Check the SPDIFRX parameters */
mbed_official 532:fe11edbda85c 344 assert_param(IS_STEREO_MODE(sDataFormat.StereoMode));
mbed_official 532:fe11edbda85c 345 assert_param(IS_SPDIFRX_DATA_FORMAT(sDataFormat.DataFormat));
mbed_official 532:fe11edbda85c 346 assert_param(IS_PREAMBLE_TYPE_MASK(sDataFormat.PreambleTypeMask));
mbed_official 532:fe11edbda85c 347 assert_param(IS_CHANNEL_STATUS_MASK(sDataFormat.ChannelStatusMask));
mbed_official 532:fe11edbda85c 348 assert_param(IS_VALIDITY_MASK(sDataFormat.ValidityBitMask));
mbed_official 532:fe11edbda85c 349 assert_param(IS_PARITY_ERROR_MASK(sDataFormat.ParityErrorMask));
mbed_official 532:fe11edbda85c 350
mbed_official 532:fe11edbda85c 351 /* Reset the old SPDIFRX CR configuration */
mbed_official 532:fe11edbda85c 352 tmpreg = hspdif->Instance->CR;
mbed_official 532:fe11edbda85c 353
mbed_official 532:fe11edbda85c 354 if(((tmpreg & SPDIFRX_STATE_RCV) == SPDIFRX_STATE_RCV) &&
mbed_official 532:fe11edbda85c 355 (((tmpreg & SPDIFRX_CR_DRFMT) != sDataFormat.DataFormat) ||
mbed_official 532:fe11edbda85c 356 ((tmpreg & SPDIFRX_CR_RXSTEO) != sDataFormat.StereoMode)))
mbed_official 532:fe11edbda85c 357 {
mbed_official 532:fe11edbda85c 358 return HAL_ERROR;
mbed_official 532:fe11edbda85c 359 }
mbed_official 532:fe11edbda85c 360
mbed_official 532:fe11edbda85c 361 tmpreg &= ~((uint16_t) SPDIFRX_CR_RXSTEO | SPDIFRX_CR_DRFMT | SPDIFRX_CR_PMSK |
mbed_official 532:fe11edbda85c 362 SPDIFRX_CR_VMSK | SPDIFRX_CR_CUMSK | SPDIFRX_CR_PTMSK);
mbed_official 532:fe11edbda85c 363
mbed_official 532:fe11edbda85c 364 /* Sets the new configuration of the SPDIFRX peripheral */
mbed_official 532:fe11edbda85c 365 tmpreg |= ((uint16_t) sDataFormat.StereoMode |
mbed_official 532:fe11edbda85c 366 sDataFormat.DataFormat |
mbed_official 532:fe11edbda85c 367 sDataFormat.PreambleTypeMask |
mbed_official 532:fe11edbda85c 368 sDataFormat.ChannelStatusMask |
mbed_official 532:fe11edbda85c 369 sDataFormat.ValidityBitMask |
mbed_official 532:fe11edbda85c 370 sDataFormat.ParityErrorMask);
mbed_official 532:fe11edbda85c 371
mbed_official 532:fe11edbda85c 372 hspdif->Instance->CR = tmpreg;
mbed_official 532:fe11edbda85c 373
mbed_official 532:fe11edbda85c 374 return HAL_OK;
mbed_official 532:fe11edbda85c 375 }
mbed_official 532:fe11edbda85c 376
mbed_official 532:fe11edbda85c 377 /**
mbed_official 532:fe11edbda85c 378 * @}
mbed_official 532:fe11edbda85c 379 */
mbed_official 532:fe11edbda85c 380
mbed_official 532:fe11edbda85c 381 /** @defgroup SPDIFRX_Exported_Functions_Group2 IO operation functions
mbed_official 532:fe11edbda85c 382 * @brief Data transfers functions
mbed_official 532:fe11edbda85c 383 *
mbed_official 532:fe11edbda85c 384 @verbatim
mbed_official 532:fe11edbda85c 385 ===============================================================================
mbed_official 532:fe11edbda85c 386 ##### IO operation functions #####
mbed_official 532:fe11edbda85c 387 ===============================================================================
mbed_official 532:fe11edbda85c 388 [..]
mbed_official 532:fe11edbda85c 389 This subsection provides a set of functions allowing to manage the SPDIFRX data
mbed_official 532:fe11edbda85c 390 transfers.
mbed_official 532:fe11edbda85c 391
mbed_official 532:fe11edbda85c 392 (#) There is two mode of transfer:
mbed_official 532:fe11edbda85c 393 (++) Blocking mode : The communication is performed in the polling mode.
mbed_official 532:fe11edbda85c 394 The status of all data processing is returned by the same function
mbed_official 532:fe11edbda85c 395 after finishing transfer.
mbed_official 532:fe11edbda85c 396 (++) No-Blocking mode : The communication is performed using Interrupts
mbed_official 532:fe11edbda85c 397 or DMA. These functions return the status of the transfer start-up.
mbed_official 532:fe11edbda85c 398 The end of the data processing will be indicated through the
mbed_official 532:fe11edbda85c 399 dedicated SPDIFRX IRQ when using Interrupt mode or the DMA IRQ when
mbed_official 532:fe11edbda85c 400 using DMA mode.
mbed_official 532:fe11edbda85c 401
mbed_official 532:fe11edbda85c 402 (#) Blocking mode functions are :
mbed_official 532:fe11edbda85c 403 (++) HAL_SPDIFRX_ReceiveDataFlow()
mbed_official 532:fe11edbda85c 404 (++) HAL_SPDIFRX_ReceiveControlFlow()
mbed_official 532:fe11edbda85c 405 (+@) Do not use blocking mode to receive both control and data flow at the same time.
mbed_official 532:fe11edbda85c 406
mbed_official 532:fe11edbda85c 407 (#) No-Blocking mode functions with Interrupt are :
mbed_official 532:fe11edbda85c 408 (++) HAL_SPDIFRX_ReceiveControlFlow_IT()
mbed_official 532:fe11edbda85c 409 (++) HAL_SPDIFRX_ReceiveDataFlow_IT()
mbed_official 532:fe11edbda85c 410
mbed_official 532:fe11edbda85c 411 (#) No-Blocking mode functions with DMA are :
mbed_official 532:fe11edbda85c 412 (++) HAL_SPDIFRX_ReceiveControlFlow_DMA()
mbed_official 532:fe11edbda85c 413 (++) HAL_SPDIFRX_ReceiveDataFlow_DMA()
mbed_official 532:fe11edbda85c 414
mbed_official 532:fe11edbda85c 415 (#) A set of Transfer Complete Callbacks are provided in No_Blocking mode:
mbed_official 532:fe11edbda85c 416 (++) HAL_SPDIFRX_RxCpltCallback()
mbed_official 532:fe11edbda85c 417 (++) HAL_SPDIFRX_ErrorCallback()
mbed_official 532:fe11edbda85c 418
mbed_official 532:fe11edbda85c 419 @endverbatim
mbed_official 532:fe11edbda85c 420 * @{
mbed_official 532:fe11edbda85c 421 */
mbed_official 532:fe11edbda85c 422
mbed_official 532:fe11edbda85c 423 /**
mbed_official 532:fe11edbda85c 424 * @brief Receives an amount of data (Data Flow) in blocking mode.
mbed_official 532:fe11edbda85c 425 * @param hspdif: pointer to SPDIFRX_HandleTypeDef structure that contains
mbed_official 532:fe11edbda85c 426 * the configuration information for SPDIFRX module.
mbed_official 532:fe11edbda85c 427 * @param pData: Pointer to data buffer
mbed_official 532:fe11edbda85c 428 * @param Size: Amount of data to be received
mbed_official 532:fe11edbda85c 429 * @param Timeout: Timeout duration
mbed_official 532:fe11edbda85c 430 * @retval HAL status
mbed_official 532:fe11edbda85c 431 */
mbed_official 532:fe11edbda85c 432 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 532:fe11edbda85c 433 {
mbed_official 532:fe11edbda85c 434
mbed_official 532:fe11edbda85c 435 if((pData == NULL ) || (Size == 0))
mbed_official 532:fe11edbda85c 436 {
mbed_official 532:fe11edbda85c 437 return HAL_ERROR;
mbed_official 532:fe11edbda85c 438 }
mbed_official 532:fe11edbda85c 439
mbed_official 532:fe11edbda85c 440 if(hspdif->State == HAL_SPDIFRX_STATE_READY)
mbed_official 532:fe11edbda85c 441 {
mbed_official 532:fe11edbda85c 442 /* Process Locked */
mbed_official 532:fe11edbda85c 443 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 444
mbed_official 532:fe11edbda85c 445 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
mbed_official 532:fe11edbda85c 446
mbed_official 532:fe11edbda85c 447 /* Start synchronisation */
mbed_official 532:fe11edbda85c 448 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 449
mbed_official 532:fe11edbda85c 450 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 451 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, Timeout) != HAL_OK)
mbed_official 532:fe11edbda85c 452 {
mbed_official 532:fe11edbda85c 453 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 454 }
mbed_official 532:fe11edbda85c 455
mbed_official 532:fe11edbda85c 456 /* Start reception */
mbed_official 532:fe11edbda85c 457 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 458
mbed_official 532:fe11edbda85c 459 /* Receive data flow */
mbed_official 532:fe11edbda85c 460 while(Size > 0)
mbed_official 532:fe11edbda85c 461 {
mbed_official 532:fe11edbda85c 462 /* Wait until RXNE flag is set */
mbed_official 532:fe11edbda85c 463 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 532:fe11edbda85c 464 {
mbed_official 532:fe11edbda85c 465 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 466 }
mbed_official 532:fe11edbda85c 467
mbed_official 532:fe11edbda85c 468 (*pData++) = hspdif->Instance->DR;
mbed_official 532:fe11edbda85c 469 Size--;
mbed_official 532:fe11edbda85c 470 }
mbed_official 532:fe11edbda85c 471
mbed_official 532:fe11edbda85c 472 /* SPDIFRX ready */
mbed_official 532:fe11edbda85c 473 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 474
mbed_official 532:fe11edbda85c 475 /* Process Unlocked */
mbed_official 532:fe11edbda85c 476 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 477
mbed_official 532:fe11edbda85c 478 return HAL_OK;
mbed_official 532:fe11edbda85c 479 }
mbed_official 532:fe11edbda85c 480 else
mbed_official 532:fe11edbda85c 481 {
mbed_official 532:fe11edbda85c 482 return HAL_BUSY;
mbed_official 532:fe11edbda85c 483 }
mbed_official 532:fe11edbda85c 484 }
mbed_official 532:fe11edbda85c 485
mbed_official 532:fe11edbda85c 486 /**
mbed_official 532:fe11edbda85c 487 * @brief Receives an amount of data (Control Flow) in blocking mode.
mbed_official 532:fe11edbda85c 488 * @param hspdif: pointer to a SPDIFRX_HandleTypeDef structure that contains
mbed_official 532:fe11edbda85c 489 * the configuration information for SPDIFRX module.
mbed_official 532:fe11edbda85c 490 * @param pData: Pointer to data buffer
mbed_official 532:fe11edbda85c 491 * @param Size: Amount of data to be received
mbed_official 532:fe11edbda85c 492 * @param Timeout: Timeout duration
mbed_official 532:fe11edbda85c 493 * @retval HAL status
mbed_official 532:fe11edbda85c 494 */
mbed_official 532:fe11edbda85c 495 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 532:fe11edbda85c 496 {
mbed_official 532:fe11edbda85c 497
mbed_official 532:fe11edbda85c 498 if((pData == NULL ) || (Size == 0))
mbed_official 532:fe11edbda85c 499 {
mbed_official 532:fe11edbda85c 500 return HAL_ERROR;
mbed_official 532:fe11edbda85c 501 }
mbed_official 532:fe11edbda85c 502
mbed_official 532:fe11edbda85c 503 if(hspdif->State == HAL_SPDIFRX_STATE_READY)
mbed_official 532:fe11edbda85c 504 {
mbed_official 532:fe11edbda85c 505 /* Process Locked */
mbed_official 532:fe11edbda85c 506 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 507
mbed_official 532:fe11edbda85c 508 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
mbed_official 532:fe11edbda85c 509
mbed_official 532:fe11edbda85c 510 /* Start synchronization */
mbed_official 532:fe11edbda85c 511 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 512
mbed_official 532:fe11edbda85c 513 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 514 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, Timeout) != HAL_OK)
mbed_official 532:fe11edbda85c 515 {
mbed_official 532:fe11edbda85c 516 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 517 }
mbed_official 532:fe11edbda85c 518
mbed_official 532:fe11edbda85c 519 /* Start reception */
mbed_official 532:fe11edbda85c 520 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 521
mbed_official 532:fe11edbda85c 522 /* Receive control flow */
mbed_official 532:fe11edbda85c 523 while(Size > 0)
mbed_official 532:fe11edbda85c 524 {
mbed_official 532:fe11edbda85c 525 /* Wait until CSRNE flag is set */
mbed_official 532:fe11edbda85c 526 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_CSRNE, RESET, Timeout) != HAL_OK)
mbed_official 532:fe11edbda85c 527 {
mbed_official 532:fe11edbda85c 528 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 529 }
mbed_official 532:fe11edbda85c 530
mbed_official 532:fe11edbda85c 531 (*pData++) = hspdif->Instance->CSR;
mbed_official 532:fe11edbda85c 532 Size--;
mbed_official 532:fe11edbda85c 533 }
mbed_official 532:fe11edbda85c 534
mbed_official 532:fe11edbda85c 535 /* SPDIFRX ready */
mbed_official 532:fe11edbda85c 536 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 537
mbed_official 532:fe11edbda85c 538 /* Process Unlocked */
mbed_official 532:fe11edbda85c 539 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 540
mbed_official 532:fe11edbda85c 541 return HAL_OK;
mbed_official 532:fe11edbda85c 542 }
mbed_official 532:fe11edbda85c 543 else
mbed_official 532:fe11edbda85c 544 {
mbed_official 532:fe11edbda85c 545 return HAL_BUSY;
mbed_official 532:fe11edbda85c 546 }
mbed_official 532:fe11edbda85c 547 }
mbed_official 532:fe11edbda85c 548 /**
mbed_official 532:fe11edbda85c 549 * @brief Receive an amount of data (Data Flow) in non-blocking mode with Interrupt
mbed_official 532:fe11edbda85c 550 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 551 * @param pData: a 32-bit pointer to the Receive data buffer.
mbed_official 532:fe11edbda85c 552 * @param Size: number of data sample to be received .
mbed_official 532:fe11edbda85c 553 * @retval HAL status
mbed_official 532:fe11edbda85c 554 */
mbed_official 532:fe11edbda85c 555 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
mbed_official 532:fe11edbda85c 556 {
mbed_official 532:fe11edbda85c 557 if((hspdif->State == HAL_SPDIFRX_STATE_READY) || (hspdif->State == HAL_SPDIFRX_STATE_BUSY_CX))
mbed_official 532:fe11edbda85c 558 {
mbed_official 532:fe11edbda85c 559 if((pData == NULL) || (Size == 0))
mbed_official 532:fe11edbda85c 560 {
mbed_official 532:fe11edbda85c 561 return HAL_ERROR;
mbed_official 532:fe11edbda85c 562 }
mbed_official 532:fe11edbda85c 563
mbed_official 532:fe11edbda85c 564 /* Process Locked */
mbed_official 532:fe11edbda85c 565 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 566
mbed_official 532:fe11edbda85c 567 hspdif->pRxBuffPtr = pData;
mbed_official 532:fe11edbda85c 568 hspdif->RxXferSize = Size;
mbed_official 532:fe11edbda85c 569 hspdif->RxXferCount = Size;
mbed_official 532:fe11edbda85c 570
mbed_official 532:fe11edbda85c 571 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 572
mbed_official 532:fe11edbda85c 573 /* Check if a receive process is ongoing or not */
mbed_official 532:fe11edbda85c 574 hspdif->State = HAL_SPDIFRX_STATE_BUSY_RX;
mbed_official 532:fe11edbda85c 575
mbed_official 532:fe11edbda85c 576
mbed_official 532:fe11edbda85c 577 /* Enable the SPDIFRX PE Error Interrupt */
mbed_official 532:fe11edbda85c 578 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
mbed_official 532:fe11edbda85c 579
mbed_official 532:fe11edbda85c 580 /* Enable the SPDIFRX OVR Error Interrupt */
mbed_official 532:fe11edbda85c 581 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
mbed_official 532:fe11edbda85c 582
mbed_official 532:fe11edbda85c 583 /* Process Unlocked */
mbed_official 532:fe11edbda85c 584 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 585
mbed_official 532:fe11edbda85c 586 /* Enable the SPDIFRX RXNE interrupt */
mbed_official 532:fe11edbda85c 587 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_RXNE);
mbed_official 532:fe11edbda85c 588
mbed_official 532:fe11edbda85c 589 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_SYNC || (SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != 0x00)
mbed_official 532:fe11edbda85c 590 {
mbed_official 532:fe11edbda85c 591 /* Start synchronization */
mbed_official 532:fe11edbda85c 592 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 593
mbed_official 532:fe11edbda85c 594 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 595 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, SPDIFRX_TIMEOUT_VALUE) != HAL_OK)
mbed_official 532:fe11edbda85c 596 {
mbed_official 532:fe11edbda85c 597 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 598 }
mbed_official 532:fe11edbda85c 599
mbed_official 532:fe11edbda85c 600 /* Start reception */
mbed_official 532:fe11edbda85c 601 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 602 }
mbed_official 532:fe11edbda85c 603
mbed_official 532:fe11edbda85c 604 return HAL_OK;
mbed_official 532:fe11edbda85c 605 }
mbed_official 532:fe11edbda85c 606 else
mbed_official 532:fe11edbda85c 607 {
mbed_official 532:fe11edbda85c 608 return HAL_BUSY;
mbed_official 532:fe11edbda85c 609 }
mbed_official 532:fe11edbda85c 610 }
mbed_official 532:fe11edbda85c 611
mbed_official 532:fe11edbda85c 612 /**
mbed_official 532:fe11edbda85c 613 * @brief Receive an amount of data (Control Flow) with Interrupt
mbed_official 532:fe11edbda85c 614 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 615 * @param pData: a 32-bit pointer to the Receive data buffer.
mbed_official 532:fe11edbda85c 616 * @param Size: number of data sample (Control Flow) to be received :
mbed_official 532:fe11edbda85c 617 * @retval HAL status
mbed_official 532:fe11edbda85c 618 */
mbed_official 532:fe11edbda85c 619 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
mbed_official 532:fe11edbda85c 620 {
mbed_official 532:fe11edbda85c 621 if((hspdif->State == HAL_SPDIFRX_STATE_READY) || (hspdif->State == HAL_SPDIFRX_STATE_BUSY_RX))
mbed_official 532:fe11edbda85c 622 {
mbed_official 532:fe11edbda85c 623 if((pData == NULL ) || (Size == 0))
mbed_official 532:fe11edbda85c 624 {
mbed_official 532:fe11edbda85c 625 return HAL_ERROR;
mbed_official 532:fe11edbda85c 626 }
mbed_official 532:fe11edbda85c 627
mbed_official 532:fe11edbda85c 628 /* Process Locked */
mbed_official 532:fe11edbda85c 629 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 630
mbed_official 532:fe11edbda85c 631 hspdif->pCsBuffPtr = pData;
mbed_official 532:fe11edbda85c 632 hspdif->CsXferSize = Size;
mbed_official 532:fe11edbda85c 633 hspdif->CsXferCount = Size;
mbed_official 532:fe11edbda85c 634
mbed_official 532:fe11edbda85c 635 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 636
mbed_official 532:fe11edbda85c 637 /* Check if a receive process is ongoing or not */
mbed_official 532:fe11edbda85c 638 hspdif->State = HAL_SPDIFRX_STATE_BUSY_CX;
mbed_official 532:fe11edbda85c 639
mbed_official 532:fe11edbda85c 640
mbed_official 532:fe11edbda85c 641 /* Enable the SPDIFRX PE Error Interrupt */
mbed_official 532:fe11edbda85c 642 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
mbed_official 532:fe11edbda85c 643
mbed_official 532:fe11edbda85c 644 /* Enable the SPDIFRX OVR Error Interrupt */
mbed_official 532:fe11edbda85c 645 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
mbed_official 532:fe11edbda85c 646
mbed_official 532:fe11edbda85c 647 /* Process Unlocked */
mbed_official 532:fe11edbda85c 648 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 649
mbed_official 532:fe11edbda85c 650 /* Enable the SPDIFRX CSRNE interrupt */
mbed_official 532:fe11edbda85c 651 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
mbed_official 532:fe11edbda85c 652
mbed_official 532:fe11edbda85c 653 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_SYNC || (SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != 0x00)
mbed_official 532:fe11edbda85c 654 {
mbed_official 532:fe11edbda85c 655 /* Start synchronization */
mbed_official 532:fe11edbda85c 656 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 657
mbed_official 532:fe11edbda85c 658 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 659 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, SPDIFRX_TIMEOUT_VALUE) != HAL_OK)
mbed_official 532:fe11edbda85c 660 {
mbed_official 532:fe11edbda85c 661 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 662 }
mbed_official 532:fe11edbda85c 663
mbed_official 532:fe11edbda85c 664 /* Start reception */
mbed_official 532:fe11edbda85c 665 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 666 }
mbed_official 532:fe11edbda85c 667
mbed_official 532:fe11edbda85c 668 return HAL_OK;
mbed_official 532:fe11edbda85c 669 }
mbed_official 532:fe11edbda85c 670 else
mbed_official 532:fe11edbda85c 671 {
mbed_official 532:fe11edbda85c 672 return HAL_BUSY;
mbed_official 532:fe11edbda85c 673 }
mbed_official 532:fe11edbda85c 674 }
mbed_official 532:fe11edbda85c 675
mbed_official 532:fe11edbda85c 676 /**
mbed_official 532:fe11edbda85c 677 * @brief Receive an amount of data (Data Flow) mode with DMA
mbed_official 532:fe11edbda85c 678 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 679 * @param pData: a 32-bit pointer to the Receive data buffer.
mbed_official 532:fe11edbda85c 680 * @param Size: number of data sample to be received :
mbed_official 532:fe11edbda85c 681 * @retval HAL status
mbed_official 532:fe11edbda85c 682 */
mbed_official 532:fe11edbda85c 683 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
mbed_official 532:fe11edbda85c 684 {
mbed_official 532:fe11edbda85c 685
mbed_official 532:fe11edbda85c 686 if((pData == NULL) || (Size == 0))
mbed_official 532:fe11edbda85c 687 {
mbed_official 532:fe11edbda85c 688 return HAL_ERROR;
mbed_official 532:fe11edbda85c 689 }
mbed_official 532:fe11edbda85c 690
mbed_official 532:fe11edbda85c 691 if((hspdif->State == HAL_SPDIFRX_STATE_READY) || (hspdif->State == HAL_SPDIFRX_STATE_BUSY_CX))
mbed_official 532:fe11edbda85c 692 {
mbed_official 532:fe11edbda85c 693 hspdif->pRxBuffPtr = pData;
mbed_official 532:fe11edbda85c 694 hspdif->RxXferSize = Size;
mbed_official 532:fe11edbda85c 695 hspdif->RxXferCount = Size;
mbed_official 532:fe11edbda85c 696
mbed_official 532:fe11edbda85c 697 /* Process Locked */
mbed_official 532:fe11edbda85c 698 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 699
mbed_official 532:fe11edbda85c 700 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 701 hspdif->State = HAL_SPDIFRX_STATE_BUSY_RX;
mbed_official 532:fe11edbda85c 702
mbed_official 532:fe11edbda85c 703 /* Set the SPDIFRX Rx DMA Half transfer complete callback */
mbed_official 532:fe11edbda85c 704 hspdif->hdmaDrRx->XferHalfCpltCallback = SPDIFRX_DMARxHalfCplt;
mbed_official 532:fe11edbda85c 705
mbed_official 532:fe11edbda85c 706 /* Set the SPDIFRX Rx DMA transfer complete callback */
mbed_official 532:fe11edbda85c 707 hspdif->hdmaDrRx->XferCpltCallback = SPDIFRX_DMARxCplt;
mbed_official 532:fe11edbda85c 708
mbed_official 532:fe11edbda85c 709 /* Set the DMA error callback */
mbed_official 532:fe11edbda85c 710 hspdif->hdmaDrRx->XferErrorCallback = SPDIFRX_DMAError;
mbed_official 532:fe11edbda85c 711
mbed_official 532:fe11edbda85c 712 /* Enable the DMA request */
mbed_official 532:fe11edbda85c 713 HAL_DMA_Start_IT(hspdif->hdmaDrRx, (uint32_t)&hspdif->Instance->DR, (uint32_t)hspdif->pRxBuffPtr, Size);
mbed_official 532:fe11edbda85c 714
mbed_official 532:fe11edbda85c 715 /* Enable RXDMAEN bit in SPDIFRX CR register for data flow reception*/
mbed_official 532:fe11edbda85c 716 hspdif->Instance->CR |= SPDIFRX_CR_RXDMAEN;
mbed_official 532:fe11edbda85c 717
mbed_official 532:fe11edbda85c 718 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_SYNC || (SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != 0x00)
mbed_official 532:fe11edbda85c 719 {
mbed_official 532:fe11edbda85c 720 /* Start synchronization */
mbed_official 532:fe11edbda85c 721 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 722
mbed_official 532:fe11edbda85c 723 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 724 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, SPDIFRX_TIMEOUT_VALUE) != HAL_OK)
mbed_official 532:fe11edbda85c 725 {
mbed_official 532:fe11edbda85c 726 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 727 }
mbed_official 532:fe11edbda85c 728
mbed_official 532:fe11edbda85c 729 /* Start reception */
mbed_official 532:fe11edbda85c 730 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 731 }
mbed_official 532:fe11edbda85c 732
mbed_official 532:fe11edbda85c 733 /* Process Unlocked */
mbed_official 532:fe11edbda85c 734 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 735
mbed_official 532:fe11edbda85c 736 return HAL_OK;
mbed_official 532:fe11edbda85c 737 }
mbed_official 532:fe11edbda85c 738 else
mbed_official 532:fe11edbda85c 739 {
mbed_official 532:fe11edbda85c 740 return HAL_BUSY;
mbed_official 532:fe11edbda85c 741 }
mbed_official 532:fe11edbda85c 742 }
mbed_official 532:fe11edbda85c 743
mbed_official 532:fe11edbda85c 744 /**
mbed_official 532:fe11edbda85c 745 * @brief Receive an amount of data (Control Flow) with DMA
mbed_official 532:fe11edbda85c 746 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 747 * @param pData: a 32-bit pointer to the Receive data buffer.
mbed_official 532:fe11edbda85c 748 * @param Size: number of data (Control Flow) sample to be received :
mbed_official 532:fe11edbda85c 749 * @retval HAL status
mbed_official 532:fe11edbda85c 750 */
mbed_official 532:fe11edbda85c 751 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
mbed_official 532:fe11edbda85c 752 {
mbed_official 532:fe11edbda85c 753 if((pData == NULL) || (Size == 0))
mbed_official 532:fe11edbda85c 754 {
mbed_official 532:fe11edbda85c 755 return HAL_ERROR;
mbed_official 532:fe11edbda85c 756 }
mbed_official 532:fe11edbda85c 757
mbed_official 532:fe11edbda85c 758 if((hspdif->State == HAL_SPDIFRX_STATE_READY) || (hspdif->State == HAL_SPDIFRX_STATE_BUSY_RX))
mbed_official 532:fe11edbda85c 759 {
mbed_official 532:fe11edbda85c 760 hspdif->pCsBuffPtr = pData;
mbed_official 532:fe11edbda85c 761 hspdif->CsXferSize = Size;
mbed_official 532:fe11edbda85c 762 hspdif->CsXferCount = Size;
mbed_official 532:fe11edbda85c 763
mbed_official 532:fe11edbda85c 764 /* Process Locked */
mbed_official 532:fe11edbda85c 765 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 766
mbed_official 532:fe11edbda85c 767 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
mbed_official 532:fe11edbda85c 768 hspdif->State = HAL_SPDIFRX_STATE_BUSY_CX;
mbed_official 532:fe11edbda85c 769
mbed_official 532:fe11edbda85c 770 /* Set the SPDIFRX Rx DMA Half transfer complete callback */
mbed_official 532:fe11edbda85c 771 hspdif->hdmaCsRx->XferHalfCpltCallback = SPDIFRX_DMACxHalfCplt;
mbed_official 532:fe11edbda85c 772
mbed_official 532:fe11edbda85c 773 /* Set the SPDIFRX Rx DMA transfer complete callback */
mbed_official 532:fe11edbda85c 774 hspdif->hdmaCsRx->XferCpltCallback = SPDIFRX_DMACxCplt;
mbed_official 532:fe11edbda85c 775
mbed_official 532:fe11edbda85c 776 /* Set the DMA error callback */
mbed_official 532:fe11edbda85c 777 hspdif->hdmaCsRx->XferErrorCallback = SPDIFRX_DMAError;
mbed_official 532:fe11edbda85c 778
mbed_official 532:fe11edbda85c 779 /* Enable the DMA request */
mbed_official 532:fe11edbda85c 780 HAL_DMA_Start_IT(hspdif->hdmaCsRx, (uint32_t)&hspdif->Instance->CSR, (uint32_t)hspdif->pCsBuffPtr, Size);
mbed_official 532:fe11edbda85c 781
mbed_official 532:fe11edbda85c 782 /* Enable CBDMAEN bit in SPDIFRX CR register for control flow reception*/
mbed_official 532:fe11edbda85c 783 hspdif->Instance->CR |= SPDIFRX_CR_CBDMAEN;
mbed_official 532:fe11edbda85c 784
mbed_official 532:fe11edbda85c 785 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_SYNC || (SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != 0x00)
mbed_official 532:fe11edbda85c 786 {
mbed_official 532:fe11edbda85c 787 /* Start synchronization */
mbed_official 532:fe11edbda85c 788 __HAL_SPDIFRX_SYNC(hspdif);
mbed_official 532:fe11edbda85c 789
mbed_official 532:fe11edbda85c 790 /* Wait until SYNCD flag is set */
mbed_official 532:fe11edbda85c 791 if(SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, SPDIFRX_TIMEOUT_VALUE) != HAL_OK)
mbed_official 532:fe11edbda85c 792 {
mbed_official 532:fe11edbda85c 793 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 794 }
mbed_official 532:fe11edbda85c 795
mbed_official 532:fe11edbda85c 796 /* Start reception */
mbed_official 532:fe11edbda85c 797 __HAL_SPDIFRX_RCV(hspdif);
mbed_official 532:fe11edbda85c 798 }
mbed_official 532:fe11edbda85c 799
mbed_official 532:fe11edbda85c 800 /* Process Unlocked */
mbed_official 532:fe11edbda85c 801 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 802
mbed_official 532:fe11edbda85c 803 return HAL_OK;
mbed_official 532:fe11edbda85c 804 }
mbed_official 532:fe11edbda85c 805 else
mbed_official 532:fe11edbda85c 806 {
mbed_official 532:fe11edbda85c 807 return HAL_BUSY;
mbed_official 532:fe11edbda85c 808 }
mbed_official 532:fe11edbda85c 809 }
mbed_official 532:fe11edbda85c 810
mbed_official 532:fe11edbda85c 811 /**
mbed_official 532:fe11edbda85c 812 * @brief stop the audio stream receive from the Media.
mbed_official 532:fe11edbda85c 813 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 814 * @retval None
mbed_official 532:fe11edbda85c 815 */
mbed_official 532:fe11edbda85c 816 HAL_StatusTypeDef HAL_SPDIFRX_DMAStop(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 817 {
mbed_official 532:fe11edbda85c 818 /* Process Locked */
mbed_official 532:fe11edbda85c 819 __HAL_LOCK(hspdif);
mbed_official 532:fe11edbda85c 820
mbed_official 532:fe11edbda85c 821 /* Disable the SPDIFRX DMA requests */
mbed_official 532:fe11edbda85c 822 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_RXDMAEN);
mbed_official 532:fe11edbda85c 823 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_CBDMAEN);
mbed_official 532:fe11edbda85c 824
mbed_official 532:fe11edbda85c 825 /* Disable the SPDIFRX DMA channel */
mbed_official 532:fe11edbda85c 826 __HAL_DMA_DISABLE(hspdif->hdmaDrRx);
mbed_official 532:fe11edbda85c 827 __HAL_DMA_DISABLE(hspdif->hdmaCsRx);
mbed_official 532:fe11edbda85c 828
mbed_official 532:fe11edbda85c 829 /* Disable SPDIFRX peripheral */
mbed_official 532:fe11edbda85c 830 __HAL_SPDIFRX_IDLE(hspdif);
mbed_official 532:fe11edbda85c 831
mbed_official 532:fe11edbda85c 832 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 833
mbed_official 532:fe11edbda85c 834 /* Process Unlocked */
mbed_official 532:fe11edbda85c 835 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 836
mbed_official 532:fe11edbda85c 837 return HAL_OK;
mbed_official 532:fe11edbda85c 838 }
mbed_official 532:fe11edbda85c 839
mbed_official 532:fe11edbda85c 840 /**
mbed_official 532:fe11edbda85c 841 * @brief This function handles SPDIFRX interrupt request.
mbed_official 532:fe11edbda85c 842 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 843 * @retval HAL status
mbed_official 532:fe11edbda85c 844 */
mbed_official 532:fe11edbda85c 845 void HAL_SPDIFRX_IRQHandler(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 846 {
mbed_official 532:fe11edbda85c 847 /* SPDIFRX in mode Data Flow Reception ------------------------------------------------*/
mbed_official 532:fe11edbda85c 848 if((__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_RXNE) != RESET) && (__HAL_SPDIFRX_GET_IT_SOURCE(hspdif, SPDIFRX_IT_RXNE) != RESET))
mbed_official 532:fe11edbda85c 849 {
mbed_official 532:fe11edbda85c 850 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_RXNE);
mbed_official 532:fe11edbda85c 851 SPDIFRX_ReceiveDataFlow_IT(hspdif);
mbed_official 532:fe11edbda85c 852 }
mbed_official 532:fe11edbda85c 853
mbed_official 532:fe11edbda85c 854 /* SPDIFRX in mode Control Flow Reception ------------------------------------------------*/
mbed_official 532:fe11edbda85c 855 if((__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_CSRNE) != RESET) && (__HAL_SPDIFRX_GET_IT_SOURCE(hspdif, SPDIFRX_IT_CSRNE) != RESET))
mbed_official 532:fe11edbda85c 856 {
mbed_official 532:fe11edbda85c 857 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_CSRNE);
mbed_official 532:fe11edbda85c 858 SPDIFRX_ReceiveControlFlow_IT(hspdif);
mbed_official 532:fe11edbda85c 859 }
mbed_official 532:fe11edbda85c 860
mbed_official 532:fe11edbda85c 861 /* SPDIFRX Overrun error interrupt occurred ---------------------------------*/
mbed_official 532:fe11edbda85c 862 if((__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_OVR) != RESET) && (__HAL_SPDIFRX_GET_IT_SOURCE(hspdif, SPDIFRX_IT_OVRIE) != RESET))
mbed_official 532:fe11edbda85c 863 {
mbed_official 532:fe11edbda85c 864 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_FLAG_OVR);
mbed_official 532:fe11edbda85c 865
mbed_official 532:fe11edbda85c 866 /* Change the SPDIFRX error code */
mbed_official 532:fe11edbda85c 867 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_OVR;
mbed_official 532:fe11edbda85c 868
mbed_official 532:fe11edbda85c 869 /* the transfer is not stopped */
mbed_official 532:fe11edbda85c 870 HAL_SPDIFRX_ErrorCallback(hspdif);
mbed_official 532:fe11edbda85c 871 }
mbed_official 532:fe11edbda85c 872
mbed_official 532:fe11edbda85c 873 /* SPDIFRX Parity error interrupt occurred ---------------------------------*/
mbed_official 532:fe11edbda85c 874 if((__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_PERR) != RESET) && (__HAL_SPDIFRX_GET_IT_SOURCE(hspdif, SPDIFRX_IT_PERRIE) != RESET))
mbed_official 532:fe11edbda85c 875 {
mbed_official 532:fe11edbda85c 876 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_FLAG_PERR);
mbed_official 532:fe11edbda85c 877
mbed_official 532:fe11edbda85c 878 /* Change the SPDIFRX error code */
mbed_official 532:fe11edbda85c 879 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_PE;
mbed_official 532:fe11edbda85c 880
mbed_official 532:fe11edbda85c 881 /* the transfer is not stopped */
mbed_official 532:fe11edbda85c 882 HAL_SPDIFRX_ErrorCallback(hspdif);
mbed_official 532:fe11edbda85c 883 }
mbed_official 532:fe11edbda85c 884
mbed_official 532:fe11edbda85c 885 }
mbed_official 532:fe11edbda85c 886
mbed_official 532:fe11edbda85c 887 /**
mbed_official 532:fe11edbda85c 888 * @brief Rx Transfer (Data flow) half completed callbacks
mbed_official 532:fe11edbda85c 889 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 890 * @retval None
mbed_official 532:fe11edbda85c 891 */
mbed_official 532:fe11edbda85c 892 __weak void HAL_SPDIFRX_RxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 893 {
mbed_official 532:fe11edbda85c 894 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 895 the HAL_SPDIFRX_RxCpltCallback could be implemented in the user file
mbed_official 532:fe11edbda85c 896 */
mbed_official 532:fe11edbda85c 897 }
mbed_official 532:fe11edbda85c 898
mbed_official 532:fe11edbda85c 899 /**
mbed_official 532:fe11edbda85c 900 * @brief Rx Transfer (Data flow) completed callbacks
mbed_official 532:fe11edbda85c 901 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 902 * @retval None
mbed_official 532:fe11edbda85c 903 */
mbed_official 532:fe11edbda85c 904 __weak void HAL_SPDIFRX_RxCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 905 {
mbed_official 532:fe11edbda85c 906 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 907 the HAL_SPDIFRX_RxCpltCallback could be implemented in the user file
mbed_official 532:fe11edbda85c 908 */
mbed_official 532:fe11edbda85c 909 }
mbed_official 532:fe11edbda85c 910
mbed_official 532:fe11edbda85c 911 /**
mbed_official 532:fe11edbda85c 912 * @brief Rx (Control flow) Transfer half completed callbacks
mbed_official 532:fe11edbda85c 913 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 914 * @retval None
mbed_official 532:fe11edbda85c 915 */
mbed_official 532:fe11edbda85c 916 __weak void HAL_SPDIFRX_CxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 917 {
mbed_official 532:fe11edbda85c 918 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 919 the HAL_SPDIFRX_RxCpltCallback could be implemented in the user file
mbed_official 532:fe11edbda85c 920 */
mbed_official 532:fe11edbda85c 921 }
mbed_official 532:fe11edbda85c 922
mbed_official 532:fe11edbda85c 923 /**
mbed_official 532:fe11edbda85c 924 * @brief Rx Transfer (Control flow) completed callbacks
mbed_official 532:fe11edbda85c 925 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 926 * @retval None
mbed_official 532:fe11edbda85c 927 */
mbed_official 532:fe11edbda85c 928 __weak void HAL_SPDIFRX_CxCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 929 {
mbed_official 532:fe11edbda85c 930 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 931 the HAL_SPDIFRX_RxCpltCallback could be implemented in the user file
mbed_official 532:fe11edbda85c 932 */
mbed_official 532:fe11edbda85c 933 }
mbed_official 532:fe11edbda85c 934
mbed_official 532:fe11edbda85c 935 /**
mbed_official 532:fe11edbda85c 936 * @brief SPDIFRX error callbacks
mbed_official 532:fe11edbda85c 937 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 938 * @retval None
mbed_official 532:fe11edbda85c 939 */
mbed_official 532:fe11edbda85c 940 __weak void HAL_SPDIFRX_ErrorCallback(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 941 {
mbed_official 532:fe11edbda85c 942 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 943 the HAL_SPDIFRX_ErrorCallback could be implemented in the user file
mbed_official 532:fe11edbda85c 944 */
mbed_official 532:fe11edbda85c 945 }
mbed_official 532:fe11edbda85c 946
mbed_official 532:fe11edbda85c 947 /**
mbed_official 532:fe11edbda85c 948 * @}
mbed_official 532:fe11edbda85c 949 */
mbed_official 532:fe11edbda85c 950
mbed_official 532:fe11edbda85c 951 /** @defgroup SPDIFRX_Exported_Functions_Group3 Peripheral State and Errors functions
mbed_official 532:fe11edbda85c 952 * @brief Peripheral State functions
mbed_official 532:fe11edbda85c 953 *
mbed_official 532:fe11edbda85c 954 @verbatim
mbed_official 532:fe11edbda85c 955 ===============================================================================
mbed_official 532:fe11edbda85c 956 ##### Peripheral State and Errors functions #####
mbed_official 532:fe11edbda85c 957 ===============================================================================
mbed_official 532:fe11edbda85c 958 [..]
mbed_official 532:fe11edbda85c 959 This subsection permit to get in run-time the status of the peripheral
mbed_official 532:fe11edbda85c 960 and the data flow.
mbed_official 532:fe11edbda85c 961
mbed_official 532:fe11edbda85c 962 @endverbatim
mbed_official 532:fe11edbda85c 963 * @{
mbed_official 532:fe11edbda85c 964 */
mbed_official 532:fe11edbda85c 965
mbed_official 532:fe11edbda85c 966 /**
mbed_official 532:fe11edbda85c 967 * @brief Return the SPDIFRX state
mbed_official 532:fe11edbda85c 968 * @param hspdif : SPDIFRX handle
mbed_official 532:fe11edbda85c 969 * @retval HAL state
mbed_official 532:fe11edbda85c 970 */
mbed_official 532:fe11edbda85c 971 HAL_SPDIFRX_StateTypeDef HAL_SPDIFRX_GetState(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 972 {
mbed_official 532:fe11edbda85c 973 return hspdif->State;
mbed_official 532:fe11edbda85c 974 }
mbed_official 532:fe11edbda85c 975
mbed_official 532:fe11edbda85c 976 /**
mbed_official 532:fe11edbda85c 977 * @brief Return the SPDIFRX error code
mbed_official 532:fe11edbda85c 978 * @param hspdif : SPDIFRX handle
mbed_official 532:fe11edbda85c 979 * @retval SPDIFRX Error Code
mbed_official 532:fe11edbda85c 980 */
mbed_official 532:fe11edbda85c 981 uint32_t HAL_SPDIFRX_GetError(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 982 {
mbed_official 532:fe11edbda85c 983 return hspdif->ErrorCode;
mbed_official 532:fe11edbda85c 984 }
mbed_official 532:fe11edbda85c 985
mbed_official 532:fe11edbda85c 986 /**
mbed_official 532:fe11edbda85c 987 * @}
mbed_official 532:fe11edbda85c 988 */
mbed_official 532:fe11edbda85c 989
mbed_official 532:fe11edbda85c 990 /**
mbed_official 532:fe11edbda85c 991 * @brief DMA SPDIFRX receive process (Data flow) complete callback
mbed_official 532:fe11edbda85c 992 * @param hdma : DMA handle
mbed_official 532:fe11edbda85c 993 * @retval None
mbed_official 532:fe11edbda85c 994 */
mbed_official 532:fe11edbda85c 995 static void SPDIFRX_DMARxCplt(DMA_HandleTypeDef *hdma)
mbed_official 532:fe11edbda85c 996 {
mbed_official 532:fe11edbda85c 997 SPDIFRX_HandleTypeDef* hspdif = ( SPDIFRX_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 532:fe11edbda85c 998
mbed_official 532:fe11edbda85c 999 /* Disable Rx DMA Request */
mbed_official 532:fe11edbda85c 1000 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_RXDMAEN);
mbed_official 532:fe11edbda85c 1001 hspdif->RxXferCount = 0;
mbed_official 532:fe11edbda85c 1002
mbed_official 532:fe11edbda85c 1003 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1004 HAL_SPDIFRX_RxCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1005 }
mbed_official 532:fe11edbda85c 1006
mbed_official 532:fe11edbda85c 1007 /**
mbed_official 532:fe11edbda85c 1008 * @brief DMA SPDIFRX receive process (Data flow) half complete callback
mbed_official 532:fe11edbda85c 1009 * @param hdma : DMA handle
mbed_official 532:fe11edbda85c 1010 * @retval None
mbed_official 532:fe11edbda85c 1011 */
mbed_official 532:fe11edbda85c 1012 static void SPDIFRX_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 532:fe11edbda85c 1013 {
mbed_official 532:fe11edbda85c 1014 SPDIFRX_HandleTypeDef* hspdif = (SPDIFRX_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 532:fe11edbda85c 1015
mbed_official 532:fe11edbda85c 1016 HAL_SPDIFRX_RxHalfCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1017 }
mbed_official 532:fe11edbda85c 1018
mbed_official 532:fe11edbda85c 1019
mbed_official 532:fe11edbda85c 1020 /**
mbed_official 532:fe11edbda85c 1021 * @brief DMA SPDIFRX receive process (Control flow) complete callback
mbed_official 532:fe11edbda85c 1022 * @param hdma : DMA handle
mbed_official 532:fe11edbda85c 1023 * @retval None
mbed_official 532:fe11edbda85c 1024 */
mbed_official 532:fe11edbda85c 1025 static void SPDIFRX_DMACxCplt(DMA_HandleTypeDef *hdma)
mbed_official 532:fe11edbda85c 1026 {
mbed_official 532:fe11edbda85c 1027 SPDIFRX_HandleTypeDef* hspdif = ( SPDIFRX_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 532:fe11edbda85c 1028
mbed_official 532:fe11edbda85c 1029 /* Disable Cb DMA Request */
mbed_official 532:fe11edbda85c 1030 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_CBDMAEN);
mbed_official 532:fe11edbda85c 1031 hspdif->CsXferCount = 0;
mbed_official 532:fe11edbda85c 1032
mbed_official 532:fe11edbda85c 1033 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1034 HAL_SPDIFRX_CxCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1035 }
mbed_official 532:fe11edbda85c 1036
mbed_official 532:fe11edbda85c 1037 /**
mbed_official 532:fe11edbda85c 1038 * @brief DMA SPDIFRX receive process (Control flow) half complete callback
mbed_official 532:fe11edbda85c 1039 * @param hdma : DMA handle
mbed_official 532:fe11edbda85c 1040 * @retval None
mbed_official 532:fe11edbda85c 1041 */
mbed_official 532:fe11edbda85c 1042 static void SPDIFRX_DMACxHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 532:fe11edbda85c 1043 {
mbed_official 532:fe11edbda85c 1044 SPDIFRX_HandleTypeDef* hspdif = (SPDIFRX_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 532:fe11edbda85c 1045
mbed_official 532:fe11edbda85c 1046 HAL_SPDIFRX_CxHalfCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1047 }
mbed_official 532:fe11edbda85c 1048
mbed_official 532:fe11edbda85c 1049 /**
mbed_official 532:fe11edbda85c 1050 * @brief DMA SPDIFRX communication error callback
mbed_official 532:fe11edbda85c 1051 * @param hdma : DMA handle
mbed_official 532:fe11edbda85c 1052 * @retval None
mbed_official 532:fe11edbda85c 1053 */
mbed_official 532:fe11edbda85c 1054 static void SPDIFRX_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 532:fe11edbda85c 1055 {
mbed_official 532:fe11edbda85c 1056 SPDIFRX_HandleTypeDef* hspdif = ( SPDIFRX_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 532:fe11edbda85c 1057
mbed_official 532:fe11edbda85c 1058 /* Disable Rx and Cb DMA Request */
mbed_official 532:fe11edbda85c 1059 hspdif->Instance->CR &= (uint16_t)(~(SPDIFRX_CR_RXDMAEN | SPDIFRX_CR_CBDMAEN));
mbed_official 532:fe11edbda85c 1060 hspdif->RxXferCount = 0;
mbed_official 532:fe11edbda85c 1061
mbed_official 532:fe11edbda85c 1062 hspdif->State= HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1063
mbed_official 532:fe11edbda85c 1064 /* Set the error code and execute error callback*/
mbed_official 532:fe11edbda85c 1065 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_DMA;
mbed_official 532:fe11edbda85c 1066 HAL_SPDIFRX_ErrorCallback(hspdif);
mbed_official 532:fe11edbda85c 1067 }
mbed_official 532:fe11edbda85c 1068
mbed_official 532:fe11edbda85c 1069
mbed_official 532:fe11edbda85c 1070 /**
mbed_official 532:fe11edbda85c 1071 * @brief Receive an amount of data (Data Flow) with Interrupt
mbed_official 532:fe11edbda85c 1072 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 1073 * @retval None
mbed_official 532:fe11edbda85c 1074 */
mbed_official 532:fe11edbda85c 1075 static void SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 1076 {
mbed_official 532:fe11edbda85c 1077 /* Receive data */
mbed_official 532:fe11edbda85c 1078 (*hspdif->pRxBuffPtr++) = hspdif->Instance->DR;
mbed_official 532:fe11edbda85c 1079 hspdif->RxXferCount--;
mbed_official 532:fe11edbda85c 1080
mbed_official 532:fe11edbda85c 1081 if(hspdif->RxXferCount == 0)
mbed_official 532:fe11edbda85c 1082 {
mbed_official 532:fe11edbda85c 1083 /* Disable RXNE/PE and OVR interrupts */
mbed_official 532:fe11edbda85c 1084 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE | SPDIFRX_IT_PERRIE | SPDIFRX_IT_RXNE);
mbed_official 532:fe11edbda85c 1085
mbed_official 532:fe11edbda85c 1086 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1087
mbed_official 532:fe11edbda85c 1088 /* Process Unlocked */
mbed_official 532:fe11edbda85c 1089 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 1090
mbed_official 532:fe11edbda85c 1091 HAL_SPDIFRX_RxCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1092 }
mbed_official 532:fe11edbda85c 1093 }
mbed_official 532:fe11edbda85c 1094
mbed_official 532:fe11edbda85c 1095 /**
mbed_official 532:fe11edbda85c 1096 * @brief Receive an amount of data (Control Flow) with Interrupt
mbed_official 532:fe11edbda85c 1097 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 1098 * @retval None
mbed_official 532:fe11edbda85c 1099 */
mbed_official 532:fe11edbda85c 1100 static void SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif)
mbed_official 532:fe11edbda85c 1101 {
mbed_official 532:fe11edbda85c 1102 /* Receive data */
mbed_official 532:fe11edbda85c 1103 (*hspdif->pCsBuffPtr++) = hspdif->Instance->CSR;
mbed_official 532:fe11edbda85c 1104 hspdif->CsXferCount--;
mbed_official 532:fe11edbda85c 1105
mbed_official 532:fe11edbda85c 1106 if(hspdif->CsXferCount == 0)
mbed_official 532:fe11edbda85c 1107 {
mbed_official 532:fe11edbda85c 1108 /* Disable CSRNE interrupt */
mbed_official 532:fe11edbda85c 1109 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
mbed_official 532:fe11edbda85c 1110
mbed_official 532:fe11edbda85c 1111 hspdif->State = HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1112
mbed_official 532:fe11edbda85c 1113 /* Process Unlocked */
mbed_official 532:fe11edbda85c 1114 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 1115
mbed_official 532:fe11edbda85c 1116 HAL_SPDIFRX_CxCpltCallback(hspdif);
mbed_official 532:fe11edbda85c 1117 }
mbed_official 532:fe11edbda85c 1118 }
mbed_official 532:fe11edbda85c 1119
mbed_official 532:fe11edbda85c 1120 /**
mbed_official 532:fe11edbda85c 1121 * @brief This function handles SPDIFRX Communication Timeout.
mbed_official 532:fe11edbda85c 1122 * @param hspdif: SPDIFRX handle
mbed_official 532:fe11edbda85c 1123 * @param Flag: Flag checked
mbed_official 532:fe11edbda85c 1124 * @param Status: Value of the flag expected
mbed_official 532:fe11edbda85c 1125 * @param Timeout: Duration of the timeout
mbed_official 532:fe11edbda85c 1126 * @retval HAL status
mbed_official 532:fe11edbda85c 1127 */
mbed_official 532:fe11edbda85c 1128 static HAL_StatusTypeDef SPDIFRX_WaitOnFlagUntilTimeout(SPDIFRX_HandleTypeDef *hspdif, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
mbed_official 532:fe11edbda85c 1129 {
mbed_official 532:fe11edbda85c 1130 uint32_t tickstart = 0;
mbed_official 532:fe11edbda85c 1131
mbed_official 532:fe11edbda85c 1132 /* Get tick */
mbed_official 532:fe11edbda85c 1133 tickstart = HAL_GetTick();
mbed_official 532:fe11edbda85c 1134
mbed_official 532:fe11edbda85c 1135 /* Wait until flag is set */
mbed_official 532:fe11edbda85c 1136 if(Status == RESET)
mbed_official 532:fe11edbda85c 1137 {
mbed_official 532:fe11edbda85c 1138 while(__HAL_SPDIFRX_GET_FLAG(hspdif, Flag) == RESET)
mbed_official 532:fe11edbda85c 1139 {
mbed_official 532:fe11edbda85c 1140 /* Check for the Timeout */
mbed_official 532:fe11edbda85c 1141 if(Timeout != HAL_MAX_DELAY)
mbed_official 532:fe11edbda85c 1142 {
mbed_official 532:fe11edbda85c 1143 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 532:fe11edbda85c 1144 {
mbed_official 532:fe11edbda85c 1145 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 532:fe11edbda85c 1146 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
mbed_official 532:fe11edbda85c 1147 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
mbed_official 532:fe11edbda85c 1148 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
mbed_official 532:fe11edbda85c 1149 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
mbed_official 532:fe11edbda85c 1150 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
mbed_official 532:fe11edbda85c 1151 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
mbed_official 532:fe11edbda85c 1152 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
mbed_official 532:fe11edbda85c 1153
mbed_official 532:fe11edbda85c 1154 hspdif->State= HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1155
mbed_official 532:fe11edbda85c 1156 /* Process Unlocked */
mbed_official 532:fe11edbda85c 1157 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 1158
mbed_official 532:fe11edbda85c 1159 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 1160 }
mbed_official 532:fe11edbda85c 1161 }
mbed_official 532:fe11edbda85c 1162 }
mbed_official 532:fe11edbda85c 1163 }
mbed_official 532:fe11edbda85c 1164 else
mbed_official 532:fe11edbda85c 1165 {
mbed_official 532:fe11edbda85c 1166 while(__HAL_SPDIFRX_GET_FLAG(hspdif, Flag) != RESET)
mbed_official 532:fe11edbda85c 1167 {
mbed_official 532:fe11edbda85c 1168 /* Check for the Timeout */
mbed_official 532:fe11edbda85c 1169 if(Timeout != HAL_MAX_DELAY)
mbed_official 532:fe11edbda85c 1170 {
mbed_official 532:fe11edbda85c 1171 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 532:fe11edbda85c 1172 {
mbed_official 532:fe11edbda85c 1173 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 532:fe11edbda85c 1174 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
mbed_official 532:fe11edbda85c 1175 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
mbed_official 532:fe11edbda85c 1176 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
mbed_official 532:fe11edbda85c 1177 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
mbed_official 532:fe11edbda85c 1178 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
mbed_official 532:fe11edbda85c 1179 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
mbed_official 532:fe11edbda85c 1180 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
mbed_official 532:fe11edbda85c 1181
mbed_official 532:fe11edbda85c 1182 hspdif->State= HAL_SPDIFRX_STATE_READY;
mbed_official 532:fe11edbda85c 1183
mbed_official 532:fe11edbda85c 1184 /* Process Unlocked */
mbed_official 532:fe11edbda85c 1185 __HAL_UNLOCK(hspdif);
mbed_official 532:fe11edbda85c 1186
mbed_official 532:fe11edbda85c 1187 return HAL_TIMEOUT;
mbed_official 532:fe11edbda85c 1188 }
mbed_official 532:fe11edbda85c 1189 }
mbed_official 532:fe11edbda85c 1190 }
mbed_official 532:fe11edbda85c 1191 }
mbed_official 532:fe11edbda85c 1192 return HAL_OK;
mbed_official 532:fe11edbda85c 1193 }
mbed_official 532:fe11edbda85c 1194
mbed_official 532:fe11edbda85c 1195 /**
mbed_official 532:fe11edbda85c 1196 * @}
mbed_official 532:fe11edbda85c 1197 */
mbed_official 532:fe11edbda85c 1198 #endif /* STM32F446xx */
mbed_official 532:fe11edbda85c 1199
mbed_official 532:fe11edbda85c 1200 #endif /* HAL_SPDIFRX_MODULE_ENABLED */
mbed_official 532:fe11edbda85c 1201 /**
mbed_official 532:fe11edbda85c 1202 * @}
mbed_official 532:fe11edbda85c 1203 */
mbed_official 532:fe11edbda85c 1204
mbed_official 532:fe11edbda85c 1205 /**
mbed_official 532:fe11edbda85c 1206 * @}
mbed_official 532:fe11edbda85c 1207 */
mbed_official 532:fe11edbda85c 1208
mbed_official 532:fe11edbda85c 1209 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
mbed_official 532:fe11edbda85c 1210