STM32F103xB HAL User Manual
stm32f1xx_hal_dma_ex.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f1xx_hal_dma_ex.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of DMA HAL extension module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                        opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef __STM32F1xx_HAL_DMA_EX_H
00022 #define __STM32F1xx_HAL_DMA_EX_H
00023 
00024 #ifdef __cplusplus
00025  extern "C" {
00026 #endif
00027 
00028 /* Includes ------------------------------------------------------------------*/
00029 #include "stm32f1xx_hal_def.h"
00030 
00031 /** @addtogroup STM32F1xx_HAL_Driver
00032   * @{
00033   */
00034 
00035 /** @defgroup DMAEx DMAEx
00036   * @{
00037   */
00038 
00039 /* Exported types ------------------------------------------------------------*/ 
00040 /* Exported constants --------------------------------------------------------*/
00041 /* Exported macro ------------------------------------------------------------*/
00042 /** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros
00043   * @{
00044   */
00045 /* Interrupt & Flag management */
00046 #if defined (STM32F100xE) || defined (STM32F101xE) || defined (STM32F101xG) || defined (STM32F103xE) || \
00047     defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC)
00048 /** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices
00049   * @{
00050   */
00051 
00052 /**
00053   * @brief  Returns the current DMA Channel transfer complete flag.
00054   * @param  __HANDLE__: DMA handle
00055   * @retval The specified transfer complete flag index.
00056   */
00057 #define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \
00058 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\
00059  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\
00060  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\
00061  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\
00062  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\
00063  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\
00064  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\
00065  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\
00066  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\
00067  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\
00068  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\
00069    DMA_FLAG_TC5)
00070 
00071 /**
00072   * @brief  Returns the current DMA Channel half transfer complete flag.
00073   * @param  __HANDLE__: DMA handle
00074   * @retval The specified half transfer complete flag index.
00075   */      
00076 #define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\
00077 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\
00078  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\
00079  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\
00080  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\
00081  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\
00082  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\
00083  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\
00084  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\
00085  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\
00086  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\
00087  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\
00088    DMA_FLAG_HT5)
00089 
00090 /**
00091   * @brief  Returns the current DMA Channel transfer error flag.
00092   * @param  __HANDLE__: DMA handle
00093   * @retval The specified transfer error flag index.
00094   */
00095 #define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\
00096 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\
00097  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\
00098  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\
00099  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\
00100  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\
00101  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\
00102  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\
00103  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\
00104  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\
00105  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\
00106  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\
00107    DMA_FLAG_TE5)
00108 
00109 /**
00110   * @brief  Return the current DMA Channel Global interrupt flag.
00111   * @param  __HANDLE__: DMA handle
00112   * @retval The specified transfer error flag index.
00113   */
00114 #define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\
00115 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\
00116  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\
00117  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\
00118  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\
00119  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\
00120  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\
00121  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_GL7 :\
00122  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_GL1 :\
00123  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_GL2 :\
00124  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_GL3 :\
00125  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_GL4 :\
00126    DMA_FLAG_GL5)
00127    
00128 /**
00129   * @brief  Get the DMA Channel pending flags.
00130   * @param  __HANDLE__: DMA handle
00131   * @param  __FLAG__: Get the specified flag.
00132   *          This parameter can be any combination of the following values:
00133   *            @arg DMA_FLAG_TCx:  Transfer complete flag
00134   *            @arg DMA_FLAG_HTx:  Half transfer complete flag
00135   *            @arg DMA_FLAG_TEx:  Transfer error flag
00136   *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.   
00137   * @retval The state of FLAG (SET or RESET).
00138   */
00139 #define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\
00140 (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->ISR & (__FLAG__)) :\
00141   (DMA1->ISR & (__FLAG__)))
00142 
00143 /**
00144   * @brief  Clears the DMA Channel pending flags.
00145   * @param  __HANDLE__: DMA handle
00146   * @param  __FLAG__: specifies the flag to clear.
00147   *          This parameter can be any combination of the following values:
00148   *            @arg DMA_FLAG_TCx:  Transfer complete flag
00149   *            @arg DMA_FLAG_HTx:  Half transfer complete flag
00150   *            @arg DMA_FLAG_TEx:  Transfer error flag
00151   *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.   
00152   * @retval None
00153   */
00154 #define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \
00155 (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->IFCR = (__FLAG__)) :\
00156   (DMA1->IFCR = (__FLAG__)))
00157 
00158 /**
00159   * @}
00160   */
00161 
00162 #else
00163 /** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices
00164   * @{
00165   */
00166 
00167 /**
00168   * @brief  Returns the current DMA Channel transfer complete flag.
00169   * @param  __HANDLE__: DMA handle
00170   * @retval The specified transfer complete flag index.
00171   */
00172 #define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \
00173 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\
00174  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\
00175  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\
00176  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\
00177  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\
00178  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\
00179    DMA_FLAG_TC7)
00180 
00181 /**
00182   * @brief  Return the current DMA Channel half transfer complete flag.
00183   * @param  __HANDLE__: DMA handle
00184   * @retval The specified half transfer complete flag index.
00185   */
00186 #define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\
00187 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\
00188  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\
00189  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\
00190  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\
00191  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\
00192  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\
00193    DMA_FLAG_HT7)
00194 
00195 /**
00196   * @brief  Return the current DMA Channel transfer error flag.
00197   * @param  __HANDLE__: DMA handle
00198   * @retval The specified transfer error flag index.
00199   */
00200 #define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\
00201 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\
00202  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\
00203  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\
00204  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\
00205  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\
00206  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\
00207    DMA_FLAG_TE7)
00208 
00209 /**
00210   * @brief  Return the current DMA Channel Global interrupt flag.
00211   * @param  __HANDLE__: DMA handle
00212   * @retval The specified transfer error flag index.
00213   */
00214 #define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\
00215 (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\
00216  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\
00217  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\
00218  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\
00219  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\
00220  ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\
00221    DMA_FLAG_GL7)
00222 
00223 /**
00224   * @brief  Get the DMA Channel pending flags.
00225   * @param  __HANDLE__: DMA handle
00226   * @param  __FLAG__: Get the specified flag.
00227   *          This parameter can be any combination of the following values:
00228   *            @arg DMA_FLAG_TCx:  Transfer complete flag
00229   *            @arg DMA_FLAG_HTx:  Half transfer complete flag
00230   *            @arg DMA_FLAG_TEx:  Transfer error flag
00231   *            @arg DMA_FLAG_GLx:  Global interrupt flag
00232   *         Where x can be 1_7 to select the DMA Channel flag.   
00233   * @retval The state of FLAG (SET or RESET).
00234   */
00235 
00236 #define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)   (DMA1->ISR & (__FLAG__))
00237 
00238 /**
00239   * @brief  Clear the DMA Channel pending flags.
00240   * @param  __HANDLE__: DMA handle
00241   * @param  __FLAG__: specifies the flag to clear.
00242   *          This parameter can be any combination of the following values:
00243   *            @arg DMA_FLAG_TCx:  Transfer complete flag
00244   *            @arg DMA_FLAG_HTx:  Half transfer complete flag
00245   *            @arg DMA_FLAG_TEx:  Transfer error flag
00246   *            @arg DMA_FLAG_GLx:  Global interrupt flag
00247   *         Where x can be 1_7 to select the DMA Channel flag.   
00248   * @retval None
00249   */
00250 #define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__))
00251 
00252 /**
00253   * @}
00254   */
00255 
00256 #endif
00257   
00258 /**
00259   * @}
00260   */
00261 
00262 /**
00263   * @}
00264   */
00265 
00266 /**
00267   * @}
00268   */
00269 
00270 #ifdef __cplusplus
00271 }
00272 #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */
00273        /* STM32F103xG || STM32F105xC || STM32F107xC */
00274 
00275 #endif /* __STM32F1xx_HAL_DMA_H */
00276 
00277 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/