用途与范围
本单元拥有待处理中断更新、最高优先待处理中断选择、使能检查、读取时的定时器刷新以及中断结束状态变化。
PTO-ARCH-SYSTEM-REGISTERS-INTERRUPT下面直接显示完整的 ASL 所有者。
// PTO-UNIT: {"id":"PTO-ARCH-SYSTEM-REGISTERS-INTERRUPT","surface":"arch","classification":["system-registers","interrupt"],"depends_on":["PTO-ARCH-SYSTEM-REGISTERS-TIMER"]}func RefreshTopPendingInterrupt(ring: AccessControlRing)begin let pending = _ExtendedSystemRegisters[[ ContextRegisterIndex(ring, 0x0f08)]]; var found = FALSE; var top: InterruptID = 0; for interrupt_id = 0 to 63 do if !found && pending[interrupt_id] == '1' then top = interrupt_id as InterruptID; found = TRUE; end; end; _ExtendedSystemRegisters[[ContextRegisterIndex(ring, 0x0f09)]] = NaturalToWord(top as integer {0..262144});end;
func SetInterruptPending(ring: AccessControlRing, interrupt_id: InterruptID)begin let index = ContextRegisterIndex(ring, 0x0f08); _ExtendedSystemRegisters[[index]][interrupt_id] = '1'; RefreshTopPendingInterrupt(ring);end;
func ClearInterruptPending(ring: AccessControlRing, interrupt_id: InterruptID)begin let index = ContextRegisterIndex(ring, 0x0f08); _ExtendedSystemRegisters[[index]][interrupt_id] = '0'; RefreshTopPendingInterrupt(ring);end;
readonly func InterruptEnabled(ring: AccessControlRing, interrupt_id: InterruptID) => booleanbegin let interrupt_config = _ExtendedSystemRegisters[[ ContextRegisterIndex(ring, 0x0f07)]]; if interrupt_id == TimerInterruptId(ring) then return interrupt_config[1] == '1'; else return interrupt_config[0] == '1'; end;end;
func ReadInterruptPending(ring: AccessControlRing) => Wordbegin RefreshTimerPending(ring); return _ExtendedSystemRegisters[[ContextRegisterIndex(ring, 0x0f08)]];end;
func ReadTopPendingInterrupt(ring: AccessControlRing) => Wordbegin RefreshTimerPending(ring); return _ExtendedSystemRegisters[[ContextRegisterIndex(ring, 0x0f09)]];end;
func EndOfInterrupt(ring: AccessControlRing, value: Word)begin if value[63:6] == Zeros{58} then ClearInterruptPending(ring, UInt(value[5:0]) as InterruptID); end; _ACRTrapAsynchronous[[ring]] = FALSE; _ACRTrapArgumentValid[[ring]] = FALSE;end;
本单元拥有待处理中断更新、最高优先待处理中断选择、使能检查、读取时的定时器刷新以及中断结束状态变化。
对每个 ACR,低位索引 0x0f07 保存中断配置,0x0f08 保存待处理中断位图,0x0f09 保存选中的最高优先待处理中断 ID。
RefreshTopPendingInterrupt 从中断 ID 0 扫描到 63,并记录第一个被置位的 ID。如果没有位被置位,保存的最高优先值保持为 0。
SetInterruptPending 设置一个待处理位;ClearInterruptPending 清除一个待处理位。两者都会立即重新计算最高优先待处理中断值。
InterruptEnabled 对该环的定时器中断检查配置位 1,对其他每个中断 ID 检查位 0。
ReadInterruptPending 和 ReadTopPendingInterrupt 在返回各自的上下文寄存器值之前调用 RefreshTimerPending。
只有输入的位 63:6 都为零时,EndOfInterrupt 才清除一个待处理中断;此时低六位选择 ID。无论编码检查结果如何,它都会清除该环的 _ACRTrapAsynchronous 和 _ACRTrapArgumentValid。
单独的最高优先待处理中断值 0 无法区分“没有待处理中断”和“中断 ID 0 待处理”;待处理中断位图才提供该信息。
如果待处理中断 ID 5 和 9 同时被置位,刷新会记录 5,因为扫描在第一个置位处停止。清除 ID 5 后,最高优先值重新计算为 9。
正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。
No NDF clause is attached to this unit.
12 matching entries
PTO-AVS-ARCH-SYSTEM-REGISTERS-INTERRUPT-STATIC-001tests/asl/arch/system-registers/interrupt/arch-static-interrupt-contract-001.asl95732ad1696857b64611f72d130cd82f331b7711b2c68d7b6595a832d9645166PTO-AVS-ARCH-TESTINTERRUPTREGISTERSTATE-STATE-TRANSITION-001tests/asl/arch/system-registers/interrupt/arch-state-register-001.asla64d42334a45d3834287228bb415e2c1d492d7d90323b099bea087aae3f7c78fPTO-EVIDENCE-RELEASE-TRACEABILITYPTO-EVIDENCE-RELEASE-TRACEABILITYspec/evidence/release-traceability-readiness.jsonc7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3ePTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREspec/evidence/instruction-contract-closure.json3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106aPTO-EVIDENCE-ARCHITECTURE-READINESSPTO-EVIDENCE-ARCHITECTURE-READINESSspec/evidence/architecture-readiness.json4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004PTO-EVIDENCE-RELEASE-GATE-READINESSPTO-EVIDENCE-RELEASE-GATE-READINESSspec/evidence/release-gate-readiness.jsona0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0PTO-EVIDENCE-RELEASE-MANIFESTPTO-EVIDENCE-RELEASE-MANIFESTspec/release-manifest.json1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8Loading ADR-0003…
ADR-0003docs/status/decisions/0003-pto-owned-system-register-names.mdc6a5379776c3b29c25f0896bc56f84d8f5c15832bbba0859b822aa99a65e342dLoading ADR-0010…
ADR-0010docs/status/decisions/0010-acr-routing-and-context-reset.md7594432a33c54880227fa3ab495bf5b29d406ac3b4e83634ffefe0a713e85f35Loading ADR-0016…
ADR-0016docs/status/decisions/0016-interrupt-pending-and-timer-state.mdd864e76e1cd097d55d05e36cc28adc756a2b2cc46df5720a6f6afa5b3f9b9fe0Loading ADR-0017…
ADR-0017docs/status/decisions/0017-system-register-behavior-classes.md6b4f7a29546952e4c5c61b0f4f921b04ecbc8340ba4ad86619277f17da97f95fLoading ADR-0031…
ADR-0031docs/status/decisions/0031-scalar-sys-totality-and-profile-boundaries.md5680b3516be6c28a1ccb198c99f5efb66317c65330f6d87434173024d2795a7d{
"classification": [
"system-registers",
"interrupt"
],
"documentation": "docs/arch/system-registers/interrupt.md",
"id": "PTO-ARCH-SYSTEM-REGISTERS-INTERRUPT",
"mnemonic": null,
"readiness_subjects": [
"ADR-0003",
"ADR-0010",
"ADR-0016",
"ADR-0017",
"ADR-0031"
],
"semantic_tests": [
"PTO-AVS-ARCH-TESTINTERRUPTREGISTERSTATE-STATE-TRANSITION-001"
],
"source": "asl/arch/system-registers/interrupt.asl",
"surface": "arch",
"tests": [
"PTO-AVS-ARCH-SYSTEM-REGISTERS-INTERRUPT-STATIC-001",
"PTO-AVS-ARCH-TESTINTERRUPTREGISTERSTATE-STATE-TRANSITION-001"
]
}0.58.5 · 候选发布7dc8b7e5b121d2b2499a2273bebff29e2cd868122341ac0204294c8619bbfc70f514e70f535ff7bc1ddb3d799639378d5071af34d38e6dcd6a6abc8d919fef40ce6dbc868a5e3b5c314533cd065482e65a1d4cffasl/arch/system-registers/interrupt.asl