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:

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.
InformationsquelleAutor Gregory Kuhn | 2014-11-28
Schreibe einen Kommentar