STM32G474xx HAL用户手册
stm32g4xx_ll_dma.h
转至此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_ll_dma.h
00004   * @author  MCD Application Team
00005   * @brief   DMA LL模块的头文件。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* 定义以防止递归包含 -------------------------------------*/
00020 #ifndef __STM32G4xx_LL_DMA_H
00021 #define __STM32G4xx_LL_DMA_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* 包含的头文件 ------------------------------------------------------------------*/
00028 #include "stm32g4xx.h"
00029 #include "stm32g4xx_ll_dmamux.h"
00030 
00031 /** @addtogroup STM32G4xx_LL_Driver
00032   * @{
00033   */
00034 
00035 #if defined (DMA1) || defined (DMA2)
00036 
00037 /** @defgroup DMA_LL DMA
00038   * @{
00039   */
00040 
00041 /* 私有类型定义 -------------------------------------------------------------*/
00042 /* 私有变量 ---------------------------------------------------------*/
00043 /** @defgroup DMA_LL_Private_Variables DMA私有变量
00044   * @{
00045   */
00046 /* 用于获取DMA通道寄存器偏移量的数组,相对于通道索引LL_DMA_CHANNEL_x */
00047 static const uint8_t CHANNEL_OFFSET_TAB[] =
00048 {
00049   (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
00050   (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
00051   (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
00052   (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE),
00053   (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE),
00054   (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE)
00055 #if defined (DMA1_Channel7)
00056   ,
00057   (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE)
00058 #endif /* DMA1_Channel7 */
00059 #if defined (DMA1_Channel8)
00060   ,
00061   (uint8_t)(DMA1_Channel8_BASE - DMA1_BASE)
00062 #endif /* DMA1_Channel8 */
00063 };
00064 /**
00065   * @}
00066   */
00067 
00068 /* 私有常量定义 ---------------------------------------------------------*/
00069 /** @defgroup DMA_LL_Private_Constants DMA私有常量
00070   * @{
00071   */
00072 /* 用于获取CSELR寄存器偏移量的定义 */
00073 #define DMA_CSELR_OFFSET                  (uint32_t)(DMA1_CSELR_BASE - DMA1_BASE)
00074 
00075 /* 用于寄存器中位位置和执行偏移的定义 */
00076 #define DMA_POSITION_CSELR_CXS            POSITION_VAL(DMA_CSELR_C1S << ((Channel-1U)*4U))
00077 /**
00078   * @}
00079   */
00080 
00081 /* 私有宏定义 ------------------------------------------------------------*/
00082 #if defined(USE_FULL_LL_DRIVER)
00083 /** @defgroup DMA_LL_Private_Macros DMA私有宏
00084   * @{
00085   */
00086 /**
00087   * @}
00088   */
00089 #endif /*USE_FULL_LL_DRIVER*/
00090 
00091 /* 导出的类型定义 ------------------------------------------------------------*/
00092 #if defined(USE_FULL_LL_DRIVER)
00093 /** @defgroup DMA_LL_ES_INIT DMA导出的初始化结构
00094   * @{
00095   */
00096 typedef struct
00097 {
00098   uint32_t PeriphOrM2MSrcAddress;  /*!< 指定DMA传输的外设基地址
00099                                         或作为内存到内存传输方向下的源基地址。
00100 
00101                                         此参数的值必须在Min_Data = 0和Max_Data = 0xFFFFFFFF之间。 */
00102 
00103   uint32_t MemoryOrM2MDstAddress;  /*!< 指定DMA传输的内存基地址
00104                                         或作为内存到内存传输方向下的目标基地址。
00105 
00106                                         此参数的值必须在Min_Data = 0和Max_Data = 0xFFFFFFFF之间。 */
00107 
00108   uint32_t Direction;              /*!< 指定数据是从内存传输到外设,
00109                                         从内存到内存还是从外设到内存。
00110                                         此参数可以是@ref DMA_LL_EC_DIRECTION的值
00111 
00112                                         此功能稍后可以使用单元函数@ref LL_DMA_SetDataTransferDirection()进行修改。 */
00113 
00114   uint32_t Mode;                   /*!< 指定正常或循环操作模式。
00115                                         此参数可以是@ref DMA_LL_EC_MODE的值
00116                                         @note: 如果在所选通道上配置了内存到内存
00117                                                数据传输方向,则不能使用循环缓冲区模式
00118 
00119                                         此功能稍后可以使用单元函数@ref LL_DMA_SetMode()进行修改。 */
00120 
00121   uint32_t PeriphOrM2MSrcIncMode;  /*!< 指定外设地址或内存到内存传输方向下的源地址
00122                                         是否递增。
00123                                         此参数可以是@ref DMA_LL_EC_PERIPH的值
00124 
00125                                         此功能稍后可以使用单元函数@ref LL_DMA_SetPeriphIncMode()进行修改。 */
00126 
00127   uint32_t MemoryOrM2MDstIncMode;  /*!< 指定内存地址或内存到内存传输方向下的目标地址
00128                                         是否递增。
00129                                         此参数可以是@ref DMA_LL_EC_MEMORY的值
00130 
00131                                         此功能稍后可以使用单元函数@ref LL_DMA_SetMemoryIncMode()进行修改。 */
00132 
00133   uint32_t PeriphOrM2MSrcDataSize; /*!< 指定外设数据对齐方式或源数据对齐方式(字节、半字、字)
00134                                         在内存到内存传输方向的情况下。
00135                                         此参数可以是@ref DMA_LL_EC_PDATAALIGN的值
00136 
00137                                         此功能稍后可以使用单元函数@ref LL_DMA_SetPeriphSize()进行修改。 */
00138 
00139   uint32_t MemoryOrM2MDstDataSize; /*!< 指定内存数据对齐方式或目标数据对齐方式(字节、半字、字)
00140                                         在内存到内存传输方向的情况下。
00141                                         此参数可以是@ref DMA_LL_EC_MDATAALIGN的值
00142 
00143                                         此功能稍后可以使用单元函数@ref LL_DMA_SetMemorySize()进行修改。 */
00144 
00145   uint32_t NbData;                 /*!< 指定要传输的数据数量,以数据单位计。
00146                                         数据单位等于源缓冲区配置中在PeripheralSize
00147                                         或MemorySize参数中根据传输方向设置的值。
00148                                         此参数的值必须在Min_Data = 0和Max_Data = 0x0000FFFF之间
00149 
00150                                         此功能稍后可以使用单元函数@ref LL_DMA_SetDataLength()进行修改。 */
00151 
00152   uint32_t PeriphRequest;          /*!< 指定外设请求。
00153                                         此参数可以是@ref DMAMUX_LL_EC_REQUEST的值
00154 
00155                                         此功能稍后可以使用单元函数@ref LL_DMA_SetPeriphRequest()进行修改。 */
00156 
00157   uint32_t Priority;               /*!< 指定通道优先级级别。
00158                                         此参数可以是@ref DMA_LL_EC_PRIORITY的值
00159 
00160                                         此功能稍后可以使用单元函数@ref LL_DMA_SetChannelPriorityLevel()进行修改。 */
00161 
00162 } LL_DMA_InitTypeDef;
00163 /**
00164   * @}
00165   */
00166 #endif /*USE_FULL_LL_DRIVER*/
00167 
00168 /* 导出的常量定义 --------------------------------------------------------*/
00169 /** @defgroup DMA_LL_Exported_Constants DMA导出的常量
00170   * @{
00171   */
00172 /** @defgroup DMA_LL_EC_CLEAR_FLAG 清除标志定义
00173   * @brief    可与LL_DMA_WriteReg函数一起使用的标志定义
00174   * @{
00175   */
00176 #define LL_DMA_IFCR_CGIF1                 DMA_IFCR_CGIF1        /*!< 通道1全局标志            */
00177 #define LL_DMA_IFCR_CTCIF1                DMA_IFCR_CTCIF1       /*!< 通道1传输完成标志 */
00178 #define LL_DMA_IFCR_CHTIF1                DMA_IFCR_CHTIF1       /*!< 通道1半传输标志     */
00179 #define LL_DMA_IFCR_CTEIF1                DMA_IFCR_CTEIF1       /*!< 通道1传输错误标志    */
00180 #define LL_DMA_IFCR_CGIF2                 DMA_IFCR_CGIF2        /*!< 通道2全局标志            */
00181 #define LL_DMA_IFCR_CTCIF2                DMA_IFCR_CTCIF2       /*!< 通道2传输完成标志 */
00182 #define LL_DMA_IFCR_CHTIF2                DMA_IFCR_CHTIF2       /*!< 通道2半传输标志     */
00183 #define LL_DMA_IFCR_CTEIF2                DMA_IFCR_CTEIF2       /*!< 通道2传输错误标志    */
00184 #define LL_DMA_IFCR_CGIF3                 DMA_IFCR_CGIF3        /*!< 通道3全局标志            */
00185 #define LL_DMA_IFCR_CTCIF3                DMA_IFCR_CTCIF3       /*!< 通道3传输完成标志 */
00186 #define LL_DMA_IFCR_CHTIF3                DMA_IFCR_CHTIF3       /*!< 通道3半传输标志     */
00187 #define LL_DMA_IFCR_CTEIF3                DMA_IFCR_CTEIF3       /*!< 通道3传输错误标志    */
00188 #define LL_DMA_IFCR_CGIF4                 DMA_IFCR_CGIF4        /*!< 通道4全局标志            */
00189 #define LL_DMA_IFCR_CTCIF4                DMA_IFCR_CTCIF4       /*!< 通道4传输完成标志 */
00190 #define LL_DMA_IFCR_CHTIF4                DMA_IFCR_CHTIF4       /*!<