HAL DCACHE Use Cases

HAL DCACHE Maintenance Operations in Polling mode

@startuml



skinparam sequenceMessageAlign center



participant "User\nApplication" as UA

participant "DCACHE\nDriver" as DD



UA->DD : **HAL_DCACHE_Init**

DD-->"Driver RCC" : Compilation switch: clock activation

rnote over DD

Invalidate Operation by Hardware

endrnote

UA <-- DD : return HAL_OK or HAL_INVALID_PARAM

|||

group Loop [Can be repeated]



group Optional

UA->DD : **HAL_DCACHE_SetReadBurstType**

DD --> UA : return HAL_OK

UA->DD : **HAL_DCACHE_ECC_Enable**

DD --> UA : return HAL_OK

UA->DD : **HAL_DCACHE_EnableMonitors**

DD --> UA : return HAL_OK

|||

end



UA->DD : **HAL_DCACHE_Start**

note right : Choose to enable Eviction Clean error interrupt

DD --> UA : return HAL_OK



group Loop [Can be repeated]



UA->DD : **HAL_DCACHE_Invalidate**,\n**HAL_DCACHE_CleanByAddr**,\n**HAL_DCACHE_InvalidateByAddr**,\n**HAL_DCACHE_CleanInvalidByAddr**

DD --> UA : return HAL_OK, HAL_BUSY, HAL_ERROR

|||

end



group Optional

UA->DD : **HAL_DCACHE_GetMonitorReadHitValue**, **HAL_DCACHE_GetMonitorReadMissValue**,\n**HAL_DCACHE_GetMonitorWriteHitValue**, **HAL_DCACHE_GetMonitorWriteMissValue**

DD --> UA : Monitor's value



UA->DD : **HAL_DCACHE_ResetMonitors**

DD --> UA : return HAL_OK



UA->DD : **HAL_DCACHE_ECC_Disable**

DD --> UA : return HAL_OK

end

|||

UA->DD : **HAL_DCACHE_Stop**

DD --> UA : return HAL_OK

|||

end

|||

UA->DD : **HAL_DCACHE_DeInit**

DD --> UA



@enduml

Called functions:

HAL DCACHE Maintenance Operations in Interrupt mode

@startuml

participant "User\nApplication" as UA

participant "DCACHE\nDriver" as DD

participant "DCACHE_IRQHandler" as IRQ



skinparam sequenceMessageAlign center



== DCACHE Initialization ==

|||

opt

    UA ->  DD : **HAL_DCACHE_RegisterInvalidateCompleteCallback**(myDCACHE_InvalidateCompleteCallback)\n**HAL_DCACHE_RegisterCleanByAddrCallback**(myDCACHE_CleanByAddrCallback)\n**HAL_DCACHE_RegisterInvalidateByAddrCallback**(myDCACHE_InvalidateByAddrCallback)\n**HAL_DCACHE_RegisterCleanInvalidByAddrCallback**(myDCACHE_CleanInvalidByAddrCallback)

    DD --> UA : return HAL_OK

end

|||

UA->DD : **HAL_DCACHE_Start**(HAL_DCACHE_IT_NONE)

DD --> UA : return HAL_OK

|||

UA -> DD : **HAL_DCACHE_CleanByAddr_IT**\n**HAL_DCACHE_InvalidateByAddr_IT**\n**HAL_DCACHE_CleanInvalidByAddr_IT**\n**HAL_DCACHE_Invalidate_IT**

rnote over DD

Flag Command Interrupt (CMDENDIE) enabled or

    Flag Invalidate Interrupt (BSYENDIE) enabled

endrnote

DD --> UA : return HAL_OK or HAL_ERROR

|||

== Interruption Service Routine ==

|||

IRQ <- : DCACHE Maintenance interrupt

IRQ -> DD : **HAL_DCACHE_IRQHandler**

note left : Interruption execution\nDisable BSYEND or CMDEND interrupt

alt USE_HAL_DCACHE_REGISTER_CALLBACKS

    DD -> UA : **myDCACHE_InvalidateCompleteCallback**\n**myDCACHE_CleanByAddrCallback**\n**myDCACHE_InvalidateByAddrCallback**\n**myDCACHE_CleanInvalidByAddrCallback**

    DD <-- UA

else USE OVERRIDEN WEAK CALLBACKS

    DD -> UA : **HAL_DCACHE_InvalidateCompleteCallback**\n**HAL_DCACHE_CleanByAddrCallback**\n**HAL_DCACHE_InvalidateByAddrCallback**\n**HAL_DCACHE_CleanInvalidByAddrCallback**

    DD <-- UA

end

|||

@enduml

Called functions:

HAL DCACHE ERROR use case

@startuml

participant "User\nApplication" as UA

participant "DCACHE\nDriver" as DD

participant "DCACHE_IRQHandler" as IRQ



skinparam sequenceMessageAlign center



== Init DCACHE ==

|||

opt USE_HAL_DCACHE_REGISTER_CALLBACKS

    UA -> DD: **HAL_DCACHE_RegisterErrorCallback**(DCACHE_Error_UserCallback)

    DD --> UA : return HAL_OK

end

|||

UA -> DD : **HAL_DCACHE_Start**

note right : Enable Interruption (Eviction Clean)

DD --> UA : return HAL_OK

|||

== Interruption Service Routine ==

|||

IRQ <- : Error\ninterrupt

IRQ -> DD : **HAL_DCACHE_IRQHandler**

note left : Interruption execution

alt USE_HAL_DCACHE_REGISTER_CALLBACKS

    DD -> UA : **DCACHE_Error_UserCallback**

    DD <-- UA

else USE OVERRIDEN WEAK CALLBACKS

    DD -> UA : **HAL_DCACHE_ErrorCallback**

    DD <-- UA

end

|||

@enduml

Called functions:

HAL DCACHE Maintenance Operations in Polling mode with Error Interrupt enabled use case

@startuml

participant "User\nApplication" as UA order 1

participant "DCACHE\nDriver" as DD order 2

participant "DCACHE_IRQHandler" as IRQ order 3



skinparam sequenceMessageAlign center



== DCACHE Initialization ==



group Option [USE_HAL_DCACHE_REGISTER_CALLBACKS]

UA ->  DD : **HAL_DCACHE_RegisterErrorCallback**(myDCACHE_ErrorCallback)

DD --> UA : return HAL_OK

end

UA -> DD : **HAL_DCACHE_Start**(HAL_DCACHE_IT_ERROR)

rnote over DD

Enable ERROR Interrupt

endrnote

DD --> UA : return HAL_OK

|||

UA-[#blue]>DD : **HAL_DCACHE_CleanByAddr**

activate DD #blue

note over DD : Check Busy flag : Flag = 0

IRQ <[#orange]- : DCACHE Error interrupt

IRQ -[#orange]> DD : **HAL_DCACHE_IRQHandler**

activate DD #orange

note over DD : Flag Error Interrupt = 1

alt USE_HAL_DCACHE_REGISTER_CALLBACKS

DD -[#orange]> UA : **myDCACHE_ErrorCallback**

UA -[#orange]-> DD

else USE OVERRIDEN WEAK CALLBACKS

DD -[#orange]> UA : **HAL_DCACHE_ErrorCallback**

UA -[#orange]-> DD

end

deactivate DD

DD -[#blue]-> UA : return HAL_OK

deactivate DD

|||

rnote over UA

The user can call HAL_DCACHE_Stop() to disable the Error Interrupt

             and stop the DCACHE or make an other action.

endrnote

@enduml

Called functions: