HAL DCMI Use Cases

DCMI Snapshot Mode and Buffer size < 0xFFFF

@startuml

hide footbox

participant "User Application" as part1

participant "System"           as part2

participant "GPIO Driver"      as part3

participant "RCC Driver"       as part4

participant "DCMI Driver"      as part5

participant "DMA Driver"       as part6

participant "NVIC"             as part7

participant "HW"               as part8





group #orange Initialization

  part1->part2 : HAL_Init()

  part1->part2 : Configure system clock

  part1->part5 : HAL_DCMI_Init()

  group #LightYellow Alt

    part5->part4 : HAL_RCC_DCMI_PSSI_EnableClock()

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

  end

end



group #coral Hardware resource initialization

  group #LightYellow Alt

    part1->part4 : Enable DCMI Clock

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

  end

  part1->part3 : DCMI HW Initialisation 

  part1->part6 : HAL_DMA_Init()

  part1->part6 : HAL_DMA_SetConfigPeriphDirectXfer()

  part1->part5 : HAL_DCMI_SetDMA() 

  note right: <b> link the DMA handle to the DCMI handle

  part1->part7 : DCMI and DMA NVIC Configuration

end



group #greenyellow Configuration

  group #LightYellow Mandatory

    part1->part5 : HAL_DCMI_PARALLEL_SetConfig()

    part1->part5 : HAL_DCMI_SetConfigPipe()

  end

  group #LightYellow Optional

    part1->part5 : HAL_DCMI_SetPipeBytesDecimation()

    part1->part5 : HAL_DCMI_SetPipeLinesDecimation()

    part1->part5 : HAL_DCMI_SetConfigPipeCrop()

    part1->part5 : HAL_DCMI_EnablePipeCrop()

  end

end



group #lightblue Process

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part8->part7 : Interrupt

  part7->part5 : HAL_DCMI_IRQHandler()

  part5->part1 : Frame capture callback

end



group #salmon De-initialization

  part1->part5 : HAL_DCMI_DeInit()

end



@enduml

Called functions:

DCMI Snapshot Mode and Buffer size > 0xFFFF

@startuml

hide footbox

participant "User Application" as part1

participant "System"           as part2

participant "GPIO Driver"      as part3

participant "RCC Driver"       as part4

participant "DCMI Driver"      as part5

participant "DMA Driver"       as part6

participant "NVIC"             as part7

participant "HW"               as part8



group #orange initialization

  part1->part2 : HAL_Init()

  part1->part2 : Configure system clock

  part1->part5 : HAL_DCMI_Init()

  group #LightYellow Alt

    part5->part4 : HAL_RCC_DCMI_PSSI_EnableClock()

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

  end

end



group #coral Hardware resource initialization

  group #LightYellow Alt

    part1->part4 : Enable DCMI Clock

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

  end

  part1->part3 : DCMI HW Initialisation 

  part1->part6 : HAL_DMA_Init()

  part1->part6 : HAL_DMA_SetConfigPeriphLinkedListCircularXfer()

  part1->part5 : HAL_DCMI_SetDMA() 

  note right: <b> link the DMA handle to the DCMI handle

  part1->part7 : DCMI and DMA NVIC Configuration

end



group #greenyellow Configuration

  group #LightYellow Mandatory

    part1->part5 : HAL_DCMI_PARALLEL_SetConfig()

    part1->part5 : HAL_DCMI_SetConfigPipe()

  end

  group #LightYellow Optional

    part1->part5 : HAL_DCMI_SetPipeBytesDecimation()

    part1->part5 : HAL_DCMI_SetPipeLinesDecimation()

    part1->part5 : HAL_DCMI_SetConfigPipeCrop()

    part1->part5 : HAL_DCMI_EnablePipeCrop()

 end

end



group #lightblue Process

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part5->part6 : HAL_DMA_StartPeriphXfer_IT_Opt()

    group #lightblue Repeat until complete of frame size

      part8->part7 : DMA Interrupt

      part7->part6 : HAL_DMA_IRQHandler()

      part6->part5 : DMA transfer complete callback()

    end

  part8->part7 : DCMI Interrupt

  part7->part5 : HAL_DCMI_IRQHandler()

  part5->part1 : Frame capture callback

end



group #salmon De-initialization

 part1->part5 : HAL_DCMI_DeInit()

end

@enduml

Called functions:

DCMI Continuous Mode Process

@startuml

hide footbox

participant "User Application" as part1

participant "System"           as part2

participant "GPIO Driver"      as part3

participant "RCC Driver"       as part4

participant "DCMI Driver"      as part5

participant "DMA Driver"       as part6

participant "NVIC"             as part7

participant "HW"               as part8



group #orange initialization

  part1->part2 : HAL_Init()

  part1->part2 : Configure system clock

  part1->part5 : HAL_DCMI_Init()

  group #LightYellow Alt

    part5->part4 : HAL_RCC_DCMI_PSSI_EnableClock()

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

  end

end



group #coral Hardware resource initialization

  group #LightYellow Alt

    part1->part4 : Enable DCMI Clock

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

  end

  part1->part3 : DCMI HW Initialisation 

  part1->part6 : HAL_DMA_Init()

  part1->part6 : HAL_DMA_SetConfigPeriphLinkedListCircularXfer()

  part1->part5 : HAL_DCMI_SetDMA() 

  note right: <b> link the DMA handle to the DCMI handle

  part1->part7 : DCMI and DMA NVIC Configuration

end



group #greenyellow Configuration

  group #LightYellow Mandatory

    part1->part5 : HAL_DCMI_PARALLEL_SetConfig()

    part1->part5 : HAL_DCMI_SetConfigPipe()

  end

  group #LightYellow Optional

    part1->part5 : HAL_DCMI_SetPipeBytesDecimation()

    part1->part5 : HAL_DCMI_SetPipeLinesDecimation()

    part1->part5 : HAL_DCMI_SetConfigPipeCrop()

    part1->part5 : HAL_DCMI_EnablePipeCrop()

 end

end



group #lightblue Process

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part5->part6 : HAL_DMA_StartPeriphXfer_IT_Opt()

  group #lightblue Repeated until Stop DCMI

    group #lightblue Repeat until complete of frame size

      part8->part7 : DMA Interrupt

      part7->part6 : HAL_DMA_IRQHandler()

      part6->part5 : DMA transfer complete callback()

    end

    part8->part7 : DCMI Interrupt

    part7->part5 : HAL_DCMI_IRQHandler()

    part5->part1 : Frame capture callback

  end

  part1->part5 : HAL_DCMI_StopPipe_DMA()

  part5->part6 : HAL_DMA_Abort_IT()

  part8->part7 : DMA Interrupt

  part7->part6 : HAL_DMA_IRQHandler()

  part6->part5 : DMA abort callback

  part5->part1 : DCMI stop callback

end



group #salmon De-initialization

  part1->part5 : HAL_DCMI_DeInit()

end



@enduml

Called functions:

DCMI Continuous Mode with Suspend and Resume

@startuml

hide footbox

participant "User Application" as part1

participant "System"           as part2

participant "GPIO Driver"      as part3

participant "RCC Driver"       as part4

participant "DCMI Driver"      as part5

participant "DMA Driver"       as part6

participant "NVIC"             as part7

participant "HW"               as part8



group #orange initialization

  part1->part2 : HAL_Init()

  part1->part2 : Configure system clock

  part1->part5 : HAL_DCMI_Init()

  group #LightYellow Alt

    part5->part4 : HAL_RCC_DCMI_PSSI_EnableClock()

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

  end

end



group #coral Hardware resource initialization

  group #LightYellow Alt

    part1->part4 : Enable DCMI Clock

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

  end

  part1->part3 : DCMI HW Initialisation 

  part1->part6 : HAL_DMA_Init()

  part1->part6 : HAL_DMA_SetConfigPeriphLinkedListCircularXfer()

  part1->part5 : HAL_DCMI_SetDMA() 

  note right: <b> link the DMA handle to the DCMI handle

  part1->part7 : DCMI and DMA NVIC Configuration

end



group #greenyellow Configuration

  group #LightYellow Mandatory

    part1->part5 : HAL_DCMI_PARALLEL_SetConfig()

    part1->part5 : HAL_DCMI_SetConfigPipe()

  end

  group #LightYellow Optional

    part1->part5 : HAL_DCMI_SetPipeBytesDecimation()

    part1->part5 : HAL_DCMI_SetPipeLinesDecimation()

    part1->part5 : HAL_DCMI_SetConfigPipeCrop()

    part1->part5 : HAL_DCMI_EnablePipeCrop()

 end

end



group #lightblue Process

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part5->part6 : HAL_DMA_StartPeriphXfer_IT_Opt()

  group #lightblue Repeated until suspend DCMI

    group #lightblue Repeat until complete of frame size

      part8->part7 : DMA Interrupt

      part7->part6 : HAL_DMA_IRQHandler()

      part6->part5 : DMA transfer complete callback()

    end

    part8->part7 : DCMI Interrupt

    part7->part5 : HAL_DCMI_IRQHandler()

    part5->part1 : Frame capture callback

  end

  part1->part5 : HAL_DCMI_SuspendPipe()

  part1->part5 : HAL_DCMI_ResumePipe()

  group #lightblue Repeated until Stop DCMI

    group #lightblue Repeat until complete of frame size

      part8->part7 : DMA Interrupt

      part7->part6 : HAL_DMA_IRQHandler()

      part6->part5 : DMA transfer complete callback()

    end

    part8->part7 : DCMI Interrupt

    part7->part5 : HAL_DCMI_IRQHandler()

    part5->part1 : Frame capture callback

  end

end



group #salmon De-initialization

  part1->part5 : HAL_DCMI_DeInit()

end



@enduml

Called functions:

DCMI Continuous Mode with Embedded Synchro Mode

@startuml

hide footbox

participant "User Application" as part1

participant "System"           as part2

participant "GPIO Driver"      as part3

participant "RCC Driver"       as part4

participant "DCMI Driver"      as part5

participant "DMA Driver"       as part6

participant "NVIC"             as part7

participant "HW"               as part8



group #orange initialization

  part1->part2 : HAL_Init()

  part1->part2 : Configure system clock

  part1->part5 : HAL_DCMI_Init()

  group #LightYellow Alt

    part5->part4 : HAL_RCC_DCMI_PSSI_EnableClock()

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL > HAL_CLK_ENABLE_NO

  end

end



group #coral Hardware resource initialization

  group #LightYellow Alt

    part1->part4 : Enable DCMI Clock

    note right: If <b>USE_DCMI_CLK_ENABLE_MODEL == HAL_CLK_ENABLE_NO

  end

  part1->part3 : DCMI HW Initialisation 

  part1->part6 : HAL_DMA_Init()

  part1->part6 : HAL_DMA_SetConfigPeriphLinkedListCircularXfer()

  part1->part5 : HAL_DCMI_SetDMA() 

  note right: <b> link the DMA handle to the DCMI handle

  part1->part7 : DCMI and DMA NVIC Configuration

end



group #greenyellow DCMI Configuration

  group #LightYellow Mandatory

    part1->part5 : HAL_DCMI_PARALLEL_SetConfig()

    group #lightgoldenrodyellow Optional

      part1->part5 : HAL_DCMI_PARALLEL_SetSyncMode()

      part1->part5 : HAL_DCMI_PARALLEL_SetEmbSyncCode()

      part1->part5 : HAL_DCMI_PARALLEL_SetEmbSyncMask()

    end

    part1->part5 : HAL_DCMI_SetConfigPipe()

  end

  group #LightYellow Optional

    part1->part5 : HAL_DCMI_SetPipeBytesDecimation()

    part1->part5 : HAL_DCMI_SetPipeLinesDecimation()

    part1->part5 : HAL_DCMI_SetConfigPipeCrop()

    part1->part5 : HAL_DCMI_EnablePipeCrop()

 end

end



group #lightblue Process

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part5->part6 : HAL_DMA_StartPeriphXfer_IT_Opt()

  group #lightblue Error synchro

    part8->part7 : DCMI Interrupt

    part7->part5 : HAL_DCMI_IRQHandler()

    part5->part6 : HAL_DMA_Abort_IT()

    part8->part7 : DMA Interrupt

    part7->part6 : HAL_DMA_IRQHandler()

    part6->part5 : DMA abort callback

    part5->part1 : DCMI Error sync callback

  end

  part1->part5 : HAL_DCMI_StartPipe_DMA()

  part5->part6 : HAL_DMA_StartPeriphXfer_IT_Opt()

  group #lightblue Repeated until Stop DCMI

    group #lightblue Repeat until complete of frame size

      part8->part7 : DMA Interrupt

      part7->part6 : HAL_DMA_IRQHandler()

      part6->part5 : DMA transfer complete callback()

    end

    part8->part7 : DCMI Interrupt

    part7->part5 : HAL_DCMI_IRQHandler()

    part5->part1 : Frame capture callback

  end

end



group #salmon De-initialization

  part1->part5 : HAL_DCMI_DeInit()

end



@enduml

Called functions: