HAL DMA2D Use Cases

Initialization

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d

participant "System" as system

participant "ISR" as isr



== Prerequisite ==



user->system : HAL_Init()

system --> user :hal_status_t

user->system : Configure system clock

system --> user :hal_status_t



== Initialization ==



user->dma2d : HAL_DMA2D_Init()

alt#grey #lightgrey If USE_HAL_DMA2D_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dma2d->RCC : Enable the DMA2D clock

RCC-->dma2d

end

dma2d --> user :hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_IDLE)



==DMA2D System Initialization==



Note right user : DMA2D System initialization can be called before\nDMA2D HAL initialization



group #LightYellow Optional : If Interrupt needed

user->isr : Enable needed Interrupt

isr-->user

end



Note right dma2d : Clock enabling : 2 alternative \n\

- Either enable the DMA2D clock at user code,\n\

- Either set the define USE_HAL_DMA2D_CLK_ENABLE_MODEL \n\

to  HAL_CLK_ENABLE_PERIPH_ONLY  and \n\

the clock will be enabled within the HAL_DMA2D_Init



alt#grey #lightgrey If USE_HAL_DMA2D_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

user->RCC : Enable the DMA2D clock

RCC --> user

end

@enduml

Called functions:

Optional Transfer Configuration

@startuml

participant "User Application" as user

participant "DMA2D Driver" as dma2d



== Optional Configuration ==



group #LightYellow Optional

user->dma2d : HAL_DMA2D_EnableOutputAlphaInversion()

user<--dma2d : hal_status_t



user->dma2d : HAL_DMA2D_EnableInputAlphaInversion()

user<--dma2d : hal_status_t



user->dma2d : HAL_DMA2D_SetLineOffsetMode()

user<--dma2d : hal_status_t



user->dma2d : HAL_DMA2D_EnableOutputByteSwap()

user<--dma2d : hal_status_t



user->dma2d : HAL_DMA2D_SetConfigDeadTime()

user<--dma2d : hal_status_t



user->dma2d : HAL_DMA2D_EnableDeadTime()

user<--dma2d : hal_status_t

end



note right : These optional settings \n can be done once \n and remain applicable \n for next transfers

@enduml

Called functions:

Transfer Configuration

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d



== Transfer Configuration ==



user->dma2d : HAL_DMA2D_SetConfigBlending() or \nHAL_DMA2D_SetConfigBlendingWithFGColor() or \nHAL_DMA2D_SetConfigBlendingWithBGColor() or \nHAL_DMA2D_SetConfigMemCopy() or \nHAL_DMA2D_SetConfigMemCopyPFC() or \nHAL_DMA2D_SetConfigMemFill()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_IDLE)



@enduml

Called functions:

Transfer Polling Mode

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d



== Process Transfer Polling mode==



user->dma2d : HAL_DMA2D_Start()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_ACTIVE)



group #LightYellow Optional

user->dma2d : HAL_DMA2D_Suspend()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_SUSPEND)



user->dma2d : HAL_DMA2D_Resume()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_ACTIVE)

end



group #LightYellow Optional

user->dma2d : HAL_DMA2D_Abort()



user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_IDLE)

end



user->dma2d : HAL_DMA2D_PollForTransfer()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_IDLE)



@enduml

Called functions:

Transfer Interrupt Mode

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d

participant "DMA2D HW" as hw

participant "ISR" as isr



== Process Transfer Interrupt mode==



group #LightYellow Optional

user->dma2d : HAL_DMA2D_EnableWaterMark()

user<--dma2d : hal_status_t

end



group #LightYellow Optional

user<-dma2d : HAL_DMA2D_RegisterXferCpltCallback()

user<--dma2d : hal_status_t

user<-dma2d : HAL_DMA2D_RegisterErrorCallback()

user<--dma2d : hal_status_t

user<-dma2d : HAL_DMA2D_RegisterWaterMarkCallback()

user<--dma2d : hal_status_t

end



user->dma2d : HAL_DMA2D_Start_IT()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_ACTIVE)



group #LightYellow Optional

user->dma2d : HAL_DMA2D_Suspend()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_SUSPEND)



user->dma2d : HAL_DMA2D_Resume()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_XFER_ACTIVE)

end



group #LightYellow Optional

user->dma2d : HAL_DMA2D_Abort()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_IDLE)

end



isr->hw : Interrupt

hw->dma2d : HAL_DMA2D_IRQHandler()



group #LightYellow Optional

user<-dma2d : HAL_DMA2D_WaterMarkCallback() \ WaterMark User Callback

note right : If WaterMark Interrupt

end



user<-dma2d : HAL_DMA2D_ErrorCallback() \ User Error Callback or \nHAL_DMA2D_XferCpltCallback() \ Transfer Complete User Callback

note right : If Transfer Error Interrupt or Configuration Error Interrupt \nIf Transfer Complete Interrupt



@enduml

Called functions:

CLUT Loading Polling Mode

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d



== Process CLUT loading Polling mode==



user->dma2d : HAL_DMA2D_StartCLUTLoad()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_ACTIVE)



group #LightYellow Optional

user->dma2d : HAL_DMA2D_SuspendCLUTLoad()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_SUSPEND)



user->dma2d : HAL_DMA2D_ResumeCLUTLoad()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_ACTIVE)

end



group #LightYellow Optional

user->dma2d : HAL_DMA2D_AbortCLUTLoad()



user<--dma2d : hal_status_t

end



user->dma2d : HAL_DMA2D_PollForCLUTLoad()

user<--dma2d : hal_status_t



@enduml

Called functions:

CLUT Loading Interrupt Mode

@startuml

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as user

participant "DMA2D Driver" as dma2d

participant "DMA2D HW" as hw

participant "ISR" as isr



== Process CLUT loading Interrupt mode==



group #LightYellow Optional

user<-dma2d : HAL_DMA2D_RegisterCLUTLoadingCpltCallback()

user<--dma2d : hal_status_t

user<-dma2d : HAL_DMA2D_RegisterErrorCallback()

user<--dma2d : hal_status_t

end



user->dma2d : HAL_DMA2D_StartCLUTLoad_IT()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_ACTIVE)



group #LightYellow Optional

user->dma2d : HAL_DMA2D_SuspendCLUTLoad()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_SUSPEND)



user->dma2d : HAL_DMA2D_ResumeCLUTLoad()

user<--dma2d : hal_status_t \n(hal_dma2d_state_t = HAL_DMA2D_STATE_CLUT_LOADING_ACTIVE)

end



group #LightYellow Optional

user->dma2d : HAL_DMA2D_AbortCLUTLoad()



user<--dma2d : hal_status_t

end



isr->hw : Interrupt

hw->dma2d : HAL_DMA2D_IRQHandler()



user<-dma2d : HAL_DMA2D_ErrorCallback() \ User Error Callback or \nHAL_DMA2D_CLUTLoadingCpltCallback() \ CLUT Loading Complete User Callback

note right : If CLUT Access Error Interrupt or Configuration Error Interrupt \nIf CLUT Loading Complete Interrupt



@enduml

Called functions:

DeInitialization

@startuml



== Driver DeInitialization==



user->dma2d : HAL_DMA2D_DeInit()

user<--dma2d : (hal_dma2d_state_t = HAL_DMA2D_STATE_RESET)



@enduml

Called functions: