1 /********************************** (C) COPYRIGHT ******************************* 2 * File Name : ch32f20x_dma.h 3 * Author : WCH 4 * Version : V1.0.0 5 * Date : 2021/08/08 6 * Description : This file contains all the functions prototypes for the 7 * DMA firmware library. 8 *******************************************************************************/ 9 #ifndef __CH32F20x_DMA_H 10 #define __CH32F20x_DMA_H 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 #include "ch32f20x.h" 17 18 /* DMA Init structure definition */ 19 typedef struct 20 { 21 uint32_t DMA_PeripheralBaseAddr; /* Specifies the peripheral base address for DMAy Channelx. */ 22 23 uint32_t DMA_MemoryBaseAddr; /* Specifies the memory base address for DMAy Channelx. */ 24 25 uint32_t DMA_DIR; /* Specifies if the peripheral is the source or destination. 26 This parameter can be a value of @ref DMA_data_transfer_direction */ 27 28 uint32_t DMA_BufferSize; /* Specifies the buffer size, in data unit, of the specified Channel. 29 The data unit is equal to the configuration set in DMA_PeripheralDataSize 30 or DMA_MemoryDataSize members depending in the transfer direction. */ 31 32 uint32_t DMA_PeripheralInc; /* Specifies whether the Peripheral address register is incremented or not. 33 This parameter can be a value of @ref DMA_peripheral_incremented_mode */ 34 35 uint32_t DMA_MemoryInc; /* Specifies whether the memory address register is incremented or not. 36 This parameter can be a value of @ref DMA_memory_incremented_mode */ 37 38 uint32_t DMA_PeripheralDataSize; /* Specifies the Peripheral data width. 39 This parameter can be a value of @ref DMA_peripheral_data_size */ 40 41 uint32_t DMA_MemoryDataSize; /* Specifies the Memory data width. 42 This parameter can be a value of @ref DMA_memory_data_size */ 43 44 uint32_t DMA_Mode; /* Specifies the operation mode of the DMAy Channelx. 45 This parameter can be a value of @ref DMA_circular_normal_mode. 46 @note: The circular buffer mode cannot be used if the memory-to-memory 47 data transfer is configured on the selected Channel */ 48 49 uint32_t DMA_Priority; /* Specifies the software priority for the DMAy Channelx. 50 This parameter can be a value of @ref DMA_priority_level */ 51 52 uint32_t DMA_M2M; /* Specifies if the DMAy Channelx will be used in memory-to-memory transfer. 53 This parameter can be a value of @ref DMA_memory_to_memory */ 54 }DMA_InitTypeDef; 55 56 /* DMA_data_transfer_direction */ 57 #define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) 58 #define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) 59 60 /* DMA_peripheral_incremented_mode */ 61 #define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) 62 #define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) 63 64 /* DMA_memory_incremented_mode */ 65 #define DMA_MemoryInc_Enable ((uint32_t)0x00000080) 66 #define DMA_MemoryInc_Disable ((uint32_t)0x00000000) 67 68 /* DMA_peripheral_data_size */ 69 #define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) 70 #define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) 71 #define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) 72 73 /* DMA_memory_data_size */ 74 #define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) 75 #define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) 76 #define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) 77 78 /* DMA_circular_normal_mode */ 79 #define DMA_Mode_Circular ((uint32_t)0x00000020) 80 #define DMA_Mode_Normal ((uint32_t)0x00000000) 81 82 /* DMA_priority_level */ 83 #define DMA_Priority_VeryHigh ((uint32_t)0x00003000) 84 #define DMA_Priority_High ((uint32_t)0x00002000) 85 #define DMA_Priority_Medium ((uint32_t)0x00001000) 86 #define DMA_Priority_Low ((uint32_t)0x00000000) 87 88 /* DMA_memory_to_memory */ 89 #define DMA_M2M_Enable ((uint32_t)0x00004000) 90 #define DMA_M2M_Disable ((uint32_t)0x00000000) 91 92 /* DMA_interrupts_definition */ 93 #define DMA_IT_TC ((uint32_t)0x00000002) 94 #define DMA_IT_HT ((uint32_t)0x00000004) 95 #define DMA_IT_TE ((uint32_t)0x00000008) 96 97 #define DMA1_IT_GL1 ((uint32_t)0x00000001) 98 #define DMA1_IT_TC1 ((uint32_t)0x00000002) 99 #define DMA1_IT_HT1 ((uint32_t)0x00000004) 100 #define DMA1_IT_TE1 ((uint32_t)0x00000008) 101 #define DMA1_IT_GL2 ((uint32_t)0x00000010) 102 #define DMA1_IT_TC2 ((uint32_t)0x00000020) 103 #define DMA1_IT_HT2 ((uint32_t)0x00000040) 104 #define DMA1_IT_TE2 ((uint32_t)0x00000080) 105 #define DMA1_IT_GL3 ((uint32_t)0x00000100) 106 #define DMA1_IT_TC3 ((uint32_t)0x00000200) 107 #define DMA1_IT_HT3 ((uint32_t)0x00000400) 108 #define DMA1_IT_TE3 ((uint32_t)0x00000800) 109 #define DMA1_IT_GL4 ((uint32_t)0x00001000) 110 #define DMA1_IT_TC4 ((uint32_t)0x00002000) 111 #define DMA1_IT_HT4 ((uint32_t)0x00004000) 112 #define DMA1_IT_TE4 ((uint32_t)0x00008000) 113 #define DMA1_IT_GL5 ((uint32_t)0x00010000) 114 #define DMA1_IT_TC5 ((uint32_t)0x00020000) 115 #define DMA1_IT_HT5 ((uint32_t)0x00040000) 116 #define DMA1_IT_TE5 ((uint32_t)0x00080000) 117 #define DMA1_IT_GL6 ((uint32_t)0x00100000) 118 #define DMA1_IT_TC6 ((uint32_t)0x00200000) 119 #define DMA1_IT_HT6 ((uint32_t)0x00400000) 120 #define DMA1_IT_TE6 ((uint32_t)0x00800000) 121 #define DMA1_IT_GL7 ((uint32_t)0x01000000) 122 #define DMA1_IT_TC7 ((uint32_t)0x02000000) 123 #define DMA1_IT_HT7 ((uint32_t)0x04000000) 124 #define DMA1_IT_TE7 ((uint32_t)0x08000000) 125 126 #define DMA2_IT_GL1 ((uint32_t)0x10000001) 127 #define DMA2_IT_TC1 ((uint32_t)0x10000002) 128 #define DMA2_IT_HT1 ((uint32_t)0x10000004) 129 #define DMA2_IT_TE1 ((uint32_t)0x10000008) 130 #define DMA2_IT_GL2 ((uint32_t)0x10000010) 131 #define DMA2_IT_TC2 ((uint32_t)0x10000020) 132 #define DMA2_IT_HT2 ((uint32_t)0x10000040) 133 #define DMA2_IT_TE2 ((uint32_t)0x10000080) 134 #define DMA2_IT_GL3 ((uint32_t)0x10000100) 135 #define DMA2_IT_TC3 ((uint32_t)0x10000200) 136 #define DMA2_IT_HT3 ((uint32_t)0x10000400) 137 #define DMA2_IT_TE3 ((uint32_t)0x10000800) 138 #define DMA2_IT_GL4 ((uint32_t)0x10001000) 139 #define DMA2_IT_TC4 ((uint32_t)0x10002000) 140 #define DMA2_IT_HT4 ((uint32_t)0x10004000) 141 #define DMA2_IT_TE4 ((uint32_t)0x10008000) 142 #define DMA2_IT_GL5 ((uint32_t)0x10010000) 143 #define DMA2_IT_TC5 ((uint32_t)0x10020000) 144 #define DMA2_IT_HT5 ((uint32_t)0x10040000) 145 #define DMA2_IT_TE5 ((uint32_t)0x10080000) 146 #define DMA2_IT_GL6 ((uint32_t)0x10100000) 147 #define DMA2_IT_TC6 ((uint32_t)0x10200000) 148 #define DMA2_IT_HT6 ((uint32_t)0x10400000) 149 #define DMA2_IT_TE6 ((uint32_t)0x10800000) 150 #define DMA2_IT_GL7 ((uint32_t)0x11000000) 151 #define DMA2_IT_TC7 ((uint32_t)0x12000000) 152 #define DMA2_IT_HT7 ((uint32_t)0x14000000) 153 #define DMA2_IT_TE7 ((uint32_t)0x18000000) 154 155 #define DMA2_IT_GL8 ((uint32_t)0x20000001) 156 #define DMA2_IT_TC8 ((uint32_t)0x20000002) 157 #define DMA2_IT_HT8 ((uint32_t)0x20000004) 158 #define DMA2_IT_TE8 ((uint32_t)0x20000008) 159 #define DMA2_IT_GL9 ((uint32_t)0x20000010) 160 #define DMA2_IT_TC9 ((uint32_t)0x20000020) 161 #define DMA2_IT_HT9 ((uint32_t)0x20000040) 162 #define DMA2_IT_TE9 ((uint32_t)0x20000080) 163 #define DMA2_IT_GL10 ((uint32_t)0x20000100) 164 #define DMA2_IT_TC10 ((uint32_t)0x20000200) 165 #define DMA2_IT_HT10 ((uint32_t)0x20000400) 166 #define DMA2_IT_TE10 ((uint32_t)0x20000800) 167 #define DMA2_IT_GL11 ((uint32_t)0x20001000) 168 #define DMA2_IT_TC11 ((uint32_t)0x20002000) 169 #define DMA2_IT_HT11 ((uint32_t)0x20004000) 170 #define DMA2_IT_TE11 ((uint32_t)0x20008000) 171 172 /* DMA_flags_definition */ 173 #define DMA1_FLAG_GL1 ((uint32_t)0x00000001) 174 #define DMA1_FLAG_TC1 ((uint32_t)0x00000002) 175 #define DMA1_FLAG_HT1 ((uint32_t)0x00000004) 176 #define DMA1_FLAG_TE1 ((uint32_t)0x00000008) 177 #define DMA1_FLAG_GL2 ((uint32_t)0x00000010) 178 #define DMA1_FLAG_TC2 ((uint32_t)0x00000020) 179 #define DMA1_FLAG_HT2 ((uint32_t)0x00000040) 180 #define DMA1_FLAG_TE2 ((uint32_t)0x00000080) 181 #define DMA1_FLAG_GL3 ((uint32_t)0x00000100) 182 #define DMA1_FLAG_TC3 ((uint32_t)0x00000200) 183 #define DMA1_FLAG_HT3 ((uint32_t)0x00000400) 184 #define DMA1_FLAG_TE3 ((uint32_t)0x00000800) 185 #define DMA1_FLAG_GL4 ((uint32_t)0x00001000) 186 #define DMA1_FLAG_TC4 ((uint32_t)0x00002000) 187 #define DMA1_FLAG_HT4 ((uint32_t)0x00004000) 188 #define DMA1_FLAG_TE4 ((uint32_t)0x00008000) 189 #define DMA1_FLAG_GL5 ((uint32_t)0x00010000) 190 #define DMA1_FLAG_TC5 ((uint32_t)0x00020000) 191 #define DMA1_FLAG_HT5 ((uint32_t)0x00040000) 192 #define DMA1_FLAG_TE5 ((uint32_t)0x00080000) 193 #define DMA1_FLAG_GL6 ((uint32_t)0x00100000) 194 #define DMA1_FLAG_TC6 ((uint32_t)0x00200000) 195 #define DMA1_FLAG_HT6 ((uint32_t)0x00400000) 196 #define DMA1_FLAG_TE6 ((uint32_t)0x00800000) 197 #define DMA1_FLAG_GL7 ((uint32_t)0x01000000) 198 #define DMA1_FLAG_TC7 ((uint32_t)0x02000000) 199 #define DMA1_FLAG_HT7 ((uint32_t)0x04000000) 200 #define DMA1_FLAG_TE7 ((uint32_t)0x08000000) 201 202 #define DMA2_FLAG_GL1 ((uint32_t)0x10000001) 203 #define DMA2_FLAG_TC1 ((uint32_t)0x10000002) 204 #define DMA2_FLAG_HT1 ((uint32_t)0x10000004) 205 #define DMA2_FLAG_TE1 ((uint32_t)0x10000008) 206 #define DMA2_FLAG_GL2 ((uint32_t)0x10000010) 207 #define DMA2_FLAG_TC2 ((uint32_t)0x10000020) 208 #define DMA2_FLAG_HT2 ((uint32_t)0x10000040) 209 #define DMA2_FLAG_TE2 ((uint32_t)0x10000080) 210 #define DMA2_FLAG_GL3 ((uint32_t)0x10000100) 211 #define DMA2_FLAG_TC3 ((uint32_t)0x10000200) 212 #define DMA2_FLAG_HT3 ((uint32_t)0x10000400) 213 #define DMA2_FLAG_TE3 ((uint32_t)0x10000800) 214 #define DMA2_FLAG_GL4 ((uint32_t)0x10001000) 215 #define DMA2_FLAG_TC4 ((uint32_t)0x10002000) 216 #define DMA2_FLAG_HT4 ((uint32_t)0x10004000) 217 #define DMA2_FLAG_TE4 ((uint32_t)0x10008000) 218 #define DMA2_FLAG_GL5 ((uint32_t)0x10010000) 219 #define DMA2_FLAG_TC5 ((uint32_t)0x10020000) 220 #define DMA2_FLAG_HT5 ((uint32_t)0x10040000) 221 #define DMA2_FLAG_TE5 ((uint32_t)0x10080000) 222 #define DMA2_FLAG_GL6 ((uint32_t)0x10100000) 223 #define DMA2_FLAG_TC6 ((uint32_t)0x10200000) 224 #define DMA2_FLAG_HT6 ((uint32_t)0x10400000) 225 #define DMA2_FLAG_TE6 ((uint32_t)0x10800000) 226 #define DMA2_FLAG_GL7 ((uint32_t)0x11000000) 227 #define DMA2_FLAG_TC7 ((uint32_t)0x12000000) 228 #define DMA2_FLAG_HT7 ((uint32_t)0x14000000) 229 #define DMA2_FLAG_TE7 ((uint32_t)0x18000000) 230 231 #define DMA2_FLAG_GL8 ((uint32_t)0x20000001) 232 #define DMA2_FLAG_TC8 ((uint32_t)0x20000002) 233 #define DMA2_FLAG_HT8 ((uint32_t)0x20000004) 234 #define DMA2_FLAG_TE8 ((uint32_t)0x20000008) 235 #define DMA2_FLAG_GL9 ((uint32_t)0x20000010) 236 #define DMA2_FLAG_TC9 ((uint32_t)0x20000020) 237 #define DMA2_FLAG_HT9 ((uint32_t)0x20000040) 238 #define DMA2_FLAG_TE9 ((uint32_t)0x20000080) 239 #define DMA2_FLAG_GL10 ((uint32_t)0x20000100) 240 #define DMA2_FLAG_TC10 ((uint32_t)0x20000200) 241 #define DMA2_FLAG_HT10 ((uint32_t)0x20000400) 242 #define DMA2_FLAG_TE10 ((uint32_t)0x20000800) 243 #define DMA2_FLAG_GL11 ((uint32_t)0x20001000) 244 #define DMA2_FLAG_TC11 ((uint32_t)0x20002000) 245 #define DMA2_FLAG_HT11 ((uint32_t)0x20004000) 246 #define DMA2_FLAG_TE11 ((uint32_t)0x20008000) 247 248 249 void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); 250 void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); 251 void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); 252 void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState); 253 void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); 254 void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); 255 uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx); 256 FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG); 257 void DMA_ClearFlag(uint32_t DMAy_FLAG); 258 ITStatus DMA_GetITStatus(uint32_t DMAy_IT); 259 void DMA_ClearITPendingBit(uint32_t DMAy_IT); 260 261 #ifdef __cplusplus 262 } 263 #endif 264 265 #endif 266 267