STM32L4xx_HAL_Driver  1.14.0
Initialization and de-initialization functions

Functions

ErrorStatus LL_DMA_Init (DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct)
 Initialize the DMA registers according to the specified parameters in DMA_InitStruct. More...
 
ErrorStatus LL_DMA_DeInit (DMA_TypeDef *DMAx, uint32_t Channel)
 De-initialize the DMA registers to their default reset values. More...
 
void LL_DMA_StructInit (LL_DMA_InitTypeDef *DMA_InitStruct)
 Set each LL_DMA_InitTypeDef field to default value. More...
 

Detailed Description

Function Documentation

◆ LL_DMA_DeInit()

ErrorStatus LL_DMA_DeInit ( DMA_TypeDef *  DMAx,
uint32_t  Channel 
)

De-initialize the DMA registers to their default reset values.

Parameters
DMAxDMAx Instance
ChannelThis parameter can be one of the following values:
  • LL_DMA_CHANNEL_1
  • LL_DMA_CHANNEL_2
  • LL_DMA_CHANNEL_3
  • LL_DMA_CHANNEL_4
  • LL_DMA_CHANNEL_5
  • LL_DMA_CHANNEL_6
  • LL_DMA_CHANNEL_7
  • LL_DMA_CHANNEL_ALL
Return values
AnErrorStatus enumeration value:
  • SUCCESS: DMA registers are de-initialized
  • ERROR: DMA registers are not de-initialized

Definition at line 163 of file stm32l4xx_ll_dma.c.

164 {
165  ErrorStatus status = SUCCESS;
166  DMA_Channel_TypeDef *tmp;
167 
168  /* Check the DMA Instance DMAx and Channel parameters*/
169  assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel) || (Channel == LL_DMA_CHANNEL_ALL));
170 
171  if (Channel == LL_DMA_CHANNEL_ALL)
172  {
173  if (DMAx == DMA1)
174  {
175  /* Force reset of DMA clock */
176  LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA1);
177 
178  /* Release reset of DMA clock */
179  LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA1);
180  }
181 #if defined(DMA2)
182  else if (DMAx == DMA2)
183  {
184  /* Force reset of DMA clock */
185  LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2);
186 
187  /* Release reset of DMA clock */
188  LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2);
189  }
190 #endif
191  else
192  {
193  status = ERROR;
194  }
195  }
196  else
197  {
198  tmp = (DMA_Channel_TypeDef *)(__LL_DMA_GET_CHANNEL_INSTANCE(DMAx, Channel));
199 
200  /* Disable the selected DMAx_Channely */
201  CLEAR_BIT(tmp->CCR, DMA_CCR_EN);
202 
203  /* Reset DMAx_Channely control register */
204  WRITE_REG(tmp->CCR, 0U);
205 
206  /* Reset DMAx_Channely remaining bytes register */
207  WRITE_REG(tmp->CNDTR, 0U);
208 
209  /* Reset DMAx_Channely peripheral address register */
210  WRITE_REG(tmp->CPAR, 0U);
211 
212  /* Reset DMAx_Channely memory 0 address register */
213  WRITE_REG(tmp->CMAR, 0U);
214 
215 #if defined(DMAMUX1)
216  /* Reset Request register field for DMAx Channel */
217  LL_DMA_SetPeriphRequest(DMAx, Channel, LL_DMAMUX_REQ_MEM2MEM);
218 #else
219  /* Reset Request register field for DMAx Channel */
220  LL_DMA_SetPeriphRequest(DMAx, Channel, LL_DMA_REQUEST_0);
221 #endif /* DMAMUX1 */
222 
223  if (Channel == LL_DMA_CHANNEL_1)
224  {
225  /* Reset interrupt pending bits for DMAx Channel1 */
226  LL_DMA_ClearFlag_GI1(DMAx);
227  }
228  else if (Channel == LL_DMA_CHANNEL_2)
229  {
230  /* Reset interrupt pending bits for DMAx Channel2 */
231  LL_DMA_ClearFlag_GI2(DMAx);
232  }
233  else if (Channel == LL_DMA_CHANNEL_3)
234  {
235  /* Reset interrupt pending bits for DMAx Channel3 */
236  LL_DMA_ClearFlag_GI3(DMAx);
237  }
238  else if (Channel == LL_DMA_CHANNEL_4)
239  {
240  /* Reset interrupt pending bits for DMAx Channel4 */
241  LL_DMA_ClearFlag_GI4(DMAx);
242  }
243  else if (Channel == LL_DMA_CHANNEL_5)
244  {
245  /* Reset interrupt pending bits for DMAx Channel5 */
246  LL_DMA_ClearFlag_GI5(DMAx);
247  }
248 
249  else if (Channel == LL_DMA_CHANNEL_6)
250  {
251  /* Reset interrupt pending bits for DMAx Channel6 */
252  LL_DMA_ClearFlag_GI6(DMAx);
253  }
254  else if (Channel == LL_DMA_CHANNEL_7)
255  {
256  /* Reset interrupt pending bits for DMAx Channel7 */
257  LL_DMA_ClearFlag_GI7(DMAx);
258  }
259  else
260  {
261  status = ERROR;
262  }
263  }
264 
265  return status;
266 }
__STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
Clear Channel 4 global interrupt flag. IFCR CGIF4 LL_DMA_ClearFlag_GI4.
__STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs)
Force AHB1 peripherals reset. AHB1RSTR DMA1RST LL_AHB1_GRP1_ForceReset AHB1RSTR DMA2RST LL_AHB1_GRP...
__STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
Clear Channel 3 global interrupt flag. IFCR CGIF3 LL_DMA_ClearFlag_GI3.
__STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
Clear Channel 2 global interrupt flag. IFCR CGIF2 LL_DMA_ClearFlag_GI2.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
__STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
Clear Channel 1 global interrupt flag. IFCR CGIF1 LL_DMA_ClearFlag_GI1.
__STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx)
Clear Channel 6 global interrupt flag. IFCR CGIF6 LL_DMA_ClearFlag_GI6.
__STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
Clear Channel 5 global interrupt flag. IFCR CGIF5 LL_DMA_ClearFlag_GI5.
__STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs)
Release AHB1 peripherals reset. AHB1RSTR DMA1RST LL_AHB1_GRP1_ReleaseReset AHB1RSTR DMA2RST LL_AHB1...
__STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx)
Clear Channel 7 global interrupt flag. IFCR CGIF7 LL_DMA_ClearFlag_GI7.
__STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
Set DMA request for DMA Channels on DMAMUX Channel x.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ LL_DMA_Init()

ErrorStatus LL_DMA_Init ( DMA_TypeDef *  DMAx,
uint32_t  Channel,
LL_DMA_InitTypeDef DMA_InitStruct 
)

Initialize the DMA registers according to the specified parameters in DMA_InitStruct.

Note
To convert DMAx_Channely Instance to DMAx Instance and Channely, use helper macros :
  • __LL_DMA_GET_INSTANCE
  • __LL_DMA_GET_CHANNEL
Parameters
DMAxDMAx Instance
ChannelThis parameter can be one of the following values:
  • LL_DMA_CHANNEL_1
  • LL_DMA_CHANNEL_2
  • LL_DMA_CHANNEL_3
  • LL_DMA_CHANNEL_4
  • LL_DMA_CHANNEL_5
  • LL_DMA_CHANNEL_6
  • LL_DMA_CHANNEL_7
DMA_InitStructpointer to a LL_DMA_InitTypeDef structure.
Return values
AnErrorStatus enumeration value:
  • SUCCESS: DMA registers are initialized
  • ERROR: Not applicable

Definition at line 287 of file stm32l4xx_ll_dma.c.

288 {
289  /* Check the DMA Instance DMAx and Channel parameters*/
290  assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel));
291 
292  /* Check the DMA parameters from DMA_InitStruct */
293  assert_param(IS_LL_DMA_DIRECTION(DMA_InitStruct->Direction));
294  assert_param(IS_LL_DMA_MODE(DMA_InitStruct->Mode));
295  assert_param(IS_LL_DMA_PERIPHINCMODE(DMA_InitStruct->PeriphOrM2MSrcIncMode));
296  assert_param(IS_LL_DMA_MEMORYINCMODE(DMA_InitStruct->MemoryOrM2MDstIncMode));
297  assert_param(IS_LL_DMA_PERIPHDATASIZE(DMA_InitStruct->PeriphOrM2MSrcDataSize));
298  assert_param(IS_LL_DMA_MEMORYDATASIZE(DMA_InitStruct->MemoryOrM2MDstDataSize));
299  assert_param(IS_LL_DMA_NBDATA(DMA_InitStruct->NbData));
300  assert_param(IS_LL_DMA_PERIPHREQUEST(DMA_InitStruct->PeriphRequest));
301  assert_param(IS_LL_DMA_PRIORITY(DMA_InitStruct->Priority));
302 
303  /*---------------------------- DMAx CCR Configuration ------------------------
304  * Configure DMAx_Channely: data transfer direction, data transfer mode,
305  * peripheral and memory increment mode,
306  * data size alignment and priority level with parameters :
307  * - Direction: DMA_CCR_DIR and DMA_CCR_MEM2MEM bits
308  * - Mode: DMA_CCR_CIRC bit
309  * - PeriphOrM2MSrcIncMode: DMA_CCR_PINC bit
310  * - MemoryOrM2MDstIncMode: DMA_CCR_MINC bit
311  * - PeriphOrM2MSrcDataSize: DMA_CCR_PSIZE[1:0] bits
312  * - MemoryOrM2MDstDataSize: DMA_CCR_MSIZE[1:0] bits
313  * - Priority: DMA_CCR_PL[1:0] bits
314  */
315  LL_DMA_ConfigTransfer(DMAx, Channel, DMA_InitStruct->Direction | \
316  DMA_InitStruct->Mode | \
317  DMA_InitStruct->PeriphOrM2MSrcIncMode | \
318  DMA_InitStruct->MemoryOrM2MDstIncMode | \
319  DMA_InitStruct->PeriphOrM2MSrcDataSize | \
320  DMA_InitStruct->MemoryOrM2MDstDataSize | \
321  DMA_InitStruct->Priority);
322 
323  /*-------------------------- DMAx CMAR Configuration -------------------------
324  * Configure the memory or destination base address with parameter :
325  * - MemoryOrM2MDstAddress: DMA_CMAR_MA[31:0] bits
326  */
327  LL_DMA_SetMemoryAddress(DMAx, Channel, DMA_InitStruct->MemoryOrM2MDstAddress);
328 
329  /*-------------------------- DMAx CPAR Configuration -------------------------
330  * Configure the peripheral or source base address with parameter :
331  * - PeriphOrM2MSrcAddress: DMA_CPAR_PA[31:0] bits
332  */
333  LL_DMA_SetPeriphAddress(DMAx, Channel, DMA_InitStruct->PeriphOrM2MSrcAddress);
334 
335  /*--------------------------- DMAx CNDTR Configuration -----------------------
336  * Configure the peripheral base address with parameter :
337  * - NbData: DMA_CNDTR_NDT[15:0] bits
338  */
339  LL_DMA_SetDataLength(DMAx, Channel, DMA_InitStruct->NbData);
340 
341 #if defined(DMAMUX1)
342  /*--------------------------- DMAMUXx CCR Configuration ----------------------
343  * Configure the DMA request for DMA Channels on DMAMUX Channel x with parameter :
344  * - PeriphRequest: DMA_CxCR[7:0] bits
345  */
346  LL_DMA_SetPeriphRequest(DMAx, Channel, DMA_InitStruct->PeriphRequest);
347 #else
348  /*--------------------------- DMAx CSELR Configuration -----------------------
349  * Configure the DMA request for DMA instance on Channel x with parameter :
350  * - PeriphRequest: DMA_CSELR[31:0] bits
351  */
352  LL_DMA_SetPeriphRequest(DMAx, Channel, DMA_InitStruct->PeriphRequest);
353 #endif /* DMAMUX1 */
354 
355  return SUCCESS;
356 }
uint32_t MemoryOrM2MDstAddress
__STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
Configure all parameters link to DMA transfer. CCR DIR LL_DMA_ConfigTransfer CCR MEM2MEM LL_DMA_Con...
__STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
Set Number of data to transfer.
uint32_t PeriphOrM2MSrcDataSize
__STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
Set the Memory address.
uint32_t MemoryOrM2MDstDataSize
uint32_t MemoryOrM2MDstIncMode
__STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
Set DMA request for DMA Channels on DMAMUX Channel x.
__STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
Set the Peripheral address.
uint32_t PeriphOrM2MSrcIncMode
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
uint32_t PeriphOrM2MSrcAddress

◆ LL_DMA_StructInit()

void LL_DMA_StructInit ( LL_DMA_InitTypeDef DMA_InitStruct)

Set each LL_DMA_InitTypeDef field to default value.

Parameters
DMA_InitStructPointer to a LL_DMA_InitTypeDef structure.
Return values
None

Definition at line 363 of file stm32l4xx_ll_dma.c.

364 {
365  /* Set DMA_InitStruct fields to default values */
366  DMA_InitStruct->PeriphOrM2MSrcAddress = 0x00000000U;
367  DMA_InitStruct->MemoryOrM2MDstAddress = 0x00000000U;
368  DMA_InitStruct->Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
369  DMA_InitStruct->Mode = LL_DMA_MODE_NORMAL;
370  DMA_InitStruct->PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
371  DMA_InitStruct->MemoryOrM2MDstIncMode = LL_DMA_MEMORY_NOINCREMENT;
372  DMA_InitStruct->PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE;
373  DMA_InitStruct->MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_BYTE;
374  DMA_InitStruct->NbData = 0x00000000U;
375 #if defined(DMAMUX1)
376  DMA_InitStruct->PeriphRequest = LL_DMAMUX_REQ_MEM2MEM;
377 #else
378  DMA_InitStruct->PeriphRequest = LL_DMA_REQUEST_0;
379 #endif /* DMAMUX1 */
380  DMA_InitStruct->Priority = LL_DMA_PRIORITY_LOW;
381 }
uint32_t MemoryOrM2MDstAddress
uint32_t PeriphOrM2MSrcDataSize
uint32_t MemoryOrM2MDstDataSize
uint32_t MemoryOrM2MDstIncMode
uint32_t PeriphOrM2MSrcIncMode
uint32_t PeriphOrM2MSrcAddress