Added info on esr registers and reset behavior
All checks were successful
Central(Architecture) Docs Build / Build Documentation (push) Successful in 15s

This commit is contained in:
Elyan 2024-10-31 10:12:53 +01:00
parent ab401b9d1b
commit 5f44805554
5 changed files with 89 additions and 4 deletions

View File

@ -12,3 +12,4 @@ include::execution-engine-spec/program-and-exception-status-registers.adoc[]
include::execution-engine-spec/channel-io-overview.adoc[]
include::execution-engine-spec/instructions.adoc[]
include::execution-engine-spec/subsystems.adoc[]
include::execution-engine-spec/system-behavior.adoc[]

View File

@ -491,7 +491,7 @@ ssr ss15, pc, sr32, 0 <2>
Privileged instruction:: No. (The access control is done at the register/command level).
Updates program state flags:: No.
Exceptions:: UnknownInstr.
Exceptions:: PrivFault.
<<<
===== SSW: Subsystem Register Write
@ -539,5 +539,5 @@ ssw ss15, pc, sr32, 0 <2>
Privileged instruction:: No. (The access control is done at the register/command level).
Updates program state flags:: No.
Exceptions:: UnknownInstr.
Exceptions:: PrivFault.

View File

@ -88,6 +88,9 @@ Debug::
SvcDebug::
This exception is the same as the *Debug* exception, except it is generated when debug events are encountered while in supervisor-mode.
PrivFault::
This exception is generated when unprivileged software tries to execute a privileged instruction or tries to acces a privileged susbsystem register.
UnknownInstr::
This exception is generated when an unknown instruction failed to be executed.
It is important not to ignore this exception as it can be the symptom of a memory corruption bug.

View File

@ -17,7 +17,7 @@
], config: {label: {right: 'psr'}}}
....
Only the ALU flags (C, Z, N, V) can be written to. Writing a 32-bits value into *psr* thus ignores the 28 upper bits.
Only the ALU flags (C, Z, N, V) can be written to. Writing a 32-bits value into *psr* thus ignores the 28 upper bits in any system mode.
=== Exception Status Registers
@ -37,3 +37,49 @@ Only the ALU flags (C, Z, N, V) can be written to. Writing a 32-bits value into
], config: {label: {right: 'esr_fault'}}}
....
.Exceptions
[%header,cols="1,1,3"]
|===
|Value |Name |Argument
|0
|_Reset_
|_N/A_
|1
|SVC
|The SVC number.
|2
|MemFault
|The virtual address being accessed.
|3
|SysTick
|_N/A_
|4
|Debug
|#TODO: Describe it.#
|5
|SvcDebug
|#TODO: Describe it.#
|6
|PrivFault
|#TODO Describe it.#
|7
|UnknownInstr
|The virtual address of the instruction.
|8
|HdwrMgmt
|#TODO Describe it.#
|9
|Channel
|The channel number and exception reason. #TODO: Describe it.#
|===

View File

@ -0,0 +1,35 @@
== System Behavior
=== On Reset
On reset, the _Execution Engine_ assumes that the bootloader software was loaded in memory at address 0x0000_0000. +
The _Execution Engine_ starts execution in Supervisor mode.
.Registers content on reset
[cols="1,2,3"]
|===
|Register |Value |Description
|r0
|_Execution Engine_ ID
|Contains the execution engine ID. Reserved for when multiple _Execution Engines_ in a _Processing Unit_ will be specified. Always 0 until then.
|r1..r7, lr, sp_user, sp_svc, sp_fault
|_Unspecified_
|N/A
|pc_user, pc_fault
|0x0000_0004
|#TODO: Describe it#
|pc_svc
|0x0000_0000
|#TODO: Describe it#
|psr
|_See description_
|U=0, S=1, F=0. C, Z, N and V are undefined.
|esr_svc, esr_fault
|0x0000_0000
|exc=_Reset_
|===