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_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
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: