106#ifdef HAL_DMA_MODULE_ENABLED
115 __IO uint32_t Reserved0;
123} BDMA_Base_Registers;
133#define HAL_TIMEOUT_DMA_ABORT (5U)
135#define BDMA_PERIPH_TO_MEMORY (0x00000000U)
136#define BDMA_MEMORY_TO_PERIPH ((uint32_t)BDMA_CCR_DIR)
137#define BDMA_MEMORY_TO_MEMORY ((uint32_t)BDMA_CCR_MEM2MEM)
140#define DMA_TO_BDMA_DIRECTION(__DMA_DIRECTION__) (((__DMA_DIRECTION__) == DMA_MEMORY_TO_PERIPH)? BDMA_MEMORY_TO_PERIPH: \
141 ((__DMA_DIRECTION__) == DMA_MEMORY_TO_MEMORY)? BDMA_MEMORY_TO_MEMORY: \
142 BDMA_PERIPH_TO_MEMORY)
144#define DMA_TO_BDMA_PERIPHERAL_INC(__DMA_PERIPHERAL_INC__) ((__DMA_PERIPHERAL_INC__) >> 3U)
145#define DMA_TO_BDMA_MEMORY_INC(__DMA_MEMORY_INC__) ((__DMA_MEMORY_INC__) >> 3U)
147#define DMA_TO_BDMA_PDATA_SIZE(__DMA_PDATA_SIZE__) ((__DMA_PDATA_SIZE__) >> 3U)
148#define DMA_TO_BDMA_MDATA_SIZE(__DMA_MDATA_SIZE__) ((__DMA_MDATA_SIZE__) >> 3U)
150#define DMA_TO_BDMA_MODE(__DMA_MODE__) ((__DMA_MODE__) >> 3U)
152#define DMA_TO_BDMA_PRIORITY(__DMA_PRIORITY__) ((__DMA_PRIORITY__) >> 4U)
155#define IS_DMA_UART_USART_REQUEST(__REQUEST__) ((((__REQUEST__) >= DMA_REQUEST_USART1_RX) && ((__REQUEST__) <= DMA_REQUEST_USART3_TX)) || \
156 (((__REQUEST__) >= DMA_REQUEST_UART4_RX) && ((__REQUEST__) <= DMA_REQUEST_UART5_TX )) || \
157 (((__REQUEST__) >= DMA_REQUEST_USART6_RX) && ((__REQUEST__) <= DMA_REQUEST_USART6_TX)) || \
158 (((__REQUEST__) >= DMA_REQUEST_UART7_RX) && ((__REQUEST__) <= DMA_REQUEST_UART8_TX )) || \
159 (((__REQUEST__) >= DMA_REQUEST_UART9_RX) && ((__REQUEST__) <= DMA_REQUEST_USART10_TX )))
161#define IS_DMA_UART_USART_REQUEST(__REQUEST__) ((((__REQUEST__) >= DMA_REQUEST_USART1_RX) && ((__REQUEST__) <= DMA_REQUEST_USART3_TX)) || \
162 (((__REQUEST__) >= DMA_REQUEST_UART4_RX) && ((__REQUEST__) <= DMA_REQUEST_UART5_TX )) || \
163 (((__REQUEST__) >= DMA_REQUEST_USART6_RX) && ((__REQUEST__) <= DMA_REQUEST_USART6_TX)) || \
164 (((__REQUEST__) >= DMA_REQUEST_UART7_RX) && ((__REQUEST__) <= DMA_REQUEST_UART8_TX )))
175static void DMA_SetConfig(
DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
218 uint32_t registerValue;
220 DMA_Base_Registers *regs_dma;
221 BDMA_Base_Registers *regs_bdma;
265 if((
HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
301#if (STM32H7_DEV_ID == 0x450UL)
302 if(((
DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U) && (IS_DMA_UART_USART_REQUEST(hdma->
Init.
Request) != 0U))
304 if(IS_DMA_UART_USART_REQUEST(hdma->
Init.
Request) != 0U)
332 if (DMA_CheckFifoParam(hdma) !=
HAL_OK)
350 regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
353 regs_dma->IFCR = 0x3FUL << (hdma->
StreamIndex & 0x1FU);
379 registerValue |= DMA_TO_BDMA_DIRECTION(hdma->
Init.
Direction) |
395 regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
413 DMA_CalcDMAMUXChannelBaseAndMask(hdma);
434 DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
467 DMA_Base_Registers *regs_dma;
468 BDMA_Base_Registers *regs_bdma;
500 regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
503 regs_dma->IFCR = 0x3FUL << (hdma->
StreamIndex & 0x1FU);
523 regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
540 DMA_CalcDMAMUXChannelBaseAndMask(hdma);
555 DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
650 DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
706 DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
781 DMA_Base_Registers *regs_dma;
782 BDMA_Base_Registers *regs_bdma;
783 const __IO uint32_t *enableRegister;
835 if((
HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
854 regs_dma->IFCR = 0x3FUL << (hdma->
StreamIndex & 0x1FU);
896 BDMA_Base_Registers *regs_bdma;
981 uint32_t cpltlevel_mask;
985 __IO uint32_t *isr_reg;
987 __IO uint32_t *ifcr_reg;
1053 while(((*isr_reg) & cpltlevel_mask) == 0U)
1117 if(((
HAL_GetTick() - tickstart ) > Timeout)||(Timeout == 0U))
1207 uint32_t tmpisr_dma, tmpisr_bdma;
1214 BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->
StreamBaseAddress;
1216 tmpisr_dma = regs_dma->ISR;
1217 tmpisr_bdma = regs_bdma->ISR;
1327 regs_dma->IFCR = 0x3FUL << (hdma->
StreamIndex & 0x1FU);
1399 if (++
count > timeout)
1770static void DMA_SetConfig(
DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
1774 BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->
StreamBaseAddress;
1791 regs_dma->IFCR = 0x3FUL << (hdma->
StreamIndex & 0x1FU);
1861 uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->
Instance) & 0xFFU) - 16U) / 24U;
1864 static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
1865 hdma->
StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
1867 if (stream_number > 3U)
1989 uint32_t stream_number;
1990 uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->
Instance);
1995 stream_number = (((uint32_t)((uint32_t*)hdma->
Instance) & 0xFFU) - 8U) / 20U;
2003 stream_number = (((uint32_t)((uint32_t*)hdma->
Instance) & 0xFFU) - 16U) / 24U;
2005 if((stream_baseaddress <= ((uint32_t)
DMA2_Stream7) ) && \
2008 stream_number += 8U;
#define __IO
Defines 'read / write' permissions.
#define DMA_MEMORY_TO_MEMORY
Memory to memory direction.
#define DMA_MEMORY_TO_PERIPH
Memory to peripheral direction.
#define HAL_DMA_ERROR_FE
FIFO error.
#define HAL_DMA_ERROR_SYNC
DMAMUX sync overrun error.
#define HAL_DMA_ERROR_BUSY
DMA Busy error.
#define HAL_DMA_ERROR_REQGEN
DMAMUX request generator overrun error.
#define HAL_DMA_ERROR_PARAM
Parameter error.
#define HAL_DMA_ERROR_TIMEOUT
Timeout error.
#define HAL_DMA_ERROR_NOT_SUPPORTED
Not supported mode.
#define HAL_DMA_ERROR_TE
Transfer error.
#define HAL_DMA_ERROR_NONE
No error.
#define HAL_DMA_ERROR_NO_XFER
Abort requested with no Xfer ongoing.
#define HAL_DMA_ERROR_DME
Direct Mode error.
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID)
void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout)
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void(*pCallback)(DMA_HandleTypeDef *_hdma))
uint32_t HAL_DMA_GetError(const DMA_HandleTypeDef *hdma)
HAL_DMA_StateTypeDef HAL_DMA_GetState(const DMA_HandleTypeDef *hdma)
#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)
Check whether the specified DMA Stream interrupt is enabled or not.
#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified DMA Stream interrupts.
#define __HAL_DMA_ENABLE(__HANDLE__)
Enable the specified DMA Stream.
#define __HAL_DMA_DISABLE(__HANDLE__)
Disable the specified DMA Stream.
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
HAL_DMA_StateTypeDef
HAL DMA State structures definition.
HAL_DMA_LevelCompleteTypeDef
HAL DMA Transfer complete level structure definition.
HAL_DMA_CallbackIDTypeDef
HAL DMA Callbacks IDs structure definition.
@ HAL_DMA_STATE_RESET
DMA not yet initialized or disabled.
@ HAL_DMA_STATE_ERROR
DMA error state.
@ HAL_DMA_STATE_READY
DMA initialized and ready for use.
@ HAL_DMA_STATE_ABORT
DMA Abort state.
@ HAL_DMA_STATE_BUSY
DMA process is ongoing.
@ HAL_DMA_FULL_TRANSFER
Full transfer.
@ HAL_DMA_XFER_M1CPLT_CB_ID
M1 Full Transfer.
@ HAL_DMA_XFER_ABORT_CB_ID
Abort.
@ HAL_DMA_XFER_ERROR_CB_ID
Error.
@ HAL_DMA_XFER_HALFCPLT_CB_ID
Half Transfer.
@ HAL_DMA_XFER_CPLT_CB_ID
Full transfer.
@ HAL_DMA_XFER_M1HALFCPLT_CB_ID
M1 Half Transfer.
@ HAL_DMA_XFER_ALL_CB_ID
All.
#define DMA_FIFOMODE_ENABLE
FIFO mode enable.
#define DMA_FIFOMODE_DISABLE
FIFO mode disable.
#define DMA_FIFO_THRESHOLD_1QUARTERFULL
FIFO threshold 1 quart full configuration.
#define DMA_FIFO_THRESHOLD_FULL
FIFO threshold full configuration.
#define DMA_FIFO_THRESHOLD_HALFFULL
FIFO threshold half full configuration.
#define DMA_FIFO_THRESHOLD_3QUARTERSFULL
FIFO threshold 3 quarts full configuration.
#define DMA_MBURST_SINGLE
#define DMA_MDATAALIGN_HALFWORD
Memory data alignment: HalfWord.
#define DMA_MDATAALIGN_BYTE
Memory data alignment: Byte.
#define IS_DMA_PERIPHERAL_INC_STATE(STATE)
#define IS_DMA_BUFFER_SIZE(SIZE)
#define IS_DMA_PERIPHERAL_BURST(BURST)
#define IS_DMA_REQUEST(REQUEST)
#define IS_DMA_MEMORY_BURST(BURST)
#define IS_DMA_PRIORITY(PRIORITY)
#define IS_DMA_MEMORY_INC_STATE(STATE)
#define IS_DMA_MEMORY_DATA_SIZE(SIZE)
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE)
#define IS_DMA_MODE(MODE)
#define IS_DMA_FIFO_MODE_STATE(STATE)
#define IS_DMA_DIRECTION(DIRECTION)
#define IS_BDMA_REQUEST(REQUEST)
#define IS_DMA_FIFO_THRESHOLD(THRESHOLD)
#define DMA_REQUEST_MEM2MEM
memory to memory transfer
#define DMA_REQUEST_GENERATOR0
DMAMUX1 request generator 0.
#define DMA_REQUEST_GENERATOR7
DMAMUX1 request generator 7.
#define DMA_FLAG_DMEIF0_4
#define IS_BDMA_CHANNEL_DMAMUX_INSTANCE(INSTANCE)
#define IS_DMA_ALL_INSTANCE(INSTANCE)
#define IS_DMA_STREAM_INSTANCE(INSTANCE)
#define IS_DMA_DMAMUX_ALL_INSTANCE(INSTANCE)
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define IS_BDMA_CHANNEL_INSTANCE(INSTANCE)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define DMA_SxCR_PL
Priority level.
#define DMAMUX_CxCR_SOIE
Synchronization overrun interrupt enable.
#define DMA_SxCR_DIR
Data transfer direction.
#define BDMA_CCR_MEM2MEM
Memory to memory mode.
#define BDMA_CCR_MINC
Memory increment mode.
#define BDMA_CCR_PL
PL[1:0] bits(Channel Priority level).
#define DMA_SxCR_PINC
Peripheral increment mode.
#define BDMA_CCR_TCIE
Transfer complete interrupt enable.
#define DMA_SxCR_TRBUFF
bufferable transfers enabled/disable
#define DMAMUX_CxCR_DMAREQ_ID
DMA request identification.
#define DMA_SxFCR_FTH
FIFO threshold selection.
#define BDMA_ISR_TCIF0
Channel 0 Transfer Complete flag.
#define DMA_SxCR_PBURST
Peripheral burst transfer configuration.
#define DMA_SxCR_DBM
Double buffer mode.
#define DMA_SxCR_MBURST
Memory burst transfer configuration.
#define BDMA_ISR_GIF0
Channel 0 Global interrupt flag.
#define BDMA_ISR_HTIF0
Channel 0 Half Transfer flag.
#define DMAMUX_RGxCR_OIE
Trigger overrun interrupt enable.
#define DMA_SxCR_MINC
Memory increment mode.
#define BDMA_IFCR_CGIF0
Channel 0 Global interrupt clearr.
#define DMA_SxFCR_DMDIS
Direct mode disable.
#define BDMA_CCR_HTIE
Half Transfer interrupt enable.
#define BDMA_CCR_MSIZE
MSIZE[1:0] bits (Memory size).
#define BDMA_CCR_DBM
Memory to memory mode.
#define BDMA_CCR_CIRC
Circular mode.
#define DMA_SxCR_EN
Stream enable / flag stream ready when read low.
#define BDMA_CCR_PINC
Peripheral increment mode.
#define BDMA_CCR_CT
Memory to memory mode.
#define DMA_SxCR_CIRC
Circular mode.
#define DMA_SxCR_CT
Current target (only in double buffer mode).
#define BDMA_CCR_PSIZE
PSIZE[1:0] bits (Peripheral size).
#define DMA_SxCR_MSIZE
Memory data size.
#define BDMA_CCR_DIR
Data transfer direction.
#define DMAMUX_CxCR_SE
Synchronization enable.
#define DMA_SxCR_MBURST_1
0x01000000
#define BDMA_CCR_TEIE
Transfer error interrupt enable.
#define DMAMUX2_RequestGenerator0
#define DMAMUX1_RequestGenStatus
#define DMAMUX2_ChannelStatus
#define DMAMUX1_RequestGenerator0
#define DMAMUX2_RequestGenStatus
#define DMAMUX1_ChannelStatus
uint32_t SystemCoreClock
System Domain1 Clock Frequency.
size_type count(const key_type &key) const
This file contains all the functions prototypes for the HAL module driver.
#define assert_param(expr)
Uncomment the line below to expanse the "assert_param" macro in the HAL drivers code.
HAL_StatusTypeDef
HAL Status structures definition.
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
__IO uint32_t CSR
DMA Channel Status Register.
__IO uint32_t CFR
DMA Channel Clear Flag Register.
__IO uint32_t CCR
DMA Multiplexer Channel x Control Register.
__IO uint32_t RGCFR
DMA Request Generator Clear Flag Register.
__IO uint32_t RGSR
DMA Request Generator Status Register.
__IO uint32_t RGCR
DMA Request Generator x Control Register.
uint32_t Direction
Specifies if the data will be transferred from memory to peripheral, from memory to memory or from pe...
uint32_t PeriphDataAlignment
Specifies the Peripheral data width.
uint32_t FIFOThreshold
Specifies the FIFO threshold level.
uint32_t PeriphBurst
Specifies the Burst transfer configuration for the peripheral transfers.
uint32_t PeriphInc
Specifies whether the Peripheral address register should be incremented or not.
uint32_t MemInc
Specifies whether the memory address register should be incremented or not.
uint32_t Request
Specifies the request selected for the specified stream.
uint32_t MemDataAlignment
Specifies the Memory data width.
uint32_t FIFOMode
Specifies if the FIFO mode or Direct mode will be used for the specified stream.
uint32_t MemBurst
Specifies the Burst transfer configuration for the memory transfers.
uint32_t Mode
Specifies the operation mode of the DMAy Streamx.
uint32_t Priority
Specifies the software priority for the DMAy Streamx.
DMAMUX_RequestGenStatus_TypeDef * DMAmuxRequestGenStatus
DMAMUX request generator Status Address.
DMAMUX_Channel_TypeDef * DMAmuxChannel
DMAMUX Channel Base Address.
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer Abort callback.
uint32_t DMAmuxChannelStatusMask
DMAMUX Channel Status Mask.
DMA_InitTypeDef Init
DMA communication parameters.
uint32_t StreamIndex
DMA Stream Index.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer complete callback.
__IO uint32_t ErrorCode
DMA Error code.
DMAMUX_RequestGen_TypeDef * DMAmuxRequestGen
DMAMUX request generator Base Address.
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer error callback.
__IO HAL_DMA_StateTypeDef State
DMA transfer state.
DMAMUX_ChannelStatus_TypeDef * DMAmuxChannelStatus
DMAMUX Channels Status Base Address.
void * Instance
Register base address.
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA Half transfer complete callback.
uint32_t StreamBaseAddress
DMA Stream Base Address.
void(* XferM1HalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer Half complete Memory1 callback.
void(* XferM1CpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA transfer complete Memory1 callback.
uint32_t DMAmuxRequestGenStatusMask
DMAMUX request generator Status mask.