Merge pull request #11189 from klutvott123/move-telemetry-displayport-init
[betaflight.git] / lib / main / STM32F3 / Drivers / STM32F3xx_HAL_Driver / Inc / stm32f3xx_hal_dma.h
blobc755e4f8bc7b25aeb3f7f6d9fbdf61b55330661a
1 /**
2 ******************************************************************************
3 * @file stm32f3xx_hal_dma.h
4 * @author MCD Application Team
5 * @brief Header file of DMA HAL module.
6 ******************************************************************************
7 * @attention
9 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
11 * Redistribution and use in source and binary forms, with or without modification,
12 * are permitted provided that the following conditions are met:
13 * 1. Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 ******************************************************************************
34 */
36 /* Define to prevent recursive inclusion -------------------------------------*/
37 #ifndef __STM32F3xx_HAL_DMA_H
38 #define __STM32F3xx_HAL_DMA_H
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32f3xx_hal_def.h"
47 /** @addtogroup STM32F3xx_HAL_Driver
48 * @{
51 /** @addtogroup DMA
52 * @{
53 */
55 /* Exported types ------------------------------------------------------------*/
57 /** @defgroup DMA_Exported_Types DMA Exported Types
58 * @{
61 /**
62 * @brief DMA Configuration Structure definition
64 typedef struct
66 uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,
67 from memory to memory or from peripheral to memory.
68 This parameter can be a value of @ref DMA_Data_transfer_direction */
70 uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not.
71 This parameter can be a value of @ref DMA_Peripheral_incremented_mode */
73 uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not.
74 This parameter can be a value of @ref DMA_Memory_incremented_mode */
76 uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width.
77 This parameter can be a value of @ref DMA_Peripheral_data_size */
79 uint32_t MemDataAlignment; /*!< Specifies the Memory data width.
80 This parameter can be a value of @ref DMA_Memory_data_size */
82 uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx.
83 This parameter can be a value of @ref DMA_mode
84 @note The circular buffer mode cannot be used if the memory-to-memory
85 data transfer is configured on the selected Channel */
87 uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx.
88 This parameter can be a value of @ref DMA_Priority_level */
89 } DMA_InitTypeDef;
91 /**
92 * @brief HAL DMA State structures definition
94 typedef enum
96 HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */
97 HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */
98 HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */
99 HAL_DMA_STATE_TIMEOUT = 0x03 /*!< DMA timeout state */
100 }HAL_DMA_StateTypeDef;
102 /**
103 * @brief HAL DMA Error Code structure definition
105 typedef enum
107 HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer */
108 HAL_DMA_HALF_TRANSFER = 0x01 /*!< Half Transfer */
109 }HAL_DMA_LevelCompleteTypeDef;
111 /**
112 * @brief HAL DMA Callback ID structure definition
114 typedef enum
116 HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */
117 HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer */
118 HAL_DMA_XFER_ERROR_CB_ID = 0x02U, /*!< Error */
119 HAL_DMA_XFER_ABORT_CB_ID = 0x03U, /*!< Abort */
120 HAL_DMA_XFER_ALL_CB_ID = 0x04 /*!< All */
121 }HAL_DMA_CallbackIDTypeDef;
123 /**
124 * @brief DMA handle Structure definition
126 typedef struct __DMA_HandleTypeDef
128 DMA_Channel_TypeDef *Instance; /*!< Register base address */
130 DMA_InitTypeDef Init; /*!< DMA communication parameters */
132 HAL_LockTypeDef Lock; /*!< DMA locking object */
134 HAL_DMA_StateTypeDef State; /*!< DMA transfer state */
136 void *Parent; /*!< Parent object state */
138 void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */
140 void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */
142 void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */
144 void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer abort callback */
146 __IO uint32_t ErrorCode; /*!< DMA Error code */
148 DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address */
150 uint32_t ChannelIndex; /*!< DMA Channel Index */
151 } DMA_HandleTypeDef;
153 * @}
156 /* Exported constants --------------------------------------------------------*/
158 /** @defgroup DMA_Exported_Constants DMA Exported Constants
159 * @{
162 /** @defgroup DMA_Error_Code DMA Error Code
163 * @{
165 #define HAL_DMA_ERROR_NONE (0x00000000U) /*!< No error */
166 #define HAL_DMA_ERROR_TE (0x00000001U) /*!< Transfer error */
167 #define HAL_DMA_ERROR_NO_XFER (0x00000004U) /*!< no ongoin transfer */
168 #define HAL_DMA_ERROR_TIMEOUT (0x00000020U) /*!< Timeout error */
169 #define HAL_DMA_ERROR_NOT_SUPPORTED (0x00000100U) /*!< Not supported mode */
171 * @}
174 /** @defgroup DMA_Data_transfer_direction DMA Data transfer direction
175 * @{
177 #define DMA_PERIPH_TO_MEMORY (0x00000000U) /*!< Peripheral to memory direction */
178 #define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR) /*!< Memory to peripheral direction */
179 #define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction */
182 * @}
185 /** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode
186 * @{
188 #define DMA_PINC_ENABLE ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */
189 #define DMA_PINC_DISABLE (0x00000000U) /*!< Peripheral increment mode Disable */
191 * @}
194 /** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode
195 * @{
197 #define DMA_MINC_ENABLE ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable */
198 #define DMA_MINC_DISABLE (0x00000000U) /*!< Memory increment mode Disable */
200 * @}
203 /** @defgroup DMA_Peripheral_data_size DMA Peripheral data size
204 * @{
206 #define DMA_PDATAALIGN_BYTE (0x00000000U) /*!< Peripheral data alignment : Byte */
207 #define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment : HalfWord */
208 #define DMA_PDATAALIGN_WORD ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment : Word */
210 * @}
213 /** @defgroup DMA_Memory_data_size DMA Memory data size
214 * @{
216 #define DMA_MDATAALIGN_BYTE (0x00000000U) /*!< Memory data alignment : Byte */
217 #define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment : HalfWord */
218 #define DMA_MDATAALIGN_WORD ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment : Word */
220 * @}
223 /** @defgroup DMA_mode DMA mode
224 * @{
226 #define DMA_NORMAL (0x00000000U) /*!< Normal Mode */
227 #define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular Mode */
229 * @}
232 /** @defgroup DMA_Priority_level DMA Priority level
233 * @{
235 #define DMA_PRIORITY_LOW (0x00000000U) /*!< Priority level : Low */
236 #define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium */
237 #define DMA_PRIORITY_HIGH ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High */
238 #define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL) /*!< Priority level : Very_High */
240 * @}
244 /** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions
245 * @{
247 #define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE)
248 #define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE)
249 #define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE)
251 * @}
254 /** @defgroup DMA_flag_definitions DMA flag definitions
255 * @{
257 #define DMA_FLAG_GL1 (0x00000001U)
258 #define DMA_FLAG_TC1 (0x00000002U)
259 #define DMA_FLAG_HT1 (0x00000004U)
260 #define DMA_FLAG_TE1 (0x00000008U)
261 #define DMA_FLAG_GL2 (0x00000010U)
262 #define DMA_FLAG_TC2 (0x00000020U)
263 #define DMA_FLAG_HT2 (0x00000040U)
264 #define DMA_FLAG_TE2 (0x00000080U)
265 #define DMA_FLAG_GL3 (0x00000100U)
266 #define DMA_FLAG_TC3 (0x00000200U)
267 #define DMA_FLAG_HT3 (0x00000400U)
268 #define DMA_FLAG_TE3 (0x00000800U)
269 #define DMA_FLAG_GL4 (0x00001000U)
270 #define DMA_FLAG_TC4 (0x00002000U)
271 #define DMA_FLAG_HT4 (0x00004000U)
272 #define DMA_FLAG_TE4 (0x00008000U)
273 #define DMA_FLAG_GL5 (0x00010000U)
274 #define DMA_FLAG_TC5 (0x00020000U)
275 #define DMA_FLAG_HT5 (0x00040000U)
276 #define DMA_FLAG_TE5 (0x00080000U)
277 #define DMA_FLAG_GL6 (0x00100000U)
278 #define DMA_FLAG_TC6 (0x00200000U)
279 #define DMA_FLAG_HT6 (0x00400000U)
280 #define DMA_FLAG_TE6 (0x00800000U)
281 #define DMA_FLAG_GL7 (0x01000000U)
282 #define DMA_FLAG_TC7 (0x02000000U)
283 #define DMA_FLAG_HT7 (0x04000000U)
284 #define DMA_FLAG_TE7 (0x08000000U)
286 * @}
290 * @}
294 /* Exported macro ------------------------------------------------------------*/
295 /** @defgroup DMA_Exported_Macros DMA Exported Macros
296 * @{
299 /** @brief Reset DMA handle state
300 * @param __HANDLE__ DMA handle.
301 * @retval None
303 #define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)
306 * @brief Enable the specified DMA Channel.
307 * @param __HANDLE__ DMA handle
308 * @retval None
310 #define __HAL_DMA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR |= DMA_CCR_EN)
313 * @brief Disable the specified DMA Channel.
314 * @param __HANDLE__ DMA handle
315 * @retval None
317 #define __HAL_DMA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR &= ~DMA_CCR_EN)
320 /* Interrupt & Flag management */
323 * @brief Enables the specified DMA Channel interrupts.
324 * @param __HANDLE__ DMA handle
325 * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.
326 * This parameter can be any combination of the following values:
327 * @arg DMA_IT_TC: Transfer complete interrupt mask
328 * @arg DMA_IT_HT: Half transfer complete interrupt mask
329 * @arg DMA_IT_TE: Transfer error interrupt mask
330 * @retval None
332 #define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR |= (__INTERRUPT__))
335 * @brief Disables the specified DMA Channel interrupts.
336 * @param __HANDLE__ DMA handle
337 * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.
338 * This parameter can be any combination of the following values:
339 * @arg DMA_IT_TC: Transfer complete interrupt mask
340 * @arg DMA_IT_HT: Half transfer complete interrupt mask
341 * @arg DMA_IT_TE: Transfer error interrupt mask
342 * @retval None
344 #define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR &= ~(__INTERRUPT__))
347 * @brief Checks whether the specified DMA Channel interrupt is enabled or disabled.
348 * @param __HANDLE__ DMA handle
349 * @param __INTERRUPT__ specifies the DMA interrupt source to check.
350 * This parameter can be one of the following values:
351 * @arg DMA_IT_TC: Transfer complete interrupt mask
352 * @arg DMA_IT_HT: Half transfer complete interrupt mask
353 * @arg DMA_IT_TE: Transfer error interrupt mask
354 * @retval The state of DMA_IT (SET or RESET).
356 #define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CCR & (__INTERRUPT__)))
359 * @brief Returns the number of remaining data units in the current DMAy Channelx transfer.
360 * @param __HANDLE__ DMA handle
362 * @retval The number of remaining data units in the current DMA Channel transfer.
364 #define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)
367 * @}
370 /* Include DMA HAL Extended module */
371 #include "stm32f3xx_hal_dma_ex.h"
373 /* Exported functions --------------------------------------------------------*/
374 /** @addtogroup DMA_Exported_Functions
375 * @{
378 /** @addtogroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions
379 * @{
381 /* Initialization and de-initialization functions *****************************/
382 HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);
383 HAL_StatusTypeDef HAL_DMA_DeInit (DMA_HandleTypeDef *hdma);
385 * @}
388 /** @addtogroup DMA_Exported_Functions_Group2 Input and Output operation functions
389 * @{
391 /* Input and Output operation functions *****************************************************/
392 HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
393 HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
394 HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
395 HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);
396 HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout);
397 void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);
398 HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma));
399 HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);
401 * @}
404 /** @addtogroup DMA_Exported_Functions_Group3 Peripheral State functions
405 * @{
407 /* Peripheral State and Error functions ***************************************/
408 HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);
409 uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma);
411 * @}
415 * @}
417 /* Private macros ------------------------------------------------------------*/
418 /** @defgroup DMA_Private_Macros DMA Private Macros
419 * @brief DMA private macros
420 * @{
423 #define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U))
425 #define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \
426 ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \
427 ((DIRECTION) == DMA_MEMORY_TO_MEMORY))
429 #define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \
430 ((STATE) == DMA_PINC_DISABLE))
432 #define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \
433 ((STATE) == DMA_MINC_DISABLE))
435 #define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \
436 ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \
437 ((SIZE) == DMA_PDATAALIGN_WORD))
439 #define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \
440 ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \
441 ((SIZE) == DMA_MDATAALIGN_WORD ))
443 #define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \
444 ((MODE) == DMA_CIRCULAR))
446 #define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \
447 ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \
448 ((PRIORITY) == DMA_PRIORITY_HIGH) || \
449 ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))
452 * @}
457 * @}
461 * @}
464 #ifdef __cplusplus
466 #endif
468 #endif /* __STM32F3xx_HAL_DMA_H */
470 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/