HAL ICACHE use cases

HAL ICACHE Maintenance Operations in Polling Mode

@startuml



skinparam sequenceMessageAlign center



participant "User\nApplication" as UA

participant "ICACHE\nDriver" as ID



UA->ID : **HAL_ICACHE_Init**

rnote over ID

Invalidate Operation by Hardware

endrnote

UA <-- ID : return HAL_OK or HAL_INVALID_PARAM

|||

group Loop [Can be repeated]



group Optional

UA->ID : **HAL_ICACHE_SetAssociativityMode**

ID --> UA : return HAL_OK

UA->ID : **HAL_ICACHE_ECC_Enable**

ID --> UA : return HAL_OK

UA->ID : **HAL_ICACHE_EnableMonitors**

ID --> UA : return HAL_OK

|||

end



UA->ID : **HAL_ICACHE_Start**

note right : Choose to enable Write intrusion error interrupt

ID --> UA : return HAL_OK



group Loop [Can be repeated]



UA->ID : **HAL_ICACHE_Invalidate**

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

|||

end



group Optional

UA->ID : **HAL_ICACHE_GetMonitorHitValue**, **HAL_ICACHE_GetMonitorMissValue**

ID --> UA : Monitor's value



UA->ID : **HAL_ICACHE_ResetMonitors**

ID --> UA : return HAL_OK



UA->ID : **HAL_ICACHE_ECC_Disable**

ID --> UA : return HAL_OK

end

|||

UA->ID : **HAL_ICACHE_Stop**

ID --> UA : return HAL_OK

|||

end

|||

UA->ID : **HAL_ICACHE_DeInit**

ID --> UA



@enduml

Functions called:

HAL ICACHE Maintenance Operations in Interrupt Mode

@startuml

participant "User\nApplication" as UA

participant "ICACHE\nDriver" as ID

participant "ICACHE_IRQHandler" as IRQ



skinparam sequenceMessageAlign center



== ICACHE Initialization ==

|||

opt

    UA -> ID: **HAL_ICACHE_RegisterInvalidateCompleteCallback**(myICACHE_InvalidateCompleteCallback)

    ID --> UA : return HAL_OK

end

|||

UA->ID : **HAL_ICACHE_Start**(HAL_ICACHE_IT_NONE)

ID --> UA : return HAL_OK

|||

UA -> ID : **HAL_ICACHE_Invalidate_IT**

rnote over ID

Flag Command Interrupt (CMDENDIE) enabled

endrnote

ID --> UA : return HAL_OK or HAL_ERROR

|||

== Interruption Service Routine ==

|||

IRQ <- : ICACHE Maintenance interrupt

IRQ -> ID : **HAL_ICACHE_IRQHandler**

note left : Interruption execution\nDisable BSYEND interrupt

alt USE_HAL_ICACHE_REGISTER_CALLBACKS

    ID -> UA : **myICACHE_InvalidateCompleteCallback**

    ID <-- UA

else USE OVERRIDEN WEAK CALLBACKS

    ID -> UA : **HAL_ICACHE_InvalidateCompleteCallback**

    ID <-- UA

end

|||

@enduml

Functions called:

HAL ICACHE Error Use Case

@startuml

participant "User\nApplication" as UA

participant "ICACHE\nDriver" as ID

participant "ICACHE_IRQHandler" as IRQ



skinparam sequenceMessageAlign center



== Init ICACHE ==

|||

opt USE_HAL_ICACHE_REGISTER_CALLBACKS

    UA -> ID: **HAL_ICACHE_RegisterErrorCallback**(ICACHE_Error_UserCallback)

    ID --> UA : return HAL_OK

end

|||

UA -> ID : **HAL_ICACHE_Start**

note right : Enable Interruption (Eviction Clean)

ID --> UA : return HAL_OK

|||

== Interruption Service Routine ==

|||

IRQ <- : Error\ninterrupt

IRQ -> ID : **HAL_ICACHE_IRQHandler**

note left : Interruption execution

alt USE_HAL_ICACHE_REGISTER_CALLBACKS

    ID -> UA : **ICACHE_Error_UserCallback**

    ID <-- UA

else USE OVERRIDEN WEAK CALLBACKS

    ID -> UA : **HAL_ICACHE_ErrorCallback**

    ID <-- UA

end

|||

@enduml

Functions called:

HAL ICACHE Maintenance Operations in Polling Mode with Error Interrupt Enabled Use Case

@startuml

participant "User\nApplication" as UA order 1

participant "ICACHE\nDriver" as ID order 2

participant "ICACHE_IRQHandler" as IRQ order 3



skinparam sequenceMessageAlign center



== ICACHE Initialization ==

group Option [USE_HAL_ICACHE_REGISTER_CALLBACKS]

UA ->  ID : **HAL_ICACHE_RegisterErrorCallback**(myICACHE_ErrorCallback)

ID --> UA : return HAL_OK

end

UA -> ID : **HAL_ICACHE_Start**(HAL_ICACHE_IT_ERROR)

rnote over ID

Enable ERROR Interrupt

endrnote

ID --> UA : return HAL_OK

|||

UA [#blue]->ID: **HAL_ICACHE_Invalidate**

activate ID #blue

note over ID : Check Busy flag : Flag = 0

IRQ <[#orange]- : ICACHE Error interrupt

IRQ -[#orange]> ID : **HAL_ICACHE_IRQHandler**

activate ID #orange

note over ID : Flag Error Interrupt = 1

alt USE_HAL_ICACHE_REGISTER_CALLBACKS

ID-[#orange]>UA:**myICACHE_ErrorCallback**

UA -[#orange]->ID

else USE OVERRIDEN WEAK CALLBACKS

ID-[#orange]>UA:**HAL_ICACHE_ErrorCallback**

UA -[#orange]->ID

end

deactivate  ID

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

deactivate  ID

|||

rnote over UA

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

             and stop the ICACHE or make an other action.

endrnote

@enduml

Functions called:

HAL ICACHE Remap Region Successful Use Case

@startuml

participant "User\nApplication" as UA

participant "ICACHE\nDriver" as ID



UA->ID: =HAL_ICACHE_Init

ID-->UA: return HAL_OK

UA->ID :\n=HAL_ICACHE_SetConfigRemapRegion

ID-->UA: return HAL_OK

note left : return\nstatus

UA->ID :\n=HAL_ICACHE_EnableRemapRegion

ID-->UA: return HAL_OK

note left : return\nstatus

UA->ID: \n=HAL_ICACHE_SetAssociativityMode

ID-->UA: return HAL_OK

note left : return\nstatus

UA->ID: \n=HAL_ICACHE_Start

ID-->UA: return HAL_OK

note left : return\nstatus

@enduml

Functions called: