161#ifdef HAL_MDMA_MODULE_ENABLED
168#define HAL_TIMEOUT_MDMA_ABORT 5U
169#define HAL_MDMA_CHANNEL_SIZE 0x40U
179static void MDMA_SetConfig(
MDMA_HandleTypeDef *hmdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t BlockDataLength, uint32_t BlockCount);
259 if((
HAL_GetTick() - tickstart ) > HAL_TIMEOUT_MDMA_ABORT)
375 if(MaskAddress == 0U)
570 uint32_t addressMask;
571 uint32_t blockoffset;
574 if((pNode ==
NULL) || (pNodeConfig ==
NULL))
642 pNode->
CBRUR = blockoffset & 0x0000FFFFU;
683 addressMask = pNodeConfig->
SrcAddress & 0xFF000000U;
684 if((addressMask == 0x20000000U) || (addressMask == 0x00000000U))
690 addressMask = pNodeConfig->
DstAddress & 0xFF000000U;
691 if((addressMask == 0x20000000U) || (addressMask == 0x00000000U))
714 uint32_t counter = 0, nodeInserted = 0;
718 if((hmdma ==
NULL) || (pNewNode ==
NULL))
734 if(pPrevNode ==
NULL)
760 while((counter < hmdma->LinkedListNodeCounter) && (hal_status ==
HAL_OK))
762 if(pNode->
CLAR == (uint32_t)pNewNode)
788 while((counter < hmdma->LinkedListNodeCounter) && (nodeInserted == 0U))
791 if(pNode == pPrevNode)
795 pNode->
CLAR = (uint32_t)pNewNode;
806 if(nodeInserted == 0U)
847 uint32_t counter = 0, nodeDeleted = 0;
851 if((hmdma ==
NULL) || (pNode ==
NULL))
904 while((counter < hmdma->LinkedListNodeCounter) && (nodeDeleted == 0U))
907 if(ptmpNode->
CLAR == ((uint32_t)pNode))
916 ptmpNode->
CLAR = pNode->CLAR;
927 if(nodeDeleted == 0U)
1099 MDMA_SetConfig(hmdma, SrcAddress, DstAddress, BlockDataLength, BlockCount);
1159 MDMA_SetConfig(hmdma, SrcAddress, DstAddress, BlockDataLength, BlockCount);
1246 if( (
HAL_GetTick() - tickstart ) > HAL_TIMEOUT_MDMA_ABORT)
1317 uint32_t levelFlag, errorFlag;
1405 if(((
HAL_GetTick() - tickstart ) > Timeout) || (Timeout == 0U))
1464 uint32_t request_mode;
1509 uint32_t generalIntFlag, errorFlag;
1512 generalIntFlag = 1UL << ((((uint32_t)hmdma->
Instance - (uint32_t)(
MDMA_Channel0))/HAL_MDMA_CHANNEL_SIZE) & 0x1FU);
1513 if((
MDMA->GISR0 & generalIntFlag) == 0U)
1667 if (++
count > timeout)
1724 return hmdma->
State;
1760static void MDMA_SetConfig(
MDMA_HandleTypeDef *hmdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t BlockDataLength, uint32_t BlockCount)
1762 uint32_t addressMask;
1779 addressMask = SrcAddress & 0xFF000000U;
1780 if((addressMask == 0x20000000U) || (addressMask == 0x00000000U))
1791 addressMask = DstAddress & 0xFF000000U;
1792 if((addressMask == 0x20000000U) || (addressMask == 0x00000000U))
1816 uint32_t blockoffset;
#define __IO
Defines 'read / write' permissions.
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define IS_MDMA_STREAM_ALL_INSTANCE(INSTANCE)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define HAL_MDMA_ERROR_LINKED_LIST
Linked list Data error.
#define HAL_MDMA_ERROR_NO_XFER
Abort or SW trigger requested with no Xfer ongoing.
#define HAL_MDMA_ERROR_NONE
No error.
#define HAL_MDMA_ERROR_READ_XFER
Read Transfer error.
#define HAL_MDMA_ERROR_WRITE_XFER
Write Transfer error.
#define HAL_MDMA_ERROR_ALIGNMENT
Address/Size alignment error.
#define HAL_MDMA_ERROR_BUSY
DeInit or SW trigger requested with Xfer ongoing.
#define HAL_MDMA_ERROR_BLOCK_SIZE
Block Size error.
#define HAL_MDMA_ERROR_TIMEOUT
Timeout error.
#define HAL_MDMA_ERROR_MASK_DATA
Error Mask Data error.
HAL_StatusTypeDef HAL_MDMA_ConfigPostRequestMask(MDMA_HandleTypeDef *hmdma, uint32_t MaskAddress, uint32_t MaskData)
HAL_StatusTypeDef HAL_MDMA_Init(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_RegisterCallback(MDMA_HandleTypeDef *hmdma, HAL_MDMA_CallbackIDTypeDef CallbackID, void(*pCallback)(MDMA_HandleTypeDef *_hmdma))
HAL_StatusTypeDef HAL_MDMA_DeInit(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_UnRegisterCallback(MDMA_HandleTypeDef *hmdma, HAL_MDMA_CallbackIDTypeDef CallbackID)
HAL_StatusTypeDef HAL_MDMA_LinkedList_CreateNode(MDMA_LinkNodeTypeDef *pNode, MDMA_LinkNodeConfTypeDef *pNodeConfig)
HAL_StatusTypeDef HAL_MDMA_LinkedList_EnableCircularMode(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_LinkedList_AddNode(MDMA_HandleTypeDef *hmdma, MDMA_LinkNodeTypeDef *pNewNode, const MDMA_LinkNodeTypeDef *pPrevNode)
HAL_StatusTypeDef HAL_MDMA_LinkedList_RemoveNode(MDMA_HandleTypeDef *hmdma, MDMA_LinkNodeTypeDef *pNode)
HAL_StatusTypeDef HAL_MDMA_LinkedList_DisableCircularMode(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_Abort_IT(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_Abort(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_Start_IT(MDMA_HandleTypeDef *hmdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t BlockDataLength, uint32_t BlockCount)
HAL_StatusTypeDef HAL_MDMA_PollForTransfer(MDMA_HandleTypeDef *hmdma, HAL_MDMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout)
HAL_StatusTypeDef HAL_MDMA_GenerateSWRequest(MDMA_HandleTypeDef *hmdma)
HAL_StatusTypeDef HAL_MDMA_Start(MDMA_HandleTypeDef *hmdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t BlockDataLength, uint32_t BlockCount)
void HAL_MDMA_IRQHandler(MDMA_HandleTypeDef *hmdma)
HAL_MDMA_StateTypeDef HAL_MDMA_GetState(const MDMA_HandleTypeDef *hmdma)
uint32_t HAL_MDMA_GetError(const MDMA_HandleTypeDef *hmdma)
#define __HAL_MDMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enables the specified MDMA Channel interrupts.
#define __HAL_MDMA_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the MDMA Stream pending flags.
#define __HAL_MDMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)
Checks whether the specified MDMA Channel interrupt is enabled or not.
#define __HAL_MDMA_GET_FLAG(__HANDLE__, __FLAG__)
Get the MDMA Channel pending flags.
#define __HAL_MDMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disables the specified MDMA Channel interrupts.
#define __HAL_MDMA_DISABLE(__HANDLE__)
Disable the specified MDMA Channel.
#define __HAL_MDMA_ENABLE(__HANDLE__)
Enable the specified MDMA Channel.
HAL_MDMA_StateTypeDef
HAL MDMA State structure definition.
HAL_MDMA_LevelCompleteTypeDef
HAL MDMA Level Complete structure definition.
HAL_MDMA_CallbackIDTypeDef
HAL MDMA Callbacks IDs structure definition.
struct __MDMA_HandleTypeDef MDMA_HandleTypeDef
MDMA handle Structure definition.
@ HAL_MDMA_STATE_RESET
MDMA not yet initialized or disabled.
@ HAL_MDMA_STATE_BUSY
MDMA process is ongoing.
@ HAL_MDMA_STATE_ABORT
MDMA Abort state.
@ HAL_MDMA_STATE_READY
MDMA initialized and ready for use.
@ HAL_MDMA_STATE_ERROR
MDMA error state.
@ HAL_MDMA_FULL_TRANSFER
Full transfer.
@ HAL_MDMA_BUFFER_TRANSFER
Buffer Transfer.
@ HAL_MDMA_BLOCK_TRANSFER
Block Transfer.
@ HAL_MDMA_REPEAT_BLOCK_TRANSFER
repeat block Transfer
@ HAL_MDMA_XFER_CPLT_CB_ID
Full transfer.
@ HAL_MDMA_XFER_ABORT_CB_ID
Abort.
@ HAL_MDMA_XFER_REPBLOCKCPLT_CB_ID
Repeated Block Transfer.
@ HAL_MDMA_XFER_BUFFERCPLT_CB_ID
Buffer Transfer.
@ HAL_MDMA_XFER_ERROR_CB_ID
Error.
@ HAL_MDMA_XFER_ALL_CB_ID
All.
@ HAL_MDMA_XFER_BLOCKCPLT_CB_ID
Block Transfer.
#define IS_MDMA_TRANSFER_LENGTH(SIZE)
#define IS_MDMA_DESTINATION_DATASIZE(__SIZE__)
#define IS_MDMA_SOURCE_DATASIZE(__SIZE__)
#define IS_MDMA_TRANSFER_TRIGGER_MODE(__MODE__)
#define IS_MDMA_LEVEL_COMPLETE(__LEVEL__)
#define IS_MDMA_DATA_ALIGNMENT(__ALIGNMENT__)
#define IS_MDMA_PRIORITY(__PRIORITY__)
#define IS_MDMA_REQUEST(__REQUEST__)
#define IS_MDMA_BLOCK_COUNT(__COUNT__)
#define IS_MDMA_DESTINATION_INC(__INC__)
#define IS_MDMA_BLOCK_ADDR_OFFSET(__BLOCK_ADD_OFFSET__)
#define IS_MDMA_SOURCE_BURST(__BURST__)
#define IS_MDMA_ENDIANNESS_MODE(__ENDIANNESS__)
#define IS_MDMA_BUFFER_TRANSFER_LENGTH(__LENGTH__)
#define IS_MDMA_SOURCE_INC(__INC__)
#define IS_MDMA_DESTINATION_BURST(__BURST__)
#define MDMA_REQUEST_SW
MDMA SW request.
#define MDMA_FLAG_TE
Transfer Error flag.
#define MDMA_FLAG_BRT
Block Repeat Transfer complete flag.
#define MDMA_FLAG_CTC
Channel Transfer Complete flag.
#define MDMA_FLAG_BT
Block Transfer complete flag.
#define MDMA_FLAG_BFTC
BuFfer Transfer complete flag.
#define MDMA_IT_BRT
Block Repeat Transfer interrupt.
#define MDMA_IT_TE
Transfer Error interrupt.
#define MDMA_IT_BFTC
Buffer Transfer Complete interrupt.
#define MDMA_IT_BT
Block Transfer interrupt.
#define MDMA_IT_CTC
Channel Transfer Complete interrupt.
#define MDMA_CTCR_SWRM
SW Request Mode.
#define MDMA_CTBR_DBUS
Destination BUS select.
#define MDMA_CISR_BRTIF
Channel x block repeat transfer complete interrupt flag.
#define MDMA_CBNDTR_BRC_Pos
#define MDMA_CTBR_TSEL
Trigger SELection.
#define MDMA_CBRUR_DUV_Pos
#define MDMA_CCR_SWRQ
SW ReQuest.
#define MDMA_CISR_TCIF
Channel x buffer transfer complete interrupt flag.
#define MDMA_CESR_ASE
Address/Size Error.
#define MDMA_CBNDTR_BRC
Block Repeat Count.
#define MDMA_CTCR_BWM
Bufferable Write Mode.
#define MDMA_CCR_EN
Channel enable / flag channel ready when read low.
#define MDMA_CBNDTR_BRSUM
Block Repeat Source address Update Mode.
#define MDMA_CISR_CRQA
Channel x request Active flag.
#define MDMA_CESR_TED
Transfer Error Direction.
#define MDMA_CTBR_SBUS
Source BUS select.
#define MDMA_CBNDTR_BRDUM
Block Repeat Destination address Update Mode.
#define MDMA_CESR_BSE
Block Size Error.
#define MDMA_CESR_TELD
Transfer Error Link Data.
#define MDMA_CISR_BTIF
Channel x block transfer complete interrupt flag.
#define MDMA_CBNDTR_BNDT
Block Number of data bytes to transfer.
#define MDMA_CTCR_TLEN_Pos
#define MDMA_CESR_TEMD
Transfer Error Mask Data.
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 CTCR
MDMA channel x Transfer Configuration register, Address offset: 0x50.
__IO uint32_t CISR
MDMA channel x interrupt/status register, Address offset: 0x40.
__IO uint32_t CLAR
MDMA channel x Link Address register, Address offset: 0x64.
__IO uint32_t CTBR
MDMA channel x Trigger and Bus selection Register, Address offset: 0x68.
__IO uint32_t CMAR
MDMA channel x Mask address register, Address offset: 0x70.
__IO uint32_t CCR
MDMA channel x control register, Address offset: 0x4C.
__IO uint32_t CBRUR
MDMA channel x Block Repeat address Update register, Address offset: 0x60.
__IO uint32_t CESR
MDMA Channel x error status register, Address offset: 0x48.
__IO uint32_t CSAR
MDMA channel x source address register, Address offset: 0x58.
__IO uint32_t CDAR
MDMA channel x destination address register, Address offset: 0x5C.
__IO uint32_t CMDR
MDMA channel x Mask Data register, Address offset: 0x74.
__IO uint32_t CBNDTR
MDMA Channel x block number of data register, Address offset: 0x54.
int32_t SourceBlockAddressOffset
this field specifies the Next block source address offset signed value : if > 0 then increment the ne...
uint32_t TransferTriggerMode
Specifies the Trigger Transfer mode : each request triggers a : a buffer transfer,...
uint32_t DestinationInc
Specifies if the Destination increment mode .
uint32_t DestBurst
Specifies the Burst transfer configuration for the destination memory transfers.
uint32_t SourceInc
Specifies if the Source increment mode .
uint32_t SourceBurst
Specifies the Burst transfer configuration for the source memory transfers.
uint32_t Priority
Specifies the software priority for the MDMAy channelx.
uint32_t SourceDataSize
Specifies the source data size.
uint32_t BufferTransferLength
Specifies the buffer Transfer Length (number of bytes), this is the number of bytes to be transferred...
uint32_t Endianness
Specifies if the MDMA transactions preserve the Little endianness.
uint32_t Request
Specifies the MDMA request.
uint32_t DataAlignment
Specifies the source to destination Memory data packing/padding mode.
int32_t DestBlockAddressOffset
this field specifies the Next block destination address offset signed value : if > 0 then increment t...
uint32_t DestDataSize
Specifies the destination data size.
HAL MDMA linked list node configuration structure definition.
uint32_t PostRequestMaskData
specifies the value to be written to PostRequestMaskAddress after a request is served.
uint32_t PostRequestMaskAddress
specifies the address to be updated (written) with PostRequestMaskData after a request is served.
MDMA_InitTypeDef Init
configuration of the specified MDMA Linked List Node
uint32_t BlockDataLength
The data length of a block in bytes.
uint32_t DstAddress
The destination memory address for the Linked list Node.
uint32_t BlockCount
The number of blocks to be transferred.
uint32_t SrcAddress
The source memory address for the Linked list Node.
HAL MDMA linked list node structure definition.
__IO uint32_t CDAR
New CDAR register configuration for the given MDMA linked list node.
__IO uint32_t CTCR
New CTCR register configuration for the given MDMA linked list node.
__IO uint32_t CBRUR
New CBRUR register configuration for the given MDMA linked list node.
__IO uint32_t Reserved
Reserved register.
__IO uint32_t CLAR
New CLAR register configuration for the given MDMA linked list node.
__IO uint32_t CMDR
New CMDR register configuration for the given MDMA linked list node.
__IO uint32_t CBNDTR
New CBNDTR register configuration for the given MDMA linked list node.
__IO uint32_t CMAR
New CMAR register configuration for the given MDMA linked list node.
__IO uint32_t CTBR
New CTBR register configuration for the given MDMA linked list node.
__IO uint32_t CSAR
New CSAR register configuration for the given MDMA linked list node.
__IO uint32_t ErrorCode
MDMA Error code.
void(* XferBufferCpltCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA buffer transfer complete callback.
MDMA_LinkNodeTypeDef * FirstLinkedListNodeAddress
specifies the first node address of the transfer list (after the initial node defined by the Init str...
MDMA_LinkNodeTypeDef * LastLinkedListNodeAddress
specifies the last node address of the transfer list this parameter is used internally by the MDMA dr...
void(* XferCpltCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA transfer complete callback.
void(* XferBlockCpltCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA block transfer complete callback.
void(* XferRepeatBlockCpltCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA block transfer repeat callback.
uint32_t LinkedListNodeCounter
Number of nodes in the MDMA linked list.
MDMA_Channel_TypeDef * Instance
Register base address.
__IO HAL_MDMA_StateTypeDef State
MDMA transfer state.
MDMA_InitTypeDef Init
MDMA communication parameters.
void(* XferErrorCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA transfer error callback.
void(* XferAbortCallback)(struct __MDMA_HandleTypeDef *hmdma)
MDMA transfer Abort callback.