50 #ifdef HAL_DMA_MODULE_ENABLED
60 static void DMA_MultiBufferSetConfig(
DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
102 HAL_StatusTypeDef status = HAL_OK;
105 assert_param(IS_DMA_BUFFER_SIZE(DataLength));
108 if (hdma->
Init.Direction == DMA_MEMORY_TO_MEMORY)
110 hdma->
ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;
124 hdma->
Instance->CR |= (uint32_t)DMA_SxCR_DBM;
127 hdma->
Instance->M1AR = SecondMemAddress;
130 DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength);
133 __HAL_DMA_ENABLE(hdma);
156 HAL_StatusTypeDef status = HAL_OK;
159 assert_param(IS_DMA_BUFFER_SIZE(DataLength));
162 if (hdma->
Init.Direction == DMA_MEMORY_TO_MEMORY)
164 hdma->
ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;
187 hdma->
Instance->CR |= (uint32_t)DMA_SxCR_DBM;
190 hdma->
Instance->M1AR = SecondMemAddress;
193 DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength);
196 __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));
197 __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));
198 __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma));
199 __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_DME_FLAG_INDEX(hdma));
200 __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_FE_FLAG_INDEX(hdma));
203 hdma->
Instance->CR |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME;
212 __HAL_DMA_ENABLE(hdma);
241 if(memory == MEMORY0)
276 static void DMA_MultiBufferSetConfig(
DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
282 if((hdma->
Init.Direction) == DMA_MEMORY_TO_PERIPH)
HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory)
Change the memory0 or memory1 address on the fly.
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength)
Starts the multi_buffer DMA Transfer.
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength)
Starts the multi_buffer DMA Transfer with interrupt enabled.
This file contains all the functions prototypes for the HAL module driver.
DMA handle Structure definition.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
__IO HAL_DMA_StateTypeDef State
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA_Stream_TypeDef * Instance
void(* XferM1HalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferM1CpltCallback)(struct __DMA_HandleTypeDef *hdma)