arm-sleep-Modus ein-und Ausfahrt Unterschiede WFE, WFI
Ich bin einigermaßen neu in der ARM Architektur und ich bin versucht, wickeln Sie meinen Kopf herum, die wake-up-Mechanismus.
Also zu aller erst finde ich es schwer zu finden gute Infos auf dieser. Die ARM-Dokumentation scheint sehr knapp zu dem Thema.
Was ich möchte, zu verstehen ist, wenn die Rinde (besonders der M0 als das ist, was ich arbeite) wird aufwachen.
Referenz, habe ich ebenfalls gehört Folgendes:
- Was ist der Zweck von WFI und WFE-Anweisungen und die Ereignis-Signale?
- Warum wird der Prozessor in den standby-bei der Verwendung von WFE-Anweisung, aber nicht, wenn mit der WFI-Anweisung?
Den docs auf die WFE-Anweisungen sind:
3.7.11. WFE
Wait For Event.
Syntax
WFE
Operation
If the event register is 0, WFE suspends execution until
one of the following events occurs:
an exception, unless masked by the exception mask registers or the current
priority level
an exception enters the Pending state, if SEVONPEND in the
System Control Register is set
a Debug Entry request, if debug is enabled
an event signaled by a peripheral or another processor in a
multiprocessor system using the SEV instruction.
If the event register is 1, WFE clears it to 0 and completes immediately.
For more information see Power management.
Note
WFE is intended for power saving only. When writing software assume
that WFE might behave as NOP.
Restrictions
There are no restrictions.
Condition flags
This instruction does not change the flags.
Examples
WFE ; Wait for event
Der WFI:
3.7.12. WFI
Wait for Interrupt.
Syntax
WFI
Operation
WFI suspends execution until one of the following events occurs:
an exception
an interrupt becomes pending, which would preempt if PRIMASK was clear
a Debug Entry request, regardless of whether debug is enabled.
Note
WFI is intended for power saving only. When writing software assume
that WFI might behave as a NOP operation.
Restrictions
There are no restrictions.
Condition flags
This instruction does not change the flags.
Examples
WFI ; Wait for interrupt
Also, einige Fragen:
1) Erstens kann das bitte mal jemand klären, der Unterschied zwischen:
a) System-Handler Priorität Registriert
b) Interrupt Priority Register.
Ist es nur so, dass b) sind für interrupts, die nicht system-bezogene wie pendSv?
Nun für einige Szenarien. Wirklich ich würde gerne verstehen, wie die Szenarien geregelt:
NVIC IRQ aktivieren
NVIC anhängig
PRIMASK
Einfluss auf die ein-und Ausfahrt von der WFE und WFI.
Also die verschiedenen Kombinationen dieser bits ergibt 8 verschiedene Szenarien
{NVIC_IRQ ermöglichen, NVIC anhängig, PRIMASK}.
Habe ich schon Hinzugefügt, meine vage Vorstellung so weit. Bitte helfen Sie mir mit dieser Tabelle.
- 000 - Keine Verhinderung der WFE-oder WFI-Eintrag, aber keine wake-up-Bedingung entweder
- 001 - 000 als
- 010 - Wie funktioniert ausstehende Einfluss auf den Eintritt in den sleep-Modus für WFE und WFI?
- 011 - ich denke, die Antwort ist hier als 010, aber mit möglicherweise unterschiedlichen wake-up-Bedingungen?
- 100 - ich denke, dass die WFE und WFI beide geben Sie low-power-Modus und der Ausgang low-power-Modus kein problem.
- 101 - keinen Unterschied zu WFE-und WFI-power-Modus beenden hier?
- 110 - Keine Ahnung!
- 111 - Keine Ahnung!
Ich bin ohne die Prioritäten hier ich bin nicht zu besorgt über das exception-handling, um nur noch.
Ohne SEV und die event-Signale, tut WFE Verhalten sich genauso wie WFI, wenn SEVONPEND 0 ist?
- Ich kann nicht wirklich komplett verstehe Ihre Frage. Aber die ARM-Dokumentation ist eher vage, weil es bis zu den SOC-Umsetzer hook-up diese Signale unterschiedlicher Logik. Ich glaube nicht, dass dies relevant ist, auf den NVIC (ich weiß, das GIC besser) also vielleicht kann mir jemand Antwort Ihre Frage direkt; jedoch sollten Sie Ihren SOC-Dokumentation zu sehen, ob es etwas über dieses Verhalten. Zum Beispiel, viele SOC haben ein register, das weiter verfeinert, was passiert, auf ein
WFI
; anhalten der CPU nur auf alle Uhren aus, aber DDR-32kHz self-refresh. - Zum Beispiel auf einigen SOC, ob ein interrupt auf eine
WFI
konfiguriert ist durch ein eigenes register, das SOC spezifisch. Zum Beispiel eine UART-Modul kann die Unterstützung asynchroner statischer Logik, die erkennt, eine eingehende Zeichen. Sie können konfigurieren, diese zu wecken aus dem tiefsten Schlaf-Modi. Also die NVIC Register möglicherweise nicht auf allen beteiligten. Es gibt einige interne WFI_WAKE Art signal, dass der SOC wird die route um den Kern. - Vielen Dank für die Informationen. Ich war nicht bewusst diese zusätzlichen Signale. Meine Frage bezieht sich auf die Bedeutungen der oben genannten bits.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der primäre Mechanismus für die wake, die Sie sehen auf einem Cortex-M ist ein interrupt, daher WFI (wait for interrupt). Auf alle Implementierungen, die ich gesehen habe, dass die Ergebnisse in clock-gating der Kern, obwohl tiefer Schlaf/höhere Latenz-Modi sind manchmal verfügbar, wenn das design unterstützt.
WFE ist wichtiger bei multi-Prozessor-designs.
Hinblick auf die Fragen -
1. Interrupts und System-Handler sind sehr ähnlich in der Cortex-M -, unterschiedliche Erster Linie durch, wie Sie ausgelöst werden. Die Architektur unterscheidet zwischen Ihnen, aber in der Praxis sind Sie gleich.
Sind für Ihre bit-Tabellen, die Sie nicht wirklich Sinn machen. Jeder Cortex-M-Implementierung hat seine eigene interpretation dessen, was passiert, während der WFI. Es kann variieren von basic clock-gating zu deep-sleep-Modi. Fragen Sie Ihren Mikroprozessor-Dokumentation für die wahre Geschichte.
PRIMASK nicht beeinflussen aufwachen aus dem Schlaf-Verhalten.
Meine Antwort auf Ihre Frage über den Unterschied zwischen der WFI und WFE basiert auf ARM Cortex-A9 MPcore, werfen Sie bitte einen Blick auf diesen link ARM cortex-a9 MPcore TRM.
Grundsätzlich gibt es vier CPU-Betriebsart run-Modus, standby-Modus, dormant-Modus, Modus Herunterfahren.
Sind die Unterschiede für WFI und WFE den Weg zu bringen, die CPU in den run-Modus.
WFE arbeiten mit der Ausführung einer SEV Unterricht auf allen Prozessoren in Multiprozessor-system, und funktioniert auch mit einer assertion des EVENTI Eingangssignal.
WFI nicht diese zwei.
Auch die Art, wie Sie behandeln die Ursachen.
WFI muss die Arbeit mit den IRQ_Handler, WFE nicht zu haben.