HAL DSI Use Cases

dsi_uc_video_mode

@startuml

participant "User Application" as user

participant "System"           as sys

participant "RCC Driver"       as rcc

participant "DSI Driver"       as dsi

participant "DMA2D"            as dam2d

participant "LTDC Driver"      as ltdc

participant "NVIC"             as NVIC

participant "HW"               as HW





group #GreenYellow System initialization

user->sys : HAL_Init()

sys->user : Configure system clock

end



group #FFB133 DSI Initialization

user->dsi : HAL_DSI_Init()

alt#grey #lightgrey If USE_HAL_DSI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dsi->rcc : Enable the DSI clock

rcc-->dsi

end

end



box "Configuration" #CCFF99

    box "Mandatory" #CCFF99



group #FFB133 DSI Configuration

group #lightblue Mandatory

    user -> dsi: HAL_DSI_SetConfig()

    user -> dsi: HAL_DSI_SetConfigHostTimeouts()

    user -> dsi: HAL_DSI_SetConfigPhyTimer()

    user -> dsi: HAL_DSI_SetConfigVideoMode()

    end box

end



    box "Optional" #CCFF99

    ' Add optional configurations here if needed

    end box

end box

alt#grey  #lightgrey

dsi->rcc : Switch to DSI PHY PLL clock (default)

rcc-->dsi

end

end



group #LightYellow LTDC Configuration

user -> ltdc: HAL_LTDC_Init()

user -> ltdc: HAL_LTDC_SetConfig()

user -> ltdc: HAL_LTDC_SetLayer()

user -> ltdc: HAL_LTDC_Start()

user -> ltdc: HAL_LTDC_ForceReload()

end



group #FFB133 DSI Process

box "Process" #CCFFFF

user <- dsi: HAL_DSI_Start()



group #lightgrey CopyPicture 

user -> dam2d: HAL_DMA2D_Init()

user -> dam2d: HAL_DMA2D_SetConfigMemCopy()

user -> dam2d: HAL_DMA2D_Start()

user -> dam2d: HAL_DMA2D_PollForTransfer()



end



group #lightgrey Set Panel Configuration 

user <- dsi: HAL_DSI_ShortWrite()

user <- dsi: HAL_DSI_LongWrite()

end

end



group #OrangeRed De-initialization

user->dsi : HAL_DSI_DeInit()

end



@enduml

Called functions:

dsi_uc_cmd_mode

@startuml

participant "User Application" as user

participant "System"           as sys

participant "RCC Driver"       as rcc

participant "DSI Driver"       as dsi

participant "LTDC Driver"      as ltdc

participant "NVIC"             as NVIC

participant "HW"               as HW



group #GreenYellow System initialization

user->sys : HAL_Init()

sys->user : Configure system clock

end



group #FFB133 DSI Initialization

user->dsi : HAL_DSI_Init()

alt#grey #lightgrey If USE_HAL_DSI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dsi->rcc : Enable the DSI clock

rcc-->dsi

end

end



box "Configuration" #CCFF99

    box "Mandatory" #CCFF99



group #FFB133 DSI Configuration

group #lightblue Mandatory

    user -> dsi: HAL_DSI_SetConfig()

    user -> dsi: HAL_DSI_SetConfigHostTimeouts()

    user -> dsi: HAL_DSI_SetConfigPhyTimer()

    user -> dsi: HAL_DSI_SetConfigAdaptedCommandMode()

    user -> dsi: HAL_DSI_SetConfigLPCommand()

    end box

end

group #lightYellow Optional

user -> dsi: HAL_DSI_SetConfigTearingEffect()

end



    box "Optional" #CCFF99

    ' Add optional configurations here if needed

    end box

end box

alt#grey  #lightgrey

dsi->rcc : Switch to DSI PHY PLL clock (default)

rcc-->dsi

end

end



group #LightYellow LTDC Configuration

user -> ltdc: HAL_LTDC_Init()

user -> ltdc: HAL_LTDC_SetConfig()

user -> ltdc: HAL_LTDC_SetLayer()

user -> ltdc: HAL_LTDC_Start()

user -> ltdc: HAL_LTDC_ForceReload()

end



group #FFB133 DSI Process

box "Process" #CCFFFF

user <- dsi: HAL_DSI_Start()



group #lightgrey Set Panel Configuration 

user <- dsi: HAL_DSI_ShortWrite()

user <- dsi: HAL_DSI_LongWrite()

end



group #LightYellow Optional

user <- dsi: HAL_DSI_Refresh()



HW<-NVIC : Interrupt

NVIC->dsi : HAL_DSI_IRQHandler()

dsi->user : TearingEffect User callback()

end

end



group #OrangeRed De-initialization

user->dsi : HAL_DSI_DeInit()

end



@enduml

Called functions:

dsi_uc_ulpm

@startuml

participant "User Application" as user

participant "System"           as sys

participant "RCC Driver"       as rcc

participant "DSI Driver"       as dsi

participant "LTDC Driver"      as ltdc

participant "NVIC"             as NVIC

participant "HW"               as HW



group #GreenYellow System initialization

user->sys : HAL_Init()

sys->user : Configure system clock

end



group #FFB133 DSI Initialization

user->dsi : HAL_DSI_Init()

alt#grey #lightgrey If USE_HAL_DSI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dsi->rcc : Enable the DSI clock

rcc-->dsi

end

end



box "Configuration" #CCFF99

    box "Mandatory" #CCFF99



group #FFB133 DSI Configuration

group #lightblue Mandatory

    user -> dsi: HAL_DSI_SetConfig()

    user -> dsi: HAL_DSI_SetConfigHostTimeouts()

    user -> dsi: HAL_DSI_SetConfigPhyTimer()

    user -> dsi: HAL_DSI_SetConfigVideoMode()

    end box

end



    box "Optional" #CCFF99

    ' Add optional configurations here if needed

    end box

end box

alt#grey  #lightgrey

dsi->rcc : Switch to DSI PHY PLL clock (default)

rcc-->dsi

end

end



group #LightYellow LTDC Configuration

user -> ltdc: HAL_LTDC_Init()

user -> ltdc: HAL_LTDC_SetConfig()

user -> ltdc: HAL_LTDC_SetLayer()

user -> ltdc: HAL_LTDC_Start()

user -> ltdc: HAL_LTDC_ForceReload()

end



group #FFB133 DSI Process

box "Process" #CCFFFF

user <- dsi: HAL_DSI_Start()

group #lightgrey Set Panel Configuration 

user <- dsi: HAL_DSI_ShortWrite()

user <- dsi: HAL_DSI_LongWrite()

end



group #LightYellow Optional

user <- dsi: HAL_DSI_EnterULPM()

user <- dsi: HAL_DSI_ExitULPM()

end

end



group #OrangeRed De-initialization

user->dsi : HAL_DSI_DeInit()

end



@enduml

Called functions:

dsi_uc_pattern_gen

@startuml

participant "User Application" as user

participant "System"           as sys

participant "RCC Driver"       as rcc

participant "DSI Driver"       as dsi

participant "LTDC Driver"      as ltdc

participant "NVIC"             as NVIC

participant "HW"               as HW



group #GreenYellow System initialization

user->sys : HAL_Init()

sys->user : Configure system clock

end



group #FFB133 DSI Initialization

user->dsi : HAL_DSI_Init()

alt#grey #lightgrey If USE_HAL_DSI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dsi->rcc : Enable the DSI clock

rcc-->dsi

end

end



box "Configuration" #CCFF99

    box "Mandatory" #CCFF99



group #FFB133 DSI Configuration

group #lightblue Mandatory

    user -> dsi: HAL_DSI_SetConfig()

    user -> dsi: HAL_DSI_SetConfigHostTimeouts()

    user -> dsi: HAL_DSI_SetConfigPhyTimer()

    user -> dsi: HAL_DSI_SetConfigVideoMode()

    end box

end



    box "Optional" #CCFF99

    ' Add optional configurations here if needed

    end box

end box

alt#grey  #lightgrey

dsi->rcc : Switch to DSI PHY PLL clock (default)

rcc-->dsi

end

end



group #LightYellow LTDC Configuration

user -> ltdc: HAL_LTDC_Init()

user -> ltdc: HAL_LTDC_SetConfig()

user -> ltdc: HAL_LTDC_SetLayer()

user -> ltdc: HAL_LTDC_Start()

user -> ltdc: HAL_LTDC_ForceReload()

end



group #FFB133 DSI Process

box "Process" #CCFFFF

user <- dsi: HAL_DSI_Start()

group #lightgrey Set Panel Configuration 

user <- dsi: HAL_DSI_ShortWrite()

user <- dsi: HAL_DSI_LongWrite()

end



group #LightYellow Optional

user <- dsi:HAL_DSI_SetConfigPatternGenerator()

user <- dsi: HAL_DSI_EnablePatternGenerator()

user <- dsi: HAL_DSI_DisablePatternGenerator()



end

end



group #OrangeRed De-initialization

user->dsi : HAL_DSI_DeInit()

end



@enduml

Called functions:

dsi_uc_partial_refresh

@startuml

participant "User Application" as user

participant "System"           as sys

participant "RCC Driver"       as rcc

participant "SDRAM"            as sdram

participant "LCD"              as lcd

participant "DSI Driver"       as dsi

participant "LTDC Driver"      as ltdc

participant "NVIC"             as NVIC

participant "HW"               as HW



group #GreenYellow System Initialization

user->sys : HAL_Init()

user->sdram : External Memory Initialiastion

end



group #FFB133 DSI Initialization

user->dsi : HAL_DSI_Init()

alt#grey #lightgrey If USE_HAL_DSI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

dsi->rcc : Enable the DSI clock

rcc-->dsi

end

end



group #FFB133 DSI Configuration

group #lightblue Mandatory

    user -> dsi: HAL_DSI_SetConfig()

    user -> dsi: HAL_DSI_SetConfigHostTimeouts()

    user -> dsi: HAL_DSI_SetConfigPhyTimer()

    user -> dsi: HAL_DSI_SetConfigAdaptedCommandMode()

    user -> dsi: HAL_DSI_SetConfigLPCommand()

    user -> dsi:HAL_DSI_SetFlowControl()

end

end



group #LightYellow LTDC Configuration

user -> ltdc: HAL_LTDC_Init()

user -> ltdc: HAL_LTDC_SetConfig()

user -> ltdc: HAL_LTDC_SetLayer()

user -> ltdc: HAL_LTDC_Start()

user -> ltdc: HAL_LTDC_ForceReload()

end



group #FFB133 DSI Process

box "Process" #CCFFFF

user -> dsi: HAL_DSI_Start()

group #lightgrey Set Panel Configuration 

user -> dsi: HAL_DSI_LongWrite()

note right : Refresh Area to the first part of the display

user -> dsi: HAL_DSI_ShortWrite()

end



group #LightYellow Optional

user -> dsi: HAL_DSI_Refresh()

== Optional Configuration ==

HW->NVIC : Interrupt

NVIC->dsi : HAL_DSI_IRQHandler()

dsi->user : End Of Refresh User callback()



group #lightgrey nd of Refresh User callback()

user -> dsi: HAL_DSI_DisableWrapper()

user -> ltdc: HAL_LTDC_SetLayerAddress()

user -> ltdc: HAL_LTDC_ForceReload()

user -> dsi: HAL_DSI_EnableWrapper()

note right : Refresh Area to the first part of the display

user -> dsi: HAL_DSI_LongWrite()

user -> dsi: HAL_DSI_Refresh()

end

end

end





@enduml

Called functions: