|
STM32G474xx HAL用户手册
|
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 /*!<